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
This commit is contained in:
ricow@chromium.org 2011-01-24 07:56:57 +00:00
parent 73e8bc9e1a
commit 8a1416c78d

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