| Index: src/arm/code-stubs-arm.cc
|
| ===================================================================
|
| --- src/arm/code-stubs-arm.cc (revision 12603)
|
| +++ src/arm/code-stubs-arm.cc (working copy)
|
| @@ -3636,13 +3636,13 @@
|
| Label not_plus_half;
|
|
|
| // Test for 0.5.
|
| - __ vmov(double_scratch, 0.5);
|
| + __ vmov(double_scratch, 0.5, scratch);
|
| __ VFPCompareAndSetFlags(double_exponent, double_scratch);
|
| __ b(ne, ¬_plus_half);
|
|
|
| // Calculates square root of base. Check for the special case of
|
| // Math.pow(-Infinity, 0.5) == Infinity (ECMA spec, 15.8.2.13).
|
| - __ vmov(double_scratch, -V8_INFINITY);
|
| + __ vmov(double_scratch, -V8_INFINITY, scratch);
|
| __ VFPCompareAndSetFlags(double_base, double_scratch);
|
| __ vneg(double_result, double_scratch, eq);
|
| __ b(eq, &done);
|
| @@ -3653,20 +3653,20 @@
|
| __ jmp(&done);
|
|
|
| __ bind(¬_plus_half);
|
| - __ vmov(double_scratch, -0.5);
|
| + __ vmov(double_scratch, -0.5, scratch);
|
| __ VFPCompareAndSetFlags(double_exponent, double_scratch);
|
| __ b(ne, &call_runtime);
|
|
|
| // Calculates square root of base. Check for the special case of
|
| // Math.pow(-Infinity, -0.5) == 0 (ECMA spec, 15.8.2.13).
|
| - __ vmov(double_scratch, -V8_INFINITY);
|
| + __ vmov(double_scratch, -V8_INFINITY, scratch);
|
| __ VFPCompareAndSetFlags(double_base, double_scratch);
|
| __ vmov(double_result, kDoubleRegZero, eq);
|
| __ b(eq, &done);
|
|
|
| // Add +0 to convert -0 to +0.
|
| __ vadd(double_scratch, double_base, kDoubleRegZero);
|
| - __ vmov(double_result, 1.0);
|
| + __ vmov(double_result, 1.0, scratch);
|
| __ vsqrt(double_scratch, double_scratch);
|
| __ vdiv(double_result, double_result, double_scratch);
|
| __ jmp(&done);
|
| @@ -3701,7 +3701,7 @@
|
| __ mov(exponent, scratch);
|
| }
|
| __ vmov(double_scratch, double_base); // Back up base.
|
| - __ vmov(double_result, 1.0);
|
| + __ vmov(double_result, 1.0, scratch2);
|
|
|
| // Get absolute value of exponent.
|
| __ cmp(scratch, Operand(0));
|
| @@ -3717,7 +3717,7 @@
|
|
|
| __ cmp(exponent, Operand(0));
|
| __ b(ge, &done);
|
| - __ vmov(double_scratch, 1.0);
|
| + __ vmov(double_scratch, 1.0, scratch);
|
| __ vdiv(double_result, double_scratch, double_result);
|
| // Test whether result is zero. Bail out to check for subnormal result.
|
| // Due to subnormals, x^-y == (1/x)^y does not hold in all cases.
|
|
|