| 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);
|
| }
|
|
|
|
|