| Index: src/mips64/builtins-mips64.cc
|
| diff --git a/src/mips64/builtins-mips64.cc b/src/mips64/builtins-mips64.cc
|
| index f377f755b519265760fc3b1cbb0d6d5d11e52494..87f2ce383478ca4e5b66cb68c258063ece602cbc 100644
|
| --- a/src/mips64/builtins-mips64.cc
|
| +++ b/src/mips64/builtins-mips64.cc
|
| @@ -165,11 +165,10 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| {
|
| // Check if all parameters done.
|
| __ Dsubu(a0, a0, Operand(1));
|
| - __ Branch(USE_DELAY_SLOT, &done_loop, lt, a0, Operand(zero_reg));
|
| + __ Branch(&done_loop, lt, a0, Operand(zero_reg));
|
|
|
| // Load the next parameter tagged value into a2.
|
| - __ dsll(at, a0, kPointerSizeLog2); // In delay slot
|
| - __ Daddu(at, at, sp);
|
| + __ Dlsa(at, sp, a0, kPointerSizeLog2);
|
| __ ld(a2, MemOperand(at));
|
|
|
| // Load the double value of the parameter into f2, maybe converting the
|
| @@ -177,8 +176,8 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| Label convert, convert_smi, convert_number, done_convert;
|
| __ bind(&convert);
|
| __ JumpIfSmi(a2, &convert_smi);
|
| - __ ld(t0, FieldMemOperand(a2, HeapObject::kMapOffset));
|
| - __ JumpIfRoot(t0, Heap::kHeapNumberMapRootIndex, &convert_number);
|
| + __ ld(a4, FieldMemOperand(a2, HeapObject::kMapOffset));
|
| + __ JumpIfRoot(a4, Heap::kHeapNumberMapRootIndex, &convert_number);
|
| {
|
| // Parameter is not a Number, use the ToNumberStub to convert it.
|
| FrameScope scope(masm, StackFrame::INTERNAL);
|
| @@ -197,7 +196,7 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| __ ldc1(f0, FieldMemOperand(a1, HeapNumber::kValueOffset));
|
| __ jmp(&done_restore);
|
| __ bind(&restore_smi);
|
| - __ SmiToDoubleFPURegister(a1, f0, t0);
|
| + __ SmiToDoubleFPURegister(a1, f0, a4);
|
| __ bind(&done_restore);
|
| }
|
| __ SmiUntag(a3);
|
| @@ -208,11 +207,11 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| __ ldc1(f2, FieldMemOperand(a2, HeapNumber::kValueOffset));
|
| __ jmp(&done_convert);
|
| __ bind(&convert_smi);
|
| - __ SmiToDoubleFPURegister(a2, f2, t0);
|
| + __ SmiToDoubleFPURegister(a2, f2, a4);
|
| __ bind(&done_convert);
|
|
|
| // Perform the actual comparison with the accumulator value on the left hand
|
| - // side (d1) and the next parameter value on the right hand side (d2).
|
| + // side (f0) and the next parameter value on the right hand side (f2).
|
| Label compare_equal, compare_nan, compare_swap;
|
| __ BranchF(&compare_equal, &compare_nan, eq, f0, f2);
|
| __ BranchF(&compare_swap, nullptr, cc, f0, f2);
|
| @@ -220,8 +219,10 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
|
|
| // Left and right hand side are equal, check for -0 vs. +0.
|
| __ bind(&compare_equal);
|
| - __ FmoveHigh(t0, reg);
|
| - __ Branch(&loop, ne, t0, Operand(0x80000000));
|
| + __ FmoveHigh(a4, reg);
|
| + // Make a4 unsigned.
|
| + __ dsll32(a4, a4, 0);
|
| + __ Branch(&loop, ne, a4, Operand(0x8000000000000000));
|
|
|
| // Result is on the right hand side.
|
| __ bind(&compare_swap);
|
| @@ -237,8 +238,7 @@ void Builtins::Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind) {
|
| }
|
|
|
| __ bind(&done_loop);
|
| - __ dsll(a3, a3, kPointerSizeLog2);
|
| - __ Daddu(sp, sp, a3);
|
| + __ Dlsa(sp, sp, a3, kPointerSizeLog2);
|
| __ mov(v0, a1);
|
| __ DropAndRet(1);
|
| }
|
|
|