Revision: 6779
Author: [email protected]
Date: Mon Feb 14 10:34:05 2011
Log: X64 Crankshaft: Fix bug in pushed registers at safepoints. Fixes
issue 1153 completely.
BUG=1153
TEST=mjsunit/mul-exhaustive
[email protected]
Review URL: http://codereview.chromium.org/6475012
http://code.google.com/p/v8/source/detail?r=6779
Modified:
/branches/bleeding_edge/src/x64/macro-assembler-x64.cc
/branches/bleeding_edge/src/x64/macro-assembler-x64.h
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Feb 14
08:02:02 2011
+++ /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Feb 14
10:34:05 2011
@@ -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));
}
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.h Mon Feb 14
08:02:02 2011
+++ /branches/bleeding_edge/src/x64/macro-assembler-x64.h Mon Feb 14
10:34:05 2011
@@ -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