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 // ==================================================== |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 y[1] = (ih == 0) ? fw : -fw; | 257 y[1] = (ih == 0) ? fw : -fw; |
258 return n & 7; | 258 return n & 7; |
259 } | 259 } |
260 | 260 |
261 | 261 |
262 int rempio2(double x, double* y) { | 262 int rempio2(double x, double* y) { |
263 int32_t hx = static_cast<int32_t>(internal::double_to_uint64(x) >> 32); | 263 int32_t hx = static_cast<int32_t>(internal::double_to_uint64(x) >> 32); |
264 int32_t ix = hx & 0x7fffffff; | 264 int32_t ix = hx & 0x7fffffff; |
265 | 265 |
266 if (ix >= 0x7ff00000) { | 266 if (ix >= 0x7ff00000) { |
267 *y = base::OS::nan_value(); | 267 *y = std::numeric_limits<double>::quiet_NaN(); |
268 return 0; | 268 return 0; |
269 } | 269 } |
270 | 270 |
271 int32_t e0 = (ix >> 20) - 1046; | 271 int32_t e0 = (ix >> 20) - 1046; |
272 uint64_t zi = internal::double_to_uint64(x) & 0xFFFFFFFFu; | 272 uint64_t zi = internal::double_to_uint64(x) & 0xFFFFFFFFu; |
273 zi |= static_cast<uint64_t>(ix - (e0 << 20)) << 32; | 273 zi |= static_cast<uint64_t>(ix - (e0 << 20)) << 32; |
274 double z = internal::uint64_to_double(zi); | 274 double z = internal::uint64_to_double(zi); |
275 | 275 |
276 double tx[3]; | 276 double tx[3]; |
277 for (int i = 0; i < 2; i++) { | 277 for (int i = 0; i < 2; i++) { |
278 tx[i] = static_cast<double>(static_cast<int32_t>(z)); | 278 tx[i] = static_cast<double>(static_cast<int32_t>(z)); |
279 z = (z - tx[i]) * two24; | 279 z = (z - tx[i]) * two24; |
280 } | 280 } |
281 tx[2] = z; | 281 tx[2] = z; |
282 | 282 |
283 int nx = 3; | 283 int nx = 3; |
284 while (tx[nx - 1] == zero) nx--; | 284 while (tx[nx - 1] == zero) nx--; |
285 int n = __kernel_rem_pio2(tx, y, e0, nx); | 285 int n = __kernel_rem_pio2(tx, y, e0, nx); |
286 if (hx < 0) { | 286 if (hx < 0) { |
287 y[0] = -y[0]; | 287 y[0] = -y[0]; |
288 y[1] = -y[1]; | 288 y[1] = -y[1]; |
289 return -n; | 289 return -n; |
290 } | 290 } |
291 return n; | 291 return n; |
292 } | 292 } |
293 } | 293 } |
294 } // namespace v8::internal | 294 } // namespace v8::internal |
OLD | NEW |