Reviewers: William Hesse,

Description:
Experimental: fix a pair of bugs in the frame's sync state.  In two
cases we could erroneously mark elements as synced, causing them to be
lost if we hit a spill.


Please review this at http://codereview.chromium.org/14105

SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/

Affected files:
   M     src/virtual-frame-ia32.cc


Index: src/virtual-frame-ia32.cc
===================================================================
--- src/virtual-frame-ia32.cc   (revision 970)
+++ src/virtual-frame-ia32.cc   (working copy)
@@ -475,6 +475,12 @@
        } else {
          // Source is constant.
          __ Set(target.reg(), Immediate(source.handle()));
+        if (target.is_synced()) {
+          if (i > stack_pointer_) {
+            SyncRange(stack_pointer_ + 1, i);
+          }
+          SyncElementAt(i);
+        }
        }
        Use(target.reg());
        elements_[i] = target;
@@ -624,12 +630,13 @@

      cgen_->allocator()->Unuse(temp);
    } else {
-    // For constants and registers, add a copy of the element to the
-    // top of the frame.
+    // For constants and registers, add an (unsynced) copy of the element  
to
+    // the top of the frame.
      ASSERT(element.is_register() || element.is_constant());
      if (element.is_register()) {
        Use(element.reg());
      }
+    element.clear_sync();
      elements_.Add(element);
    }
  }



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to