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