Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 78c3ece058f19afbeaac9a9ee4e0f51d6d1d291f..b739ba898372eca4bf85135f00c4dadbf90dda55 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -5802,9 +5802,15 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) { |
STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2); |
STATIC_ASSERT(FCA::kIsolateIndex == 1); |
STATIC_ASSERT(FCA::kHolderIndex == 0); |
- STATIC_ASSERT(FCA::kArgsLength == 7); |
+ STATIC_ASSERT(FCA::kNewTargetIndex == 7); |
+ STATIC_ASSERT(FCA::kArgsLength == 8); |
- // FunctionCallbackArguments: context, callee and call data. |
+ // FunctionCallbackArguments |
+ |
+ // new target |
+ __ PushRoot(Heap::kUndefinedValueRootIndex); |
+ |
+ // context, callee and call data. |
__ Push(context, callee, call_data); |
if (!is_lazy()) { |
@@ -5828,7 +5834,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) { |
// Allocate the v8::Arguments structure in the arguments' space, since it's |
// not controlled by GC. |
- const int kApiStackSpace = 4; |
+ const int kApiStackSpace = 3; |
// Allocate space for CallApiFunctionAndReturn can store some scratch |
// registeres on the stack. |
@@ -5844,10 +5850,9 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) { |
// FunctionCallbackInfo::implicit_args_ and FunctionCallbackInfo::values_ |
__ Add(x10, args, Operand((FCA::kArgsLength - 1 + argc()) * kPointerSize)); |
__ Stp(args, x10, MemOperand(x0, 0 * kPointerSize)); |
- // FunctionCallbackInfo::length_ = argc and |
- // FunctionCallbackInfo::is_construct_call = 0 |
+ // FunctionCallbackInfo::length_ = argc |
__ Mov(x10, argc()); |
- __ Stp(x10, xzr, MemOperand(x0, 2 * kPointerSize)); |
+ __ Str(x10, MemOperand(x0, 2 * kPointerSize)); |
ExternalReference thunk_ref = |
ExternalReference::invoke_function_callback(masm->isolate()); |
@@ -5864,9 +5869,9 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) { |
} |
MemOperand return_value_operand(fp, return_value_offset * kPointerSize); |
int stack_space = 0; |
- MemOperand is_construct_call_operand = |
- MemOperand(masm->StackPointer(), 4 * kPointerSize); |
- MemOperand* stack_space_operand = &is_construct_call_operand; |
+ MemOperand length_operand = |
+ MemOperand(masm->StackPointer(), 3 * kPointerSize); |
+ MemOperand* stack_space_operand = &length_operand; |
stack_space = argc() + FCA::kArgsLength + 1; |
stack_space_operand = NULL; |