Reviewers: danno,

Message:
Removed the StackOperandForReturnAddress function as it duplicates the meaning
with MoveReturnAddress instruction.

Description:
Introduce MoveReturnAddress instruction into X64 Macro Assembler

Please review this at https://codereview.chromium.org/65723003/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+13, -17 lines):
  M src/x64/code-stubs-x64.cc
  M src/x64/macro-assembler-x64.h
  M src/x64/stub-cache-x64.cc


Index: src/x64/code-stubs-x64.cc
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
index be8160b7d396124a2eba98eadebe14bbdc65b7da..c2f62afeb052d7efd20991ecf1bbc21008804683 100644
--- a/src/x64/code-stubs-x64.cc
+++ b/src/x64/code-stubs-x64.cc
@@ -3260,7 +3260,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
     __ StoreRoot(rax, Heap::kInstanceofCacheMapRootIndex);
   } else {
     // Get return address and delta to inlined map check.
-    __ movq(kScratchRegister, StackOperandForReturnAddress(0));
+    __ MoveReturnAddress(kScratchRegister, Operand(rsp, 0));
     __ subq(kScratchRegister, args.GetArgumentOperand(2));
     if (FLAG_debug_code) {
       __ movl(rdi, Immediate(kWordBeforeMapCheckValue));
@@ -3301,7 +3301,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
     // Assert it is a 1-byte signed value.
     ASSERT(true_offset >= 0 && true_offset < 0x100);
     __ movl(rax, Immediate(true_offset));
-    __ movq(kScratchRegister, StackOperandForReturnAddress(0));
+    __ MoveReturnAddress(kScratchRegister, Operand(rsp, 0));
     __ subq(kScratchRegister, args.GetArgumentOperand(2));
     __ movb(Operand(kScratchRegister, kOffsetToResultValue), rax);
     if (FLAG_debug_code) {
@@ -3324,7 +3324,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
     // Assert it is a 1-byte signed value.
     ASSERT(false_offset >= 0 && false_offset < 0x100);
     __ movl(rax, Immediate(false_offset));
-    __ movq(kScratchRegister, StackOperandForReturnAddress(0));
+    __ MoveReturnAddress(kScratchRegister, Operand(rsp, 0));
     __ subq(kScratchRegister, args.GetArgumentOperand(2));
     __ movb(Operand(kScratchRegister, kOffsetToResultValue), rax);
     if (FLAG_debug_code) {
Index: src/x64/macro-assembler-x64.h
diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h
index 7e00d6408e2a5b5a8fb00a4b070586b03a79ccca..5f1769d7e8ec1e22fe3afaba01c966211d407bee 100644
--- a/src/x64/macro-assembler-x64.h
+++ b/src/x64/macro-assembler-x64.h
@@ -848,6 +848,8 @@ class MacroAssembler: public Assembler {
   void PopReturnAddressTo(Register dst) { pop(dst); }
   void MoveDouble(Register dst, const Operand& src) { movq(dst, src); }
   void MoveDouble(const Operand& dst, Register src) { movq(dst, src); }
+ void MoveReturnAddress(Register dst, const Operand& src) { movq(dst, src); } + void MoveReturnAddress(const Operand& dst, Register src) { movq(dst, src); }
   void Move(Register dst, ExternalReference ext) {
     movq(dst, reinterpret_cast<Address>(ext.address()),
          RelocInfo::EXTERNAL_REFERENCE);
@@ -1592,11 +1594,6 @@ 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);
 #define CODE_COVERAGE_STRINGIFY(x) #x
Index: src/x64/stub-cache-x64.cc
diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc
index 499ccdf24caeadb9b648cf5a846633241de815e6..0898d27ff7d20f641654eb5932bb1048b83e161e 100644
--- a/src/x64/stub-cache-x64.cc
+++ b/src/x64/stub-cache-x64.cc
@@ -406,9 +406,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, StackOperandForReturnAddress(0));
+  __ MoveReturnAddress(scratch, Operand(rsp, 0));
   __ subq(rsp, Immediate(kFastApiCallArguments * kPointerSize));
-  __ movq(StackOperandForReturnAddress(0), scratch);
+  __ MoveReturnAddress(Operand(rsp, 0), scratch);
   __ Move(scratch, Smi::FromInt(0));
   StackArgumentsAccessor args(rsp, kFastApiCallArguments,
                               ARGUMENTS_DONT_CONTAIN_RECEIVER);
@@ -429,8 +429,8 @@ static void FreeSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
   //  -- rsp[kFastApiCallArguments * 8 + 8] : last argument in the internal
   //                                          frame.
   // -----------------------------------
-  __ movq(scratch, StackOperandForReturnAddress(0));
- __ movq(StackOperandForReturnAddress(kFastApiCallArguments * kPointerSize),
+  __ MoveReturnAddress(scratch, Operand(rsp, 0));
+  __ MoveReturnAddress(Operand(rsp, kFastApiCallArguments * kPointerSize),
           scratch);
   __ addq(rsp, Immediate(kPointerSize * kFastApiCallArguments));
 }
@@ -547,10 +547,10 @@ static void GenerateFastApiCall(MacroAssembler* masm,
// argc + 1 is the argument number before FastApiCall arguments, 1 ~ receiver
   const int kHolderIndex = argc + 1 +
       kFastApiCallArguments - 1 - FunctionCallbackArguments::kHolderIndex;
-  __ movq(scratch, StackOperandForReturnAddress(0));
+  __ MoveReturnAddress(scratch, Operand(rsp, 0));
   // Assign stack space for the call arguments and receiver.
   __ subq(rsp, Immediate((fast_api_call_argc + 1) * kPointerSize));
-  __ movq(StackOperandForReturnAddress(0), scratch);
+  __ MoveReturnAddress(Operand(rsp, 0), scratch);
   // Write holder to stack frame.
   __ movq(args.GetArgumentOperand(kHolderIndex), receiver);
   __ movq(args.GetReceiverOperand(), receiver);
@@ -2490,9 +2490,8 @@ Handle<Code> CallStubCompiler::CompileFastApiCall(
                   name, depth, &miss);

   // Move the return address on top of the stack.
-  __ movq(rax,
- StackOperandForReturnAddress(kFastApiCallArguments * kPointerSize));
-  __ movq(StackOperandForReturnAddress(0), rax);
+ __ MoveReturnAddress(rax, Operand(rsp, kFastApiCallArguments * kPointerSize));
+  __ MoveReturnAddress(Operand(rsp, 0), rax);

   GenerateFastApiCall(masm(), optimization, argc, false);



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to