Reviewers: fschneider,
Description:
Emit slightly more compact code in untag double.
Please review this at http://codereview.chromium.org/6677111/
Affected files:
M src/assembler.h
M src/assembler.cc
M src/ia32/lithium-codegen-ia32.cc
Index: src/assembler.cc
diff --git a/src/assembler.cc b/src/assembler.cc
index
b0b44fd980e0721bc7e32f7f4ec6bacccf7dc911..de3711b341b33ca098a347188126237ee7b9e129
100644
--- a/src/assembler.cc
+++ b/src/assembler.cc
@@ -67,6 +67,7 @@ namespace internal {
const double DoubleConstant::min_int = kMinInt;
const double DoubleConstant::one_half = 0.5;
const double DoubleConstant::minus_zero = -0.0;
+const double DoubleConstant::nan = OS::nan_value();
const double DoubleConstant::negative_infinity = -V8_INFINITY;
const char* RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";
@@ -745,6 +746,12 @@ ExternalReference
ExternalReference::address_of_negative_infinity() {
}
+ExternalReference ExternalReference::address_of_nan() {
+ return ExternalReference(reinterpret_cast<void*>(
+ const_cast<double*>(&DoubleConstant::nan)));
+}
+
+
#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
8ebbfadf80f0c3bc88a991233434686986d086b4..b66421a2e72a1cb97137d45d66bbba441ac41fb0
100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -53,6 +53,7 @@ class DoubleConstant: public AllStatic {
static const double one_half;
static const double minus_zero;
static const double negative_infinity;
+ static const double nan;
};
@@ -590,6 +591,7 @@ class ExternalReference BASE_EMBEDDED {
static ExternalReference address_of_one_half();
static ExternalReference address_of_minus_zero();
static ExternalReference address_of_negative_infinity();
+ static ExternalReference address_of_nan();
static ExternalReference math_sin_double_function();
static ExternalReference math_cos_double_function();
Index: src/ia32/lithium-codegen-ia32.cc
diff --git a/src/ia32/lithium-codegen-ia32.cc
b/src/ia32/lithium-codegen-ia32.cc
index
78784b248f9e68857e25d7322b8aa49729e3b41e..d97c4fc6ee046f6bb5d671d9867144d39962d162
100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -3289,10 +3289,8 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
DeoptimizeIf(not_equal, env);
// Convert undefined to NaN.
- __ push(input_reg);
- __ mov(input_reg, Factory::nan_value());
- __ movdbl(result_reg, FieldOperand(input_reg, HeapNumber::kValueOffset));
- __ pop(input_reg);
+ ExternalReference nan = ExternalReference::address_of_nan();
+ __ movdbl(result_reg, Operand::StaticVariable(nan));
__ jmp(&done);
// Heap number to XMM conversion.
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev