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