Chromium Code Reviews| Index: runtime/vm/assembler_ia32.cc |
| diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc |
| index 2aebb55e71282f497c8cd512d22c7d23146fdf77..20cfe9c8cc0c7fd83071814a804bd83bd443f721 100644 |
| --- a/runtime/vm/assembler_ia32.cc |
| +++ b/runtime/vm/assembler_ia32.cc |
| @@ -1525,17 +1525,31 @@ void Assembler::ReserveAlignedFrameSpace(intptr_t frame_space) { |
| } |
| -void Assembler::PreserveCallerSavedRegisters() { |
| +void Assembler::EnterCallRuntimeFrame(intptr_t frame_space) { |
| + enter(Immediate(0)); |
| + |
| + // Preserve volatile registers. |
|
siva
2012/07/27 20:41:21
ASSERT(kNumberOfVolatileRegisters == 3);
or better
|
| pushl(EAX); |
| pushl(ECX); |
| pushl(EDX); |
| + |
| + ReserveAlignedFrameSpace(frame_space); |
| } |
| -void Assembler::RestoreCallerSavedRegisters() { |
| +void Assembler::LeaveCallRuntimeFrame() { |
| + // ESP might have been modified to reserve space for arguments |
| + // and ensure proper alignment of the stack frame. |
| + // We need to restore it before restoring registers. |
| + const intptr_t kNumberOfVolatileRegisters = 3; |
|
siva
2012/07/27 20:41:21
Pull this to the class so that it is accessible fr
|
| + leal(ESP, Address(EBP, -kNumberOfVolatileRegisters * kWordSize)); |
| + |
| + // Restore volatile registers. |
|
siva
2012/07/27 20:41:21
ASSERT(kNumberofVolatileRegisters == 3);
|
| popl(EDX); |
| popl(ECX); |
| popl(EAX); |
| + |
| + leave(); |
| } |