Reviewers: Kevin Millikin,

Description:
X64 Crankshaft: Fix bug in pushed registers at safepoints.  Fixes issue 1153
completely.
BUG=1153
TEST=mjsunit/mul-exhaustive
[email protected]

Please review this at http://codereview.chromium.org/6475012/

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

Affected files:
  M     src/x64/macro-assembler-x64.h
  M     src/x64/macro-assembler-x64.cc


Index: src/x64/macro-assembler-x64.cc
===================================================================
--- src/x64/macro-assembler-x64.cc      (revision 6778)
+++ src/x64/macro-assembler-x64.cc      (working copy)
@@ -1442,11 +1442,15 @@
   // r13 is kRootRegister.
   push(r14);
   // r15 is kSmiConstantRegister
-  STATIC_ASSERT(11 == kRegistersPushedByPushad);
+  STATIC_ASSERT(11 == kNumSafepointSavedRegisters);
+  subq(rsp, Immediate(
+ (kNumSafepointRegisters-kNumSafepointSavedRegisters) * kPointerSize));
 }


 void MacroAssembler::Popad() {
+  addq(rsp, Immediate(
+ (kNumSafepointRegisters-kNumSafepointSavedRegisters) * kPointerSize));
   pop(r14);
   pop(r12);
   pop(r11);
@@ -1462,7 +1466,7 @@


 void MacroAssembler::Dropad() {
-  addq(rsp, Immediate(kRegistersPushedByPushad * kPointerSize));
+  addq(rsp, Immediate(kNumSafepointRegisters * kPointerSize));
 }


Index: src/x64/macro-assembler-x64.h
===================================================================
--- src/x64/macro-assembler-x64.h       (revision 6778)
+++ src/x64/macro-assembler-x64.h       (working copy)
@@ -171,7 +171,7 @@
   void PushSafepointRegisters() { Pushad(); }
   void PopSafepointRegisters() { Popad(); }
   static int SafepointRegisterStackIndex(int reg_code) {
-    return kRegistersPushedByPushad - 1 -
+    return kNumSafepointRegisters - 1 -
         kSafepointPushRegisterIndices[reg_code];
   }

@@ -967,7 +967,7 @@
   // Order general registers are pushed by Pushad.
   // rax, rcx, rdx, rbx, rsi, rdi, r8, r9, r11, r12, r14.
   static int kSafepointPushRegisterIndices[Register::kNumRegisters];
-  static const int kRegistersPushedByPushad = 11;
+  static const int kNumSafepointSavedRegisters = 11;

   bool generating_stub_;
   bool allow_stub_calls_;


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to