Index: src/builtins/mips64/builtins-mips64.cc |
diff --git a/src/builtins/mips64/builtins-mips64.cc b/src/builtins/mips64/builtins-mips64.cc |
index e90801d42072c64d290713868fff0d302d87b87e..d3600ddb3683b2ba181922af2f974f256b104554 100644 |
--- a/src/builtins/mips64/builtins-mips64.cc |
+++ b/src/builtins/mips64/builtins-mips64.cc |
@@ -1188,7 +1188,7 @@ void Builtins::Generate_InterpreterPushArgsAndCallImpl( |
// static |
void Builtins::Generate_InterpreterPushArgsAndConstructImpl( |
- MacroAssembler* masm, CallableType construct_type) { |
+ MacroAssembler* masm, PushArgsConstructMode mode) { |
// ----------- S t a t e ------------- |
// -- a0 : argument count (not including receiver) |
// -- a3 : new target |
@@ -1205,7 +1205,7 @@ void Builtins::Generate_InterpreterPushArgsAndConstructImpl( |
Generate_InterpreterPushArgs(masm, a0, a4, a5, t0, &stack_overflow); |
__ AssertUndefinedOrAllocationSite(a2, t0); |
- if (construct_type == CallableType::kJSFunction) { |
+ if (mode == PushArgsConstructMode::kJSFunction) { |
__ AssertFunction(a1); |
// Tail call to the function-specific construct stub (still in the caller |
@@ -1214,8 +1214,12 @@ void Builtins::Generate_InterpreterPushArgsAndConstructImpl( |
__ ld(a4, FieldMemOperand(a4, SharedFunctionInfo::kConstructStubOffset)); |
__ Daddu(at, a4, Operand(Code::kHeaderSize - kHeapObjectTag)); |
__ Jump(at); |
+ } else if (mode == PushArgsConstructMode::kWithFinalSpread) { |
+ // Call the constructor with a0, a1, and a3 unmodified. |
+ __ Jump(masm->isolate()->builtins()->ConstructWithSpread(), |
+ RelocInfo::CODE_TARGET); |
} else { |
- DCHECK_EQ(construct_type, CallableType::kAny); |
+ DCHECK_EQ(PushArgsConstructMode::kOther, mode); |
// Call the constructor with a0, a1, and a3 unmodified. |
__ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); |
} |
@@ -2831,6 +2835,16 @@ void Builtins::Generate_Construct(MacroAssembler* masm) { |
} |
// static |
+void Builtins::Generate_ConstructWithSpread(MacroAssembler* masm) { |
+ // ----------- S t a t e ------------- |
+ // -- a0 : the number of arguments (not including the receiver) |
+ // -- a1 : the constructor to call (can be any Object) |
+ // -- a3 : the new target (either the same as the constructor or |
+ // the JSFunction on which new was invoked initially) |
+ // ----------------------------------- |
+} |
+ |
+// static |
void Builtins::Generate_AllocateInNewSpace(MacroAssembler* masm) { |
// ----------- S t a t e ------------- |
// -- a0 : requested object size (untagged) |