Reviewers: Benedikt Meurer,
Description:
Intel port of: EmitNumberUntagD() Improvment
BUG=
Please review this at https://codereview.chromium.org/23872026/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+12, -6 lines):
M src/ia32/lithium-codegen-ia32.cc
M src/x64/lithium-codegen-x64.cc
Index: src/ia32/lithium-codegen-ia32.cc
diff --git a/src/ia32/lithium-codegen-ia32.cc
b/src/ia32/lithium-codegen-ia32.cc
index
9727b842345fd5bc45fbfdf52423e6193b30f11b..1f2aac054856b61eb688b4bcb5c4f1dde4f0b5a5
100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -5318,10 +5318,15 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
__ cmp(FieldOperand(input_reg, HeapObject::kMapOffset),
factory()->heap_number_map());
if (!can_convert_undefined_to_nan) {
+ // Heap number to XMM conversion.
+ __ movdbl(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
DeoptimizeIf(not_equal, env);
} else {
Label heap_number, convert;
- __ j(equal, &heap_number, Label::kNear);
+ // Heap number to XMM conversion.
+ __ movdbl(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
+ __ j(equal, deoptimize_on_minus_zero ? &heap_number : &done,
+ Label::kNear);
// Convert undefined (and hole) to NaN.
__ cmp(input_reg, factory()->undefined_value());
@@ -5335,8 +5340,6 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
__ bind(&heap_number);
}
- // Heap number to XMM conversion.
- __ movdbl(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
if (deoptimize_on_minus_zero) {
XMMRegister xmm_scratch = xmm0;
__ xorps(xmm_scratch, xmm_scratch);
Index: src/x64/lithium-codegen-x64.cc
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
index
a02a88ea344d43b2296c987f0bcf4012ac47d19b..71e11ce8deb3ce142d7a93912958c75a1f846a3c
100644
--- a/src/x64/lithium-codegen-x64.cc
+++ b/src/x64/lithium-codegen-x64.cc
@@ -4633,10 +4633,15 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
__ CompareRoot(FieldOperand(input_reg, HeapObject::kMapOffset),
Heap::kHeapNumberMapRootIndex);
if (!can_convert_undefined_to_nan) {
+ // Heap number to XMM conversion.
+ __ movsd(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
DeoptimizeIf(not_equal, env);
} else {
Label heap_number, convert;
- __ j(equal, &heap_number, Label::kNear);
+ // Heap number to XMM conversion.
+ __ movsd(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
+ __ j(equal, deoptimize_on_minus_zero ? &heap_number : &done,
+ Label::kNear);
// Convert undefined (and hole) to NaN. Compute NaN as 0/0.
__ CompareRoot(input_reg, Heap::kUndefinedValueRootIndex);
@@ -4649,8 +4654,6 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
__ bind(&heap_number);
}
- // Heap number to XMM conversion.
- __ movsd(result_reg, FieldOperand(input_reg,
HeapNumber::kValueOffset));
if (deoptimize_on_minus_zero) {
XMMRegister xmm_scratch = xmm0;
__ xorps(xmm_scratch, xmm_scratch);
--
--
v8-dev mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.