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