Index: src/x64/lithium-codegen-x64.cc |
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
index c7dd7dfc4128003be18c370f55ece35d1a222c08..262395a2e7c9a3add0c39d0b60cc40d3035eaf1f 100644 |
--- a/src/x64/lithium-codegen-x64.cc |
+++ b/src/x64/lithium-codegen-x64.cc |
@@ -3329,38 +3329,29 @@ void LCodeGen::DoDeferredMathAbsTaggedHeapNumber(LMathAbs* instr) { |
Heap::kHeapNumberMapRootIndex); |
DeoptimizeIf(not_equal, instr->environment()); |
- Label done; |
+ Label slow, allocated, done; |
Register tmp = input_reg.is(rax) ? rcx : rax; |
Register tmp2 = tmp.is(rcx) ? rdx : input_reg.is(rcx) ? rdx : rcx; |
// Preserve the value of all registers. |
PushSafepointRegistersScope scope(this); |
- Label negative; |
__ movl(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. |
__ testl(tmp, Immediate(HeapNumber::kSignMask)); |
- __ j(not_zero, &negative); |
- __ jmp(&done); |
+ __ j(zero, &done); |
- __ bind(&negative); |
- |
- Label allocated, slow; |
__ AllocateHeapNumber(tmp, tmp2, &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); |
// Set the pointer to the new heap number in tmp. |
- if (!tmp.is(rax)) { |
- __ movq(tmp, rax); |
- } |
- |
+ if (!tmp.is(rax)) __ movq(tmp, rax); |
// Restore input_reg after call to runtime. |
__ LoadFromSafepointRegisterSlot(input_reg, input_reg); |
@@ -3379,7 +3370,7 @@ void LCodeGen::EmitIntegerMathAbs(LMathAbs* instr) { |
Register input_reg = ToRegister(instr->value()); |
__ testl(input_reg, input_reg); |
Label is_positive; |
- __ j(not_sign, &is_positive); |
+ __ j(not_sign, &is_positive, Label::kNear); |
__ negl(input_reg); // Sets flags. |
DeoptimizeIf(negative, instr->environment()); |
__ bind(&is_positive); |