| 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(),
|
|
|