Chromium Code Reviews| 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--) { |
|
Kevin Millikin (Chromium)
2011/01/25 08:54:35
Space needed in "-1".
Rico
2011/01/25 08:58:59
Done.
|
| 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 |