From: ricow@chromium.org Date: Mon, 24 Jan 2011 07:56:57 +0000 (+0000) Subject: Fix double allocation of register on arm in DoDeferredMathAbsTaggedHeapNumber. X-Git-Tag: upstream/4.7.83~20478 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8a1416c78db0d93b77d3a00421e41a566de53b9a;p=platform%2Fupstream%2Fv8.git Fix double allocation of register on arm in DoDeferredMathAbsTaggedHeapNumber. This should fix the sputnik issue on the arm simulator. Priorly tmp2 and tmp3 could potentially be the same register as input. Review URL: http://codereview.chromium.org/6293017 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6434 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index 425eaea..8d3c9c2 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -2492,9 +2492,6 @@ void LCodeGen::DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr) { DeoptimizeIf(ne, instr->environment()); Label done; - Register tmp = input.is(r0) ? r1 : r0; - Register tmp2 = r2; - Register tmp3 = r3; Label negative; __ ldr(scratch, FieldMemOperand(input, HeapNumber::kExponentOffset)); @@ -2510,6 +2507,10 @@ void LCodeGen::DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr) { // Preserve the value of all registers. __ PushSafepointRegisters(); + Register tmp = input.is(r0) ? r1 : r0; + Register tmp2 = input.is(r2) ? r3 : r2; + Register tmp3 = input.is(r4) ? r5 : r4; + Label allocated, slow; __ LoadRoot(scratch, Heap::kHeapNumberMapRootIndex); __ AllocateHeapNumber(tmp, tmp2, tmp3, scratch, &slow);