| Index: src/x64/virtual-frame-x64.cc
|
| ===================================================================
|
| --- src/x64/virtual-frame-x64.cc (revision 3020)
|
| +++ src/x64/virtual-frame-x64.cc (working copy)
|
| @@ -883,15 +883,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;
|
| - __ subq(rsp, 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);
|
| + }
|
| + }
|
| }
|
| }
|
|
|
|
|