Commit a7f0c72e authored by yangguo@chromium.org's avatar yangguo@chromium.org

Fixing bug introduced in r10210 that crashes v8 raytrace benchmark.

BUG=
TEST=

Review URL: http://codereview.chromium.org/8889047

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10226 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent ce86c1bf
......@@ -3515,14 +3515,14 @@ void MathPowStub::Generate(MacroAssembler* masm) {
}
if (exponent_type_ != INTEGER) {
Label int_exponent_convert;
// Detect integer exponents stored as double.
__ vcvt_u32_f64(single_scratch, double_exponent);
// We do not check for NaN or Infinity here because comparing numbers on
// ARM correctly distinguishes NaNs. We end up calling the built-in.
__ vcvt_f64_u32(double_scratch, single_scratch);
__ VFPCompareAndSetFlags(double_scratch, double_exponent);
__ vmov(exponent, single_scratch, eq);
__ b(eq, &int_exponent);
__ b(eq, &int_exponent_convert);
if (exponent_type_ == ON_STACK) {
// Detect square root case. Crankshaft detects constant +/-0.5 at
......@@ -3579,6 +3579,10 @@ void MathPowStub::Generate(MacroAssembler* masm) {
__ pop(lr);
__ GetCFunctionDoubleResult(double_result);
__ jmp(&done);
__ bind(&int_exponent_convert);
__ vcvt_u32_f64(single_scratch, double_exponent);
__ vmov(exponent, single_scratch);
}
// Calculate power with integer exponent.
......@@ -3629,7 +3633,7 @@ void MathPowStub::Generate(MacroAssembler* masm) {
FieldMemOperand(heapnumber, HeapNumber::kValueOffset));
ASSERT(heapnumber.is(r0));
__ IncrementCounter(counters->math_pow(), 1, scratch, scratch2);
__ Ret(2 * kPointerSize);
__ Ret(2);
} else {
__ push(lr);
{
......
......@@ -141,6 +141,9 @@ function test() {
assertEquals(0.25, Math.pow(16, -0.5));
assertEquals(NaN, Math.pow(-16, -0.5));
// Test detecting and converting integer value as double.
assertEquals(8, Math.pow(2, Math.sqrt(9)));
// Tests from Mozilla 15.8.2.13.
assertEquals(2, Math.pow.length);
assertEquals(NaN, Math.pow());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment