| Index: src/arm64/builtins-arm64.cc
|
| diff --git a/src/arm64/builtins-arm64.cc b/src/arm64/builtins-arm64.cc
|
| index 174d2a836aa04c2cca42ebbaa82709ebf279fa2e..c8615528dca6b2f047fc09856082b932422f4154 100644
|
| --- a/src/arm64/builtins-arm64.cc
|
| +++ b/src/arm64/builtins-arm64.cc
|
| @@ -324,22 +324,20 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
|
| {
|
| FrameScope scope(masm, StackFrame::CONSTRUCT);
|
|
|
| - // Preserve the three incoming parameters on the stack.
|
| - if (create_memento) {
|
| - __ AssertUndefinedOrAllocationSite(x2, x10);
|
| - __ Push(x2);
|
| - }
|
| -
|
| + // Preserve the four incoming parameters on the stack.
|
| Register argc = x0;
|
| Register constructor = x1;
|
| + Register allocation_site = x2;
|
| Register original_constructor = x3;
|
|
|
| // Preserve the incoming parameters on the stack.
|
| + __ AssertUndefinedOrAllocationSite(allocation_site, x10);
|
| __ SmiTag(argc);
|
| - __ Push(argc, constructor, original_constructor);
|
| + __ Push(allocation_site, argc, constructor, original_constructor);
|
| // sp[0]: new.target
|
| // sp[1]: Constructor function.
|
| // sp[2]: number of arguments (smi-tagged)
|
| + // sp[3]: allocation site
|
|
|
| // Try to allocate the object without transitioning into C code. If any of
|
| // the preconditions is not met, the code bails out to the runtime call.
|
| @@ -483,7 +481,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
|
| DCHECK_EQ(0 * kPointerSize, AllocationMemento::kMapOffset);
|
| __ Str(x14, MemOperand(first_prop, kPointerSize, PostIndex));
|
| // Load the AllocationSite
|
| - __ Peek(x14, 2 * kXRegSize);
|
| + __ Peek(x14, 3 * kXRegSize);
|
| + __ AssertUndefinedOrAllocationSite(x14, x10);
|
| DCHECK_EQ(1 * kPointerSize, AllocationMemento::kAllocationSiteOffset);
|
| __ Str(x14, MemOperand(first_prop, kPointerSize, PostIndex));
|
| first_prop = NoReg;
|
| @@ -669,18 +668,18 @@ void Builtins::Generate_JSConstructStubForDerived(MacroAssembler* masm) {
|
| // -----------------------------------
|
| ASM_LOCATION("Builtins::Generate_JSConstructStubForDerived");
|
|
|
| - // TODO(dslomov): support pretenuring
|
| - CHECK(!FLAG_pretenuring_call_new);
|
| -
|
| {
|
| FrameScope frame_scope(masm, StackFrame::CONSTRUCT);
|
| +
|
| + __ AssertUndefinedOrAllocationSite(x2, x10);
|
| __ Mov(x4, x0);
|
| __ SmiTag(x4);
|
| __ LoadRoot(x10, Heap::kTheHoleValueRootIndex);
|
| - __ Push(x4, x3, x10);
|
| - // sp[0]: number of arguments
|
| + __ Push(x2, x4, x3, x10);
|
| + // sp[0]: receiver (the hole)
|
| // sp[1]: new.target
|
| - // sp[2]: receiver (the hole)
|
| + // sp[2]: number of arguments
|
| + // sp[3]: allocation site
|
|
|
| // Set up pointer to last argument.
|
| __ Add(x2, fp, StandardFrameConstants::kCallerSPOffset);
|
|
|