Index: src/mips64/code-stubs-mips64.cc |
diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc |
index ab91deb50c0953c278c6f1a31235c34cf818590d..2782df732c1298e413fa19b3621a7c55cf824f07 100644 |
--- a/src/mips64/code-stubs-mips64.cc |
+++ b/src/mips64/code-stubs-mips64.cc |
@@ -1969,30 +1969,28 @@ void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
void RestParamAccessStub::GenerateNew(MacroAssembler* masm) { |
- // sp[0] : language mode |
- // sp[4] : index of rest parameter |
- // sp[8] : number of parameters |
- // sp[12] : receiver displacement |
+ // a2 : number of parameters (tagged) |
+ // a3 : parameters pointer |
+ // a4 : rest parameter index (tagged) |
+ // a1 : language mode (tagged) |
// Check if the calling frame is an arguments adaptor frame. |
Label runtime; |
- __ ld(a2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
- __ ld(a3, MemOperand(a2, StandardFrameConstants::kContextOffset)); |
- __ Branch(&runtime, ne, a3, |
+ __ ld(a0, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
+ __ ld(a5, MemOperand(a0, StandardFrameConstants::kContextOffset)); |
+ __ Branch(&runtime, ne, a5, |
Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
// Patch the arguments.length and the parameters pointer. |
- __ ld(a1, MemOperand(a2, ArgumentsAdaptorFrameConstants::kLengthOffset)); |
- __ sd(a1, MemOperand(sp, 2 * kPointerSize)); |
- __ SmiScale(at, a1, kPointerSizeLog2); |
- |
- __ Daddu(a3, a2, Operand(at)); |
+ __ ld(a2, MemOperand(a0, ArgumentsAdaptorFrameConstants::kLengthOffset)); |
+ __ SmiScale(at, a2, kPointerSizeLog2); |
+ __ Daddu(a3, a0, Operand(at)); |
__ Daddu(a3, a3, Operand(StandardFrameConstants::kCallerSPOffset)); |
- __ sd(a3, MemOperand(sp, 3 * kPointerSize)); |
// Do the runtime call to allocate the arguments object. |
__ bind(&runtime); |
+ __ Push(a2, a3, a4, a1); |
__ TailCallRuntime(Runtime::kNewRestParam); |
} |