Reviewers: Sven Panne,
Description:
Properly export uin32_bias double constant.
This makes LoadUint32 snapshot safe.
BUG=
Please review this at https://codereview.chromium.org/27156004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+21, -10 lines):
M src/assembler.h
M src/assembler.cc
M src/code-stubs.cc
M src/ia32/macro-assembler-ia32.cc
M src/serialize.cc
Index: src/assembler.cc
diff --git a/src/assembler.cc b/src/assembler.cc
index
c6228eb353eaad7da8a18f10f8c5a84c07215f3e..63294f9fd133ac14c119cb77ac1d7bc6b900b369
100644
--- a/src/assembler.cc
+++ b/src/assembler.cc
@@ -98,6 +98,7 @@ struct DoubleConstant BASE_EMBEDDED {
double negative_infinity;
double canonical_non_hole_nan;
double the_hole_nan;
+ double uint32_bias;
};
static DoubleConstant double_constants;
@@ -908,6 +909,8 @@ void ExternalReference::SetUp() {
double_constants.canonical_non_hole_nan = OS::nan_value();
double_constants.the_hole_nan = BitCast<double>(kHoleNanInt64);
double_constants.negative_infinity = -V8_INFINITY;
+ double_constants.uint32_bias =
+ static_cast<double>(static_cast<uint32_t>(0xFFFFFFFF)) + 1;
math_exp_data_mutex = new Mutex();
}
@@ -1333,6 +1336,12 @@ ExternalReference
ExternalReference::address_of_the_hole_nan() {
}
+ExternalReference ExternalReference::address_of_uint32_bias() {
+ return ExternalReference(
+ reinterpret_cast<void*>(&double_constants.uint32_bias));
+}
+
+
#ifndef V8_INTERPRETED_REGEXP
ExternalReference ExternalReference::re_check_stack_guard_state(
Index: src/assembler.h
diff --git a/src/assembler.h b/src/assembler.h
index
3bba98bb7dded9408319160478a39be062846a16..57eb0f290595234a46467967907e1d82ccf2db1f
100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -810,6 +810,7 @@ class ExternalReference BASE_EMBEDDED {
static ExternalReference address_of_negative_infinity();
static ExternalReference address_of_canonical_non_hole_nan();
static ExternalReference address_of_the_hole_nan();
+ static ExternalReference address_of_uint32_bias();
static ExternalReference math_sin_double_function(Isolate* isolate);
static ExternalReference math_cos_double_function(Isolate* isolate);
Index: src/code-stubs.cc
diff --git a/src/code-stubs.cc b/src/code-stubs.cc
index
2a60d1532e1f630cf30b02d49337d5e2396fbec9..068113779910f4d5215b6599757bd412189a9dc4
100644
--- a/src/code-stubs.cc
+++ b/src/code-stubs.cc
@@ -473,6 +473,7 @@ void BinaryOpStub::GenerateAheadOfTime(Isolate*
isolate) {
Generate(Token::SHR, INT32, SMI, SMI, OVERWRITE_RIGHT, isolate);
Generate(Token::SHR, NUMBER, SMI, SMI, NO_OVERWRITE, isolate);
Generate(Token::SHR, NUMBER, SMI, SMI, OVERWRITE_LEFT, isolate);
+ Generate(Token::SHR, NUMBER, SMI, INT32, OVERWRITE_RIGHT, isolate);
Generate(Token::SHR, SMI, SMI, SMI, NO_OVERWRITE, isolate);
Generate(Token::SHR, SMI, SMI, SMI, OVERWRITE_LEFT, isolate);
Generate(Token::SHR, SMI, SMI, SMI, OVERWRITE_RIGHT, isolate);
Index: src/ia32/macro-assembler-ia32.cc
diff --git a/src/ia32/macro-assembler-ia32.cc
b/src/ia32/macro-assembler-ia32.cc
index
16b8bd79fb9166b59167a5a50fadd358bef5d77c..63e786b273c721ab701b25df5cd9ad8738438492
100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -445,19 +445,14 @@ void MacroAssembler::TaggedToI(Register result_reg,
}
-
-static double kUint32Bias =
- static_cast<double>(static_cast<uint32_t>(0xFFFFFFFF)) + 1;
-
-
void MacroAssembler::LoadUint32(XMMRegister dst,
Register src,
XMMRegister scratch) {
- ASSERT(!Serializer::enabled());
Label done;
cmp(src, Immediate(0));
- movdbl(scratch,
- Operand(reinterpret_cast<int32_t>(&kUint32Bias),
RelocInfo::NONE32));
+ ExternalReference uint32_bias =
+ ExternalReference::address_of_uint32_bias();
+ movdbl(scratch, Operand::StaticVariable(uint32_bias));
Cvtsi2sd(dst, src);
j(not_sign, &done, Label::kNear);
addsd(dst, scratch);
@@ -466,13 +461,14 @@ void MacroAssembler::LoadUint32(XMMRegister dst,
void MacroAssembler::LoadUint32NoSSE2(Register src) {
- ASSERT(!Serializer::enabled());
Label done;
push(src);
fild_s(Operand(esp, 0));
cmp(src, Immediate(0));
j(not_sign, &done, Label::kNear);
- fld_d(Operand(reinterpret_cast<int32_t>(&kUint32Bias),
RelocInfo::NONE32));
+ ExternalReference uint32_bias =
+ ExternalReference::address_of_uint32_bias();
+ fld_d(Operand::StaticVariable(uint32_bias));
faddp(1);
bind(&done);
add(esp, Immediate(kPointerSize));
Index: src/serialize.cc
diff --git a/src/serialize.cc b/src/serialize.cc
index
ef1461f1e9b6b5b634055cea1be441934495c90f..eceadf704994b201c7c2b1329dac3a6e69ddf299
100644
--- a/src/serialize.cc
+++ b/src/serialize.cc
@@ -581,6 +581,10 @@ void ExternalReferenceTable::PopulateTable(Isolate*
isolate) {
UNCLASSIFIED,
63,
"Heap::allocation_sites_list_address()");
+ Add(ExternalReference::address_of_uint32_bias().address(),
+ UNCLASSIFIED,
+ 64,
+ "uint32_bias");
// Add a small set of deopt entry addresses to encoder without
generating the
// deopt table code, which isn't possible at deserialization time.
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.