Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index 0bad96073d0193545692804c5e817eeab4f1a486..62a89b83b294efa1d747fb30a81cacfa51f10fb0 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -2262,28 +2262,21 @@ void MathPowStub::Generate(MacroAssembler* masm) { |
__ movsd(double_scratch2, double_result); // Load double_exponent with 1. |
// Get absolute value of exponent. |
- Label no_neg, while_true, while_false; |
+ Label no_neg, while_true, no_multiply; |
__ testl(scratch, scratch); |
__ j(positive, &no_neg, Label::kNear); |
__ negl(scratch); |
__ bind(&no_neg); |
- __ j(zero, &while_false, Label::kNear); |
- __ shrl(scratch, Immediate(1)); |
- // Above condition means CF==0 && ZF==0. This means that the |
- // bit that has been shifted out is 0 and the result is not 0. |
- __ j(above, &while_true, Label::kNear); |
- __ movsd(double_result, double_scratch); |
- __ j(zero, &while_false, Label::kNear); |
- |
__ bind(&while_true); |
__ shrl(scratch, Immediate(1)); |
- __ mulsd(double_scratch, double_scratch); |
- __ j(above, &while_true, Label::kNear); |
+ __ j(not_carry, &no_multiply, Label::kNear); |
__ mulsd(double_result, double_scratch); |
+ __ bind(&no_multiply); |
+ |
+ __ mulsd(double_scratch, double_scratch); |
__ j(not_zero, &while_true); |
- __ bind(&while_false); |
// If the exponent is negative, return 1/result. |
__ testl(exponent, exponent); |
__ j(greater, &done); |
@@ -6144,11 +6137,6 @@ void RecordWriteStub::GenerateFixedRegStubsAheadOfTime() { |
} |
-bool CodeStub::CanUseFPRegisters() { |
- return true; // Always have SSE2 on x64. |
-} |
- |
- |
// Takes the input in 3 registers: address_ value_ and object_. A pointer to |
// the value has just been written into the object, now this stub makes sure |
// we keep the GC informed. The word in the object where the value has been |
@@ -6281,17 +6269,6 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker( |
Label need_incremental; |
Label need_incremental_pop_object; |
- __ movq(regs_.scratch0(), Immediate(~Page::kPageAlignmentMask)); |
- __ and_(regs_.scratch0(), regs_.object()); |
- __ movq(regs_.scratch1(), |
- Operand(regs_.scratch0(), |
- MemoryChunk::kWriteBarrierCounterOffset)); |
- __ subq(regs_.scratch1(), Immediate(1)); |
- __ movq(Operand(regs_.scratch0(), |
- MemoryChunk::kWriteBarrierCounterOffset), |
- regs_.scratch1()); |
- __ j(negative, &need_incremental); |
- |
// Let's look at the color of the object: If it is not black we don't have |
// to inform the incremental marker. |
__ JumpIfBlack(regs_.object(), |