Index: src/x64/macro-assembler-x64.cc |
=================================================================== |
--- src/x64/macro-assembler-x64.cc (revision 2348) |
+++ src/x64/macro-assembler-x64.cc (working copy) |
@@ -749,6 +749,7 @@ |
ASSERT(type == StackFrame::EXIT || type == StackFrame::EXIT_DEBUG); |
// Setup the frame structure on the stack. |
+ // All constants are relative to the frame pointer of the exit frame. |
ASSERT(ExitFrameConstants::kCallerSPDisplacement == +2 * kPointerSize); |
ASSERT(ExitFrameConstants::kCallerPCOffset == +1 * kPointerSize); |
ASSERT(ExitFrameConstants::kCallerFPOffset == 0 * kPointerSize); |
@@ -763,7 +764,7 @@ |
// Save the frame pointer and the context in top. |
ExternalReference c_entry_fp_address(Top::k_c_entry_fp_address); |
ExternalReference context_address(Top::k_context_address); |
- movq(rdi, rax); // Backup rax before we use it. |
+ movq(r14, rax); // Backup rax before we use it. |
movq(rax, rbp); |
store_rax(c_entry_fp_address); |
@@ -773,7 +774,7 @@ |
// Setup argv in callee-saved register r15. It is reused in LeaveExitFrame, |
// so it must be retained across the C-call. |
int offset = StandardFrameConstants::kCallerSPOffset - kPointerSize; |
- lea(r15, Operand(rbp, rdi, times_pointer_size, offset)); |
+ lea(r15, Operand(rbp, r14, times_pointer_size, offset)); |
#ifdef ENABLE_DEBUGGER_SUPPORT |
// Save the state of all registers to the stack from the memory |