diff options
author | Bert Belder <bertbelder@gmail.com> | 2012-06-13 15:34:45 +0200 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2012-06-14 01:37:13 +0200 |
commit | 50464cd4f49e40f4fe792ff46a81052319a222e9 (patch) | |
tree | 1fe524b2e6c0eb3c459142cd27539f88e1a3f63c /deps/v8/src/assembler.cc | |
parent | 09be360a0fee2c7619bae8c4248f9ed3d79d1b30 (diff) | |
download | android-node-v8-50464cd4f49e40f4fe792ff46a81052319a222e9.tar.gz android-node-v8-50464cd4f49e40f4fe792ff46a81052319a222e9.tar.bz2 android-node-v8-50464cd4f49e40f4fe792ff46a81052319a222e9.zip |
v8: upgrade to v3.11.10
Diffstat (limited to 'deps/v8/src/assembler.cc')
-rw-r--r-- | deps/v8/src/assembler.cc | 95 |
1 files changed, 64 insertions, 31 deletions
diff --git a/deps/v8/src/assembler.cc b/deps/v8/src/assembler.cc index 4944202f07..d4c49ddd45 100644 --- a/deps/v8/src/assembler.cc +++ b/deps/v8/src/assembler.cc @@ -99,21 +99,7 @@ struct DoubleConstant BASE_EMBEDDED { double the_hole_nan; }; -struct InitializeDoubleConstants { - static void Construct(DoubleConstant* double_constants) { - double_constants->min_int = kMinInt; - double_constants->one_half = 0.5; - double_constants->minus_zero = -0.0; - double_constants->uint8_max_value = 255; - double_constants->zero = 0.0; - double_constants->canonical_non_hole_nan = OS::nan_value(); - double_constants->the_hole_nan = BitCast<double>(kHoleNanInt64); - double_constants->negative_infinity = -V8_INFINITY; - } -}; - -static LazyInstance<DoubleConstant, InitializeDoubleConstants>::type - double_constants = LAZY_INSTANCE_INITIALIZER; +static DoubleConstant double_constants; const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING"; @@ -726,6 +712,18 @@ void RelocInfo::Verify() { // ----------------------------------------------------------------------------- // Implementation of ExternalReference +void ExternalReference::SetUp() { + double_constants.min_int = kMinInt; + double_constants.one_half = 0.5; + double_constants.minus_zero = -0.0; + double_constants.uint8_max_value = 255; + double_constants.zero = 0.0; + double_constants.canonical_non_hole_nan = OS::nan_value(); + double_constants.the_hole_nan = BitCast<double>(kHoleNanInt64); + double_constants.negative_infinity = -V8_INFINITY; +} + + ExternalReference::ExternalReference(Builtins::CFunctionId id, Isolate* isolate) : address_(Redirect(isolate, Builtins::c_function_address(id))) {} @@ -957,51 +955,66 @@ ExternalReference ExternalReference::scheduled_exception_address( } +ExternalReference ExternalReference::address_of_pending_message_obj( + Isolate* isolate) { + return ExternalReference(isolate->pending_message_obj_address()); +} + + +ExternalReference ExternalReference::address_of_has_pending_message( + Isolate* isolate) { + return ExternalReference(isolate->has_pending_message_address()); +} + + +ExternalReference ExternalReference::address_of_pending_message_script( + Isolate* isolate) { + return ExternalReference(isolate->pending_message_script_address()); +} + + ExternalReference ExternalReference::address_of_min_int() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->min_int)); + return ExternalReference(reinterpret_cast<void*>(&double_constants.min_int)); } ExternalReference ExternalReference::address_of_one_half() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->one_half)); + return ExternalReference(reinterpret_cast<void*>(&double_constants.one_half)); } ExternalReference ExternalReference::address_of_minus_zero() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->minus_zero)); + return ExternalReference( + reinterpret_cast<void*>(&double_constants.minus_zero)); } ExternalReference ExternalReference::address_of_zero() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->zero)); + return ExternalReference(reinterpret_cast<void*>(&double_constants.zero)); } ExternalReference ExternalReference::address_of_uint8_max_value() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->uint8_max_value)); + return ExternalReference( + reinterpret_cast<void*>(&double_constants.uint8_max_value)); } ExternalReference ExternalReference::address_of_negative_infinity() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->negative_infinity)); + return ExternalReference( + reinterpret_cast<void*>(&double_constants.negative_infinity)); } ExternalReference ExternalReference::address_of_canonical_non_hole_nan() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->canonical_non_hole_nan)); + return ExternalReference( + reinterpret_cast<void*>(&double_constants.canonical_non_hole_nan)); } ExternalReference ExternalReference::address_of_the_hole_nan() { - return ExternalReference(reinterpret_cast<void*>( - &double_constants.Pointer()->the_hole_nan)); + return ExternalReference( + reinterpret_cast<void*>(&double_constants.the_hole_nan)); } @@ -1138,6 +1151,12 @@ ExternalReference ExternalReference::math_log_double_function( } +ExternalReference ExternalReference::page_flags(Page* page) { + return ExternalReference(reinterpret_cast<Address>(page) + + MemoryChunk::kFlagsOffset); +} + + // Helper function to compute x^y, where y is known to be an // integer. Uses binary decomposition to limit the number of // multiplications; see the discussion in "Hacker's Delight" by Henry @@ -1158,6 +1177,20 @@ double power_double_int(double x, int y) { double power_double_double(double x, double y) { +#ifdef __MINGW64_VERSION_MAJOR + // MinGW64 has a custom implementation for pow. This handles certain + // special cases that are different. + if ((x == 0.0 || isinf(x)) && isfinite(y)) { + double f; + if (modf(y, &f) != 0.0) return ((x == 0.0) ^ (y > 0)) ? V8_INFINITY : 0; + } + + if (x == 2.0) { + int y_int = static_cast<int>(y); + if (y == y_int) return ldexp(1.0, y_int); + } +#endif + // The checks for special cases can be dropped in ia32 because it has already // been done in generated code before bailing out here. if (isnan(y) || ((x == 1 || x == -1) && isinf(y))) return OS::nan_value(); |