Reviewers: Kevin Millikin,
Message:
I could have also popped the xmm registers (by using two pops), but I think
that
is somehow non-intuitive so I left these as moves (and still explicitly
remove
the double values from the stack together with the bailout id)
Description:
Port changes from x64 deoptimizer to ia32 and remove commented out code from
last patch.
Please review this at http://codereview.chromium.org/6368013/
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/ia32/deoptimizer-ia32.cc
M src/x64/deoptimizer-x64.cc
Index: src/ia32/deoptimizer-ia32.cc
===================================================================
--- src/ia32/deoptimizer-ia32.cc (revision 6449)
+++ src/ia32/deoptimizer-ia32.cc (working copy)
@@ -534,26 +534,25 @@
__ mov(ebx, Operand(eax, Deoptimizer::input_offset()));
// Fill in the input registers.
- for (int i = 0; i < kNumberOfRegisters; i++) {
+ for (int i = kNumberOfRegisters -1; i >= 0; i--) {
int offset = (i * kPointerSize) + FrameDescription::registers_offset();
- __ mov(ecx, Operand(esp, (kNumberOfRegisters - 1 - i) * kPointerSize));
- __ mov(Operand(ebx, offset), ecx);
+ __ pop(Operand(ebx, offset));
}
// Fill in the double input registers.
int double_regs_offset = FrameDescription::double_registers_offset();
for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
int dst_offset = i * kDoubleSize + double_regs_offset;
- int src_offset = i * kDoubleSize + kNumberOfRegisters * kPointerSize;
+ int src_offset = i * kDoubleSize;
__ movdbl(xmm0, Operand(esp, src_offset));
__ movdbl(Operand(ebx, dst_offset), xmm0);
}
- // Remove the bailout id and the general purpose registers from the
stack.
+ // Remove the bailout id and the double registers from the stack.
if (type() == EAGER) {
- __ add(Operand(esp), Immediate(kSavedRegistersAreaSize +
kPointerSize));
+ __ add(Operand(esp), Immediate(kDoubleRegsSize + kPointerSize));
} else {
- __ add(Operand(esp), Immediate(kSavedRegistersAreaSize + 2 *
kPointerSize));
+ __ add(Operand(esp), Immediate(kDoubleRegsSize + 2 * kPointerSize));
}
// Compute a pointer to the unwinding limit in register ecx; that is
Index: src/x64/deoptimizer-x64.cc
===================================================================
--- src/x64/deoptimizer-x64.cc (revision 6449)
+++ src/x64/deoptimizer-x64.cc (working copy)
@@ -381,8 +381,6 @@
for (int i = kNumberOfRegisters -1; i >= 0; i--) {
int offset = (i * kPointerSize) + FrameDescription::registers_offset();
__ pop(Operand(rbx, offset));
- // __ movq(rcx, Operand(rsp, (kNumberOfRegisters - 1 - i) *
kPointerSize));
- // __ movq(Operand(rbx, offset), rcx);
}
// Fill in the double input registers.
@@ -392,7 +390,7 @@
__ pop(Operand(rbx, dst_offset));
}
- // Remove the bailout id and the general purpose registers from the
stack.
+ // Remove the bailout id from the stack.
if (type() == EAGER) {
__ addq(rsp, Immediate(kPointerSize));
} else {
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev