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); |
+ } |
+ } |
} |
} |