Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 61eb8ad72a30ff6dd34ae4410c1bca3a644cca00..2ab727b71d8bb303043a9567aabace6b65ba5936 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -7670,6 +7670,34 @@ RUNTIME_UNARY_MATH(log) |
#undef RUNTIME_UNARY_MATH |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DoubleHi) { |
+ SealHandleScope shs(isolate); |
+ ASSERT(args.length() == 1); |
+ CONVERT_DOUBLE_ARG_CHECKED(x, 0); |
+ return isolate->heap()->NumberFromDouble( |
+ static_cast<int32_t>(double_to_uint64(x) >> 32)); |
+} |
+ |
+ |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DoubleLo) { |
+ SealHandleScope shs(isolate); |
+ ASSERT(args.length() == 1); |
+ CONVERT_DOUBLE_ARG_CHECKED(x, 0); |
+ return isolate->heap()->NumberFromDouble( |
+ static_cast<int32_t>(double_to_uint64(x) & 0xffffffff)); |
Sven Panne
2014/03/03 11:28:27
Add an unsigned suffix 'u' to the hexadecimal cons
|
+} |
+ |
+ |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_ConstructDouble) { |
+ SealHandleScope shs(isolate); |
+ ASSERT(args.length() == 2); |
+ CONVERT_NUMBER_CHECKED(uint32_t, hi, Uint32, args[0]); |
+ CONVERT_NUMBER_CHECKED(uint32_t, lo, Uint32, args[1]); |
+ uint64_t result = (static_cast<uint64_t>(hi) << 32) | lo; |
+ return isolate->heap()->AllocateHeapNumber(uint64_to_double(result)); |
+} |
+ |
+ |
// Cube root approximation, refer to: http://metamerist.com/cbrt/cbrt.htm |
// Using initial approximation adapted from Kahan's cbrt and 4 iterations |
// of Newton's method. |