Reviewers: Kevin Millikin,

Description:
Fix bug in register assignment of IsObjectAndBranch.

Make sure that input and temp registers don't overlap.

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

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/arm/lithium-arm.cc
  M     src/ia32/lithium-ia32.cc


Index: src/arm/lithium-arm.cc
===================================================================
--- src/arm/lithium-arm.cc      (revision 8440)
+++ src/arm/lithium-arm.cc      (working copy)
@@ -1098,7 +1098,7 @@
     HIsObject* compare = HIsObject::cast(v);
     ASSERT(compare->value()->representation().IsTagged());
     LOperand* temp = TempRegister();
- return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), temp);
+    return new LIsObjectAndBranch(UseRegister(compare->value()), temp);
   } else if (v->IsCompareObjectEq()) {
     HCompareObjectEq* compare = HCompareObjectEq::cast(v);
     return new LCmpObjectEqAndBranch(UseRegisterAtStart(compare->left()),
Index: src/ia32/lithium-ia32.cc
===================================================================
--- src/ia32/lithium-ia32.cc    (revision 8440)
+++ src/ia32/lithium-ia32.cc    (working copy)
@@ -1098,7 +1098,7 @@
     ASSERT(compare->value()->representation().IsTagged());
     LOperand* temp1 = TempRegister();
     LOperand* temp2 = TempRegister();
-    return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()),
+    return new LIsObjectAndBranch(UseRegister(compare->value()),
                                   temp1,
                                   temp2);
   } else if (v->IsCompareObjectEq()) {


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

Reply via email to