| Index: src/x64/codegen-x64.cc
|
| ===================================================================
|
| --- src/x64/codegen-x64.cc (revision 2348)
|
| +++ src/x64/codegen-x64.cc (working copy)
|
| @@ -6030,7 +6030,7 @@
|
| // rbx: pointer to C function (C callee-saved).
|
| // rbp: frame pointer (restored after C call).
|
| // rsp: stack pointer (restored after C call).
|
| - // rdi: number of arguments including receiver.
|
| + // r14: number of arguments including receiver (C callee-saved).
|
| // r15: pointer to the first argument (C callee-saved).
|
| // This pointer is reused in LeaveExitFrame(), so it is stored in a
|
| // callee-saved register.
|
| @@ -6058,11 +6058,11 @@
|
| // Call C function.
|
| #ifdef __MSVC__
|
| // MSVC passes arguments in rcx, rdx, r8, r9
|
| - __ movq(rcx, rdi); // argc.
|
| + __ movq(rcx, r14); // argc.
|
| __ movq(rdx, r15); // argv.
|
| #else // ! defined(__MSVC__)
|
| // GCC passes arguments in rdi, rsi, rdx, rcx, r8, r9.
|
| - // First argument is already in rdi.
|
| + __ movq(rdi, r14); // argc.
|
| __ movq(rsi, r15); // argv.
|
| #endif
|
| __ call(rbx);
|
| @@ -6204,10 +6204,9 @@
|
| void CEntryStub::GenerateBody(MacroAssembler* masm, bool is_debug_break) {
|
| // rax: number of arguments including receiver
|
| // rbx: pointer to C function (C callee-saved)
|
| - // rbp: frame pointer (restored after C call)
|
| + // rbp: frame pointer of calling JS frame (restored after C call)
|
| // rsp: stack pointer (restored after C call)
|
| - // rsi: current context (C callee-saved)
|
| - // rdi: caller's parameter pointer pp (C callee-saved)
|
| + // rsi: current context (restored)
|
|
|
| // NOTE: Invocations of builtins may return failure objects
|
| // instead of a proper result. The builtin entry handles
|
| @@ -6221,16 +6220,16 @@
|
| // Enter the exit frame that transitions from JavaScript to C++.
|
| __ EnterExitFrame(frame_type);
|
|
|
| - // rax: result parameter for PerformGC, if any (setup below).
|
| - // Holds the result of a previous call to GenerateCore that
|
| - // returned a failure. On next call, it's used as parameter
|
| - // to Runtime::PerformGC.
|
| + // rax: Holds the context at this point, but should not be used.
|
| + // On entry to code generated by GenerateCore, it must hold
|
| + // a failure result if the collect_garbage argument to GenerateCore
|
| + // is true. This failure result can be the result of code
|
| + // generated by a previous call to GenerateCore. The value
|
| + // of rax is then passed to Runtime::PerformGC.
|
| // rbx: pointer to builtin function (C callee-saved).
|
| - // rbp: frame pointer (restored after C call).
|
| - // rsp: stack pointer (restored after C call).
|
| - // rdi: number of arguments including receiver (destroyed by C call).
|
| - // The rdi register is not callee-save in Unix 64-bit ABI, so
|
| - // we must treat it as volatile.
|
| + // rbp: frame pointer of exit frame (restored after C call).
|
| + // rsp: stack pointer (restored after C call).
|
| + // r14: number of arguments including receiver (C callee-saved).
|
| // r15: argv pointer (C callee-saved).
|
|
|
| Label throw_out_of_memory_exception;
|
|
|