| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index 2435e5ff124a4f4ff93664986b689e412412e382..8f7b8ff157d3aecfda2fa617017f4602b93af38d 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -3722,38 +3722,30 @@ void LCodeGen::DoDeferredMathAbsTaggedHeapNumber(LMathAbs* instr) {
|
| factory()->heap_number_map());
|
| DeoptimizeIf(not_equal, instr->environment());
|
|
|
| - Label done;
|
| + Label slow, allocated, done;
|
| Register tmp = input_reg.is(eax) ? ecx : eax;
|
| Register tmp2 = tmp.is(ecx) ? edx : input_reg.is(ecx) ? edx : ecx;
|
|
|
| // Preserve the value of all registers.
|
| PushSafepointRegistersScope scope(this);
|
|
|
| - Label negative;
|
| __ mov(tmp, FieldOperand(input_reg, HeapNumber::kExponentOffset));
|
| // Check the sign of the argument. If the argument is positive, just
|
| // return it. We do not need to patch the stack since |input| and
|
| // |result| are the same register and |input| will be restored
|
| // unchanged by popping safepoint registers.
|
| __ test(tmp, Immediate(HeapNumber::kSignMask));
|
| - __ j(not_zero, &negative);
|
| - __ jmp(&done);
|
| + __ j(zero, &done);
|
|
|
| - __ bind(&negative);
|
| -
|
| - Label allocated, slow;
|
| __ AllocateHeapNumber(tmp, tmp2, no_reg, &slow);
|
| - __ jmp(&allocated);
|
| + __ jmp(&allocated, Label::kNear);
|
|
|
| // Slow case: Call the runtime system to do the number allocation.
|
| __ bind(&slow);
|
| -
|
| CallRuntimeFromDeferred(Runtime::kAllocateHeapNumber, 0,
|
| instr, instr->context());
|
| -
|
| // Set the pointer to the new heap number in tmp.
|
| if (!tmp.is(eax)) __ mov(tmp, eax);
|
| -
|
| // Restore input_reg after call to runtime.
|
| __ LoadFromSafepointRegisterSlot(input_reg, input_reg);
|
|
|
| @@ -3773,7 +3765,7 @@ void LCodeGen::EmitIntegerMathAbs(LMathAbs* instr) {
|
| Register input_reg = ToRegister(instr->value());
|
| __ test(input_reg, Operand(input_reg));
|
| Label is_positive;
|
| - __ j(not_sign, &is_positive);
|
| + __ j(not_sign, &is_positive, Label::kNear);
|
| __ neg(input_reg); // Sets flags.
|
| DeoptimizeIf(negative, instr->environment());
|
| __ bind(&is_positive);
|
|
|