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