src/share/vm/runtime/sharedRuntimeTrig.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
bug_jdk8043301_2 Cdiff src/share/vm/runtime/sharedRuntimeTrig.cpp
src/share/vm/runtime/sharedRuntimeTrig.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 61,127 ****
#define SAFEBUF __declspec(safebuffers)
#else
#define SAFEBUF
#endif
! #include <math.h>
!
! // VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
! // [jk] this is not 100% correct because the float word order may different
! // from the byte order (e.g. on ARM)
! #ifdef VM_LITTLE_ENDIAN
! # define __HI(x) *(1+(int*)&x)
! # define __LO(x) *(int*)&x
! #else
! # define __HI(x) *(int*)&x
! # define __LO(x) *(1+(int*)&x)
! #endif
!
! static double copysignA(double x, double y) {
! __HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
! return x;
! }
!
! /*
! * scalbn (double x, int n)
! * scalbn(x,n) returns x* 2**n computed by exponent
! * manipulation rather than by actually performing an
! * exponentiation or a multiplication.
! */
!
! static const double
! two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
! twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
! hugeX = 1.0e+300,
! tiny = 1.0e-300;
!
! static double scalbnA (double x, int n) {
! int k,hx,lx;
! hx = __HI(x);
! lx = __LO(x);
! k = (hx&0x7ff00000)>>20; /* extract exponent */
! if (k==0) { /* 0 or subnormal x */
! if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
! x *= two54;
! hx = __HI(x);
! k = ((hx&0x7ff00000)>>20) - 54;
! if (n< -50000) return tiny*x; /*underflow*/
! }
! if (k==0x7ff) return x+x; /* NaN or Inf */
! k = k+n;
! if (k > 0x7fe) return hugeX*copysignA(hugeX,x); /* overflow */
! if (k > 0) /* normal result */
! {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
! if (k <= -54) {
! if (n > 50000) /* in case integer overflow in n+k */
! return hugeX*copysignA(hugeX,x); /*overflow*/
! else return tiny*copysignA(tiny,x); /*underflow*/
! }
! k += 54; /* subnormal result */
! __HI(x) = (hx&0x800fffff)|(k<<20);
! return x*twom54;
! }
/*
* __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
* double x[],y[]; int e0,nx,prec; int ipio2[];
*
--- 61,71 ----
#define SAFEBUF __declspec(safebuffers)
#else
#define SAFEBUF
#endif
! #include "runtime/sharedRuntimeMath.hpp"
/*
* __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
* double x[],y[]; int e0,nx,prec; int ipio2[];
*
src/share/vm/runtime/sharedRuntimeTrig.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File