Fix double allocation of register on arm in DoDeferredMathAbsTaggedHeapNumber.
authorricow@chromium.org <ricow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 24 Jan 2011 07:56:57 +0000 (07:56 +0000)
committerricow@chromium.org <ricow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 24 Jan 2011 07:56:57 +0000 (07:56 +0000)
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

src/arm/lithium-codegen-arm.cc

index 425eaea..8d3c9c2 100644 (file)
@@ -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);