| Index: src/ia32/virtual-frame-ia32.cc
|
| ===================================================================
|
| --- src/ia32/virtual-frame-ia32.cc (revision 3020)
|
| +++ src/ia32/virtual-frame-ia32.cc (working copy)
|
| @@ -161,15 +161,16 @@
|
| // on the stack.
|
| int start = Min(begin, stack_pointer_ + 1);
|
|
|
| - // If positive we have to adjust the stack pointer.
|
| - int delta = end - stack_pointer_;
|
| - if (delta > 0) {
|
| - stack_pointer_ = end;
|
| - __ sub(Operand(esp), Immediate(delta * kPointerSize));
|
| - }
|
| -
|
| + // Emit normal 'push' instructions for elements above stack pointer
|
| + // and use mov instructions if we are below stack pointer.
|
| for (int i = start; i <= end; i++) {
|
| - if (!elements_[i].is_synced()) SyncElementBelowStackPointer(i);
|
| + if (!elements_[i].is_synced()) {
|
| + if (i <= stack_pointer_) {
|
| + SyncElementBelowStackPointer(i);
|
| + } else {
|
| + SyncElementByPushing(i);
|
| + }
|
| + }
|
| }
|
| }
|
|
|
|
|