From e0eaee29d3663d6780bdcc96581f6592073b1a78 Mon Sep 17 00:00:00 2001 From: "haitao.feng@intel.com" Date: Wed, 31 Jul 2013 00:19:32 +0000 Subject: [PATCH] Introduce StackOperandForReturnAddress operand for X64 to access return address in the stack R=danno@chromium.org Review URL: https://codereview.chromium.org/20628003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15967 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/x64/macro-assembler-x64.h | 4 ++++ src/x64/stub-cache-x64.cc | 14 ++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h index 9d5d2a31c5..e611c8ae27 100644 --- a/src/x64/macro-assembler-x64.h +++ b/src/x64/macro-assembler-x64.h @@ -1518,6 +1518,10 @@ inline Operand StackSpaceOperand(int index) { } +inline Operand StackOperandForReturnAddress(int32_t disp) { + return Operand(rsp, disp); +} + #ifdef GENERATED_CODE_COVERAGE extern void LogGeneratedCodeCoverage(const char* file_line); diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index 542018fddd..39ff656ec4 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -410,9 +410,9 @@ static void ReserveSpaceForFastApiCall(MacroAssembler* masm, Register scratch) { // -- rsp[0] : return address // -- rsp[8] : last argument in the internal frame of the caller // ----------------------------------- - __ movq(scratch, Operand(rsp, 0)); + __ movq(scratch, StackOperandForReturnAddress(0)); __ subq(rsp, Immediate(kFastApiCallArguments * kPointerSize)); - __ movq(Operand(rsp, 0), scratch); + __ movq(StackOperandForReturnAddress(0), scratch); __ Move(scratch, Smi::FromInt(0)); for (int i = 1; i <= kFastApiCallArguments; i++) { __ movq(Operand(rsp, i * kPointerSize), scratch); @@ -431,8 +431,9 @@ static void FreeSpaceForFastApiCall(MacroAssembler* masm, Register scratch) { // -- rsp[kFastApiCallArguments * 8 + 8] : last argument in the internal // frame. // ----------------------------------- - __ movq(scratch, Operand(rsp, 0)); - __ movq(Operand(rsp, kFastApiCallArguments * kPointerSize), scratch); + __ movq(scratch, StackOperandForReturnAddress(0)); + __ movq(StackOperandForReturnAddress(kFastApiCallArguments * kPointerSize), + scratch); __ addq(rsp, Immediate(kPointerSize * kFastApiCallArguments)); } @@ -2350,8 +2351,9 @@ Handle CallStubCompiler::CompileFastApiCall( name, depth, &miss); // Move the return address on top of the stack. - __ movq(rax, Operand(rsp, kFastApiCallArguments * kPointerSize)); - __ movq(Operand(rsp, 0 * kPointerSize), rax); + __ movq(rax, + StackOperandForReturnAddress(kFastApiCallArguments * kPointerSize)); + __ movq(StackOperandForReturnAddress(0), rax); GenerateFastApiCall(masm(), optimization, argc);