| Index: src/mips64/builtins-mips64.cc
|
| diff --git a/src/mips64/builtins-mips64.cc b/src/mips64/builtins-mips64.cc
|
| index 75d6832a472107bdb85096500ddd07b6525b9cd8..d03a29d6350685093b84725349630fba3b47b43d 100644
|
| --- a/src/mips64/builtins-mips64.cc
|
| +++ b/src/mips64/builtins-mips64.cc
|
| @@ -1436,6 +1436,7 @@ static void ArgumentAdaptorStackCheck(MacroAssembler* masm,
|
| // -- a0 : actual number of arguments
|
| // -- a1 : function (passed through to callee)
|
| // -- a2 : expected number of arguments
|
| + // -- a3 : new target (passed through to callee)
|
| // -----------------------------------
|
| // Check the stack for overflow. We are not trying to catch
|
| // interruptions (e.g. debug break and preemption) here, so the "real stack
|
| @@ -1724,14 +1725,12 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // -- a0: actual arguments count
|
| // -- a1: function (passed through to callee)
|
| // -- a2: expected arguments count
|
| + // -- a3: new target (passed through to callee)
|
| // -----------------------------------
|
|
|
| - Label stack_overflow;
|
| - ArgumentAdaptorStackCheck(masm, &stack_overflow);
|
| - Label invoke, dont_adapt_arguments;
|
| + Label invoke, dont_adapt_arguments, stack_overflow;
|
|
|
| Label enough, too_few;
|
| - __ ld(a3, FieldMemOperand(a1, JSFunction::kCodeEntryOffset));
|
| __ Branch(&dont_adapt_arguments, eq,
|
| a2, Operand(SharedFunctionInfo::kDontAdaptArgumentsSentinel));
|
| // We use Uless as the number of argument should always be greater than 0.
|
| @@ -1741,9 +1740,10 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // a0: actual number of arguments as a smi
|
| // a1: function
|
| // a2: expected number of arguments
|
| - // a3: code entry to call
|
| + // a3: new target (passed through to callee)
|
| __ bind(&enough);
|
| EnterArgumentsAdaptorFrame(masm);
|
| + ArgumentAdaptorStackCheck(masm, &stack_overflow);
|
|
|
| // Calculate copy start address into a0 and copy end address into a4.
|
| __ SmiScale(a0, a0, kPointerSizeLog2);
|
| @@ -1758,7 +1758,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // a0: copy start address
|
| // a1: function
|
| // a2: expected number of arguments
|
| - // a3: code entry to call
|
| + // a3: new target (passed through to callee)
|
| // a4: copy end address
|
|
|
| Label copy;
|
| @@ -1795,12 +1795,13 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
|
|
| __ bind(&no_strong_error);
|
| EnterArgumentsAdaptorFrame(masm);
|
| + ArgumentAdaptorStackCheck(masm, &stack_overflow);
|
|
|
| // Calculate copy start address into a0 and copy end address into a7.
|
| // a0: actual number of arguments as a smi
|
| // a1: function
|
| // a2: expected number of arguments
|
| - // a3: code entry to call
|
| + // a3: new target (passed through to callee)
|
| __ SmiScale(a0, a0, kPointerSizeLog2);
|
| __ Daddu(a0, fp, a0);
|
| // Adjust for return address and receiver.
|
| @@ -1812,7 +1813,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // a0: copy start address
|
| // a1: function
|
| // a2: expected number of arguments
|
| - // a3: code entry to call
|
| + // a3: new target (passed through to callee)
|
| // a7: copy end address
|
| Label copy;
|
| __ bind(©);
|
| @@ -1825,7 +1826,7 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // Fill the remaining expected arguments with undefined.
|
| // a1: function
|
| // a2: expected number of arguments
|
| - // a3: code entry to call
|
| + // a3: new target (passed through to callee)
|
| __ LoadRoot(a5, Heap::kUndefinedValueRootIndex);
|
| __ dsll(a6, a2, kPointerSizeLog2);
|
| __ Dsubu(a4, fp, Operand(a6));
|
| @@ -1845,7 +1846,9 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| __ mov(a0, a2);
|
| // a0 : expected number of arguments
|
| // a1 : function (passed through to callee)
|
| - __ Call(a3);
|
| + // a3: new target (passed through to callee)
|
| + __ ld(a4, FieldMemOperand(a1, JSFunction::kCodeEntryOffset));
|
| + __ Call(a4);
|
|
|
| // Store offset of return address for deoptimizer.
|
| masm->isolate()->heap()->SetArgumentsAdaptorDeoptPCOffset(masm->pc_offset());
|
| @@ -1859,12 +1862,12 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
|
| // Don't adapt arguments.
|
| // -------------------------------------------
|
| __ bind(&dont_adapt_arguments);
|
| - __ Jump(a3);
|
| + __ ld(a4, FieldMemOperand(a1, JSFunction::kCodeEntryOffset));
|
| + __ Jump(a4);
|
|
|
| __ bind(&stack_overflow);
|
| {
|
| FrameScope frame(masm, StackFrame::MANUAL);
|
| - EnterArgumentsAdaptorFrame(masm);
|
| __ CallRuntime(Runtime::kThrowStackOverflow, 0);
|
| __ break_(0xCC);
|
| }
|
|
|