| OLD | NEW |
| 1 // The following is adapted from fdlibm (http://www.netlib.org/fdlibm). | 1 // The following is adapted from fdlibm (http://www.netlib.org/fdlibm). |
| 2 // | 2 // |
| 3 // ==================================================== | 3 // ==================================================== |
| 4 // Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. | 4 // Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. |
| 5 // | 5 // |
| 6 // Developed at SunSoft, a Sun Microsystems, Inc. business. | 6 // Developed at SunSoft, a Sun Microsystems, Inc. business. |
| 7 // Permission to use, copy, modify, and distribute this | 7 // Permission to use, copy, modify, and distribute this |
| 8 // software is freely granted, provided that this notice | 8 // software is freely granted, provided that this notice |
| 9 // is preserved. | 9 // is preserved. |
| 10 // ==================================================== | 10 // ==================================================== |
| 11 // | 11 // |
| 12 // The original source code covered by the above license above has been | 12 // The original source code covered by the above license above has been |
| 13 // modified significantly by Google Inc. | 13 // modified significantly by Google Inc. |
| 14 // Copyright 2014 the V8 project authors. All rights reserved. | 14 // Copyright 2014 the V8 project authors. All rights reserved. |
| 15 | 15 |
| 16 #include "src/v8.h" | 16 #include "src/v8.h" |
| 17 | 17 |
| 18 #include "src/double.h" | 18 #include "src/double.h" |
| 19 #include "third_party/fdlibm/fdlibm.h" | 19 #include "third_party/fdlibm/fdlibm.h" |
| 20 | 20 |
| 21 | 21 |
| 22 namespace v8 { | 22 namespace v8 { |
| 23 namespace internal { | 23 namespace fdlibm { |
| 24 | 24 |
| 25 #ifdef _MSC_VER | 25 #ifdef _MSC_VER |
| 26 inline double scalbn(double x, int y) { return _scalb(x, y); } | 26 inline double scalbn(double x, int y) { return _scalb(x, y); } |
| 27 #endif // _MSC_VER | 27 #endif // _MSC_VER |
| 28 | 28 |
| 29 const double TrigonometricConstants::constants[] = { | 29 const double TrigonometricConstants::constants[] = { |
| 30 6.36619772367581382433e-01, // invpio2 0 | 30 6.36619772367581382433e-01, // invpio2 0 |
| 31 1.57079632673412561417e+00, // pio2_1 1 | 31 1.57079632673412561417e+00, // pio2_1 1 |
| 32 6.07710050650619224932e-11, // pio2_1t 2 | 32 6.07710050650619224932e-11, // pio2_1t 2 |
| 33 6.07710050630396597660e-11, // pio2_2 3 | 33 6.07710050630396597660e-11, // pio2_2 3 |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 for (int i = jz; i >= 0; i--) fw += fq[i]; | 221 for (int i = jz; i >= 0; i--) fw += fq[i]; |
| 222 y[0] = (ih == 0) ? fw : -fw; | 222 y[0] = (ih == 0) ? fw : -fw; |
| 223 fw = fq[0] - fw; | 223 fw = fq[0] - fw; |
| 224 for (int i = 1; i <= jz; i++) fw += fq[i]; | 224 for (int i = 1; i <= jz; i++) fw += fq[i]; |
| 225 y[1] = (ih == 0) ? fw : -fw; | 225 y[1] = (ih == 0) ? fw : -fw; |
| 226 return n & 7; | 226 return n & 7; |
| 227 } | 227 } |
| 228 | 228 |
| 229 | 229 |
| 230 int rempio2(double x, double* y) { | 230 int rempio2(double x, double* y) { |
| 231 int32_t hx = static_cast<int32_t>(double_to_uint64(x) >> 32); | 231 int32_t hx = static_cast<int32_t>(internal::double_to_uint64(x) >> 32); |
| 232 int32_t ix = hx & 0x7fffffff; | 232 int32_t ix = hx & 0x7fffffff; |
| 233 | 233 |
| 234 if (ix >= 0x7ff00000) { | 234 if (ix >= 0x7ff00000) { |
| 235 *y = base::OS::nan_value(); | 235 *y = base::OS::nan_value(); |
| 236 return 0; | 236 return 0; |
| 237 } | 237 } |
| 238 | 238 |
| 239 int32_t e0 = (ix >> 20) - 1046; | 239 int32_t e0 = (ix >> 20) - 1046; |
| 240 uint64_t zi = double_to_uint64(x) & 0xFFFFFFFFu; | 240 uint64_t zi = internal::double_to_uint64(x) & 0xFFFFFFFFu; |
| 241 zi |= static_cast<uint64_t>(ix - (e0 << 20)) << 32; | 241 zi |= static_cast<uint64_t>(ix - (e0 << 20)) << 32; |
| 242 double z = uint64_to_double(zi); | 242 double z = internal::uint64_to_double(zi); |
| 243 | 243 |
| 244 double tx[3]; | 244 double tx[3]; |
| 245 for (int i = 0; i < 2; i++) { | 245 for (int i = 0; i < 2; i++) { |
| 246 tx[i] = static_cast<double>(static_cast<int32_t>(z)); | 246 tx[i] = static_cast<double>(static_cast<int32_t>(z)); |
| 247 z = (z - tx[i]) * two24; | 247 z = (z - tx[i]) * two24; |
| 248 } | 248 } |
| 249 tx[2] = z; | 249 tx[2] = z; |
| 250 | 250 |
| 251 int nx = 3; | 251 int nx = 3; |
| 252 while (tx[nx - 1] == zero) nx--; | 252 while (tx[nx - 1] == zero) nx--; |
| 253 int n = __kernel_rem_pio2(tx, y, e0, nx); | 253 int n = __kernel_rem_pio2(tx, y, e0, nx); |
| 254 if (hx < 0) { | 254 if (hx < 0) { |
| 255 y[0] = -y[0]; | 255 y[0] = -y[0]; |
| 256 y[1] = -y[1]; | 256 y[1] = -y[1]; |
| 257 return -n; | 257 return -n; |
| 258 } | 258 } |
| 259 return n; | 259 return n; |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 } // namespace v8::internal | 262 } // namespace v8::internal |
| OLD | NEW |