Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 7c37e8ee8b2214ae6f9d901f3613c9e6101c86d7..8be544425698c15cb67c91de4a8b3d4652624e4e 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -3615,7 +3615,6 @@ void LCodeGen::DoStoreKeyedFastDoubleElement( |
Register scratch = scratch0(); |
bool key_is_constant = instr->key()->IsConstantOperand(); |
int constant_key = 0; |
- Label not_nan; |
// Calculate the effective address of the slot in the array to store the |
// double value. |
@@ -3638,13 +3637,15 @@ void LCodeGen::DoStoreKeyedFastDoubleElement( |
Operand(FixedDoubleArray::kHeaderSize - kHeapObjectTag)); |
} |
- // Check for NaN. All NaNs must be canonicalized. |
- __ VFPCompareAndSetFlags(value, value); |
- |
- // Only load canonical NaN if the comparison above set the overflow. |
- __ Vmov(value, FixedDoubleArray::canonical_not_the_hole_nan_as_double(), vs); |
+ if (instr->NeedsCanonicalization()) { |
+ // Check for NaN. All NaNs must be canonicalized. |
+ __ VFPCompareAndSetFlags(value, value); |
+ // Only load canonical NaN if the comparison above set the overflow. |
+ __ Vmov(value, |
+ FixedDoubleArray::canonical_not_the_hole_nan_as_double(), |
+ vs); |
+ } |
- __ bind(¬_nan); |
__ vstr(value, scratch, 0); |
} |