| Index: src/x64/macro-assembler-x64.cc
|
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
|
| index b6378bf7d56311ba8716d5d8b8f19fd558a366fc..d9875129cb0d1c70861be21fda12e9e9372e5583 100644
|
| --- a/src/x64/macro-assembler-x64.cc
|
| +++ b/src/x64/macro-assembler-x64.cc
|
| @@ -706,12 +706,9 @@ void MacroAssembler::PrepareCallApiFunction(int arg_stack_space) {
|
|
|
|
|
| void MacroAssembler::CallApiFunctionAndReturn(
|
| - Register function_address,
|
| - ExternalReference thunk_ref,
|
| - Register thunk_last_arg,
|
| - int stack_space,
|
| - Operand return_value_operand,
|
| - Operand* context_restore_operand) {
|
| + Register function_address, ExternalReference thunk_ref,
|
| + Register thunk_last_arg, int stack_space, Operand* stack_space_operand,
|
| + Operand return_value_operand, Operand* context_restore_operand) {
|
| Label prologue;
|
| Label promote_scheduled_exception;
|
| Label exception_handled;
|
| @@ -838,8 +835,18 @@ void MacroAssembler::CallApiFunctionAndReturn(
|
| if (restore_context) {
|
| movp(rsi, *context_restore_operand);
|
| }
|
| + if (stack_space_operand != nullptr) {
|
| + movp(rbx, *stack_space_operand);
|
| + }
|
| LeaveApiExitFrame(!restore_context);
|
| - ret(stack_space * kPointerSize);
|
| + if (stack_space_operand != nullptr) {
|
| + DCHECK_EQ(stack_space, 0);
|
| + PopReturnAddressTo(rcx);
|
| + addq(rsp, rbx);
|
| + jmp(rcx);
|
| + } else {
|
| + ret(stack_space * kPointerSize);
|
| + }
|
|
|
| bind(&promote_scheduled_exception);
|
| {
|
|
|