Index: src/mips/builtins-mips.cc |
diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc |
index ca15f265cbc192ccb9b6280ee65c805f765ac562..bd8c85285af4574d7d72e5e25c2cef13161a6564 100644 |
--- a/src/mips/builtins-mips.cc |
+++ b/src/mips/builtins-mips.cc |
@@ -1758,26 +1758,27 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
__ bind(&enough); |
EnterArgumentsAdaptorFrame(masm); |
- // Calculate copy start address into a0 and copy end address into a2. |
+ // Calculate copy start address into a0 and copy end address into t1. |
__ sll(a0, a0, kPointerSizeLog2 - kSmiTagSize); |
__ Addu(a0, fp, a0); |
// Adjust for return address and receiver. |
__ Addu(a0, a0, Operand(2 * kPointerSize)); |
// Compute copy end address. |
- __ sll(a2, a2, kPointerSizeLog2); |
- __ subu(a2, a0, a2); |
+ __ sll(t1, a2, kPointerSizeLog2); |
+ __ subu(t1, a0, t1); |
// Copy the arguments (including the receiver) to the new stack frame. |
// a0: copy start address |
// a1: function |
- // a2: copy end address |
+ // a2: expected number of arguments |
// a3: code entry to call |
+ // t1: copy end address |
Label copy; |
__ bind(©); |
__ lw(t0, MemOperand(a0)); |
__ push(t0); |
- __ Branch(USE_DELAY_SLOT, ©, ne, a0, Operand(a2)); |
+ __ Branch(USE_DELAY_SLOT, ©, ne, a0, Operand(t1)); |
__ addiu(a0, a0, -kPointerSize); // In delay slot. |
__ jmp(&invoke); |
@@ -1808,7 +1809,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
__ bind(&no_strong_error); |
EnterArgumentsAdaptorFrame(masm); |
- // Calculate copy start address into a0 and copy end address is fp. |
+ // Calculate copy start address into a0 and copy end address into t3. |
// a0: actual number of arguments as a smi |
// a1: function |
// a2: expected number of arguments |
@@ -1840,21 +1841,23 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
// a3: code entry to call |
__ LoadRoot(t0, Heap::kUndefinedValueRootIndex); |
__ sll(t2, a2, kPointerSizeLog2); |
- __ Subu(a2, fp, Operand(t2)); |
+ __ Subu(t1, fp, Operand(t2)); |
// Adjust for frame. |
- __ Subu(a2, a2, Operand(StandardFrameConstants::kFixedFrameSizeFromFp + |
+ __ Subu(t1, t1, Operand(StandardFrameConstants::kFixedFrameSizeFromFp + |
2 * kPointerSize)); |
Label fill; |
__ bind(&fill); |
__ Subu(sp, sp, kPointerSize); |
- __ Branch(USE_DELAY_SLOT, &fill, ne, sp, Operand(a2)); |
+ __ Branch(USE_DELAY_SLOT, &fill, ne, sp, Operand(t1)); |
__ sw(t0, MemOperand(sp)); |
} |
// Call the entry point. |
__ bind(&invoke); |
- |
+ __ mov(a0, a2); |
+ // a0 : expected number of arguments |
+ // a1 : function (passed through to callee) |
__ Call(a3); |
// Store offset of return address for deoptimizer. |