Reviewers: Erik Corry,

Description:
X64: Do not use an AllocateWithoutSpill register if it is invalid.

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

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

Affected files:
   M     src/x64/codegen-x64.cc


Index: src/x64/codegen-x64.cc
===================================================================
--- src/x64/codegen-x64.cc      (revision 2675)
+++ src/x64/codegen-x64.cc      (working copy)
@@ -3084,26 +3084,36 @@
                                                    is_increment);
      }

+    // If we have a free register, combine the smi and overflow checks.
      Result tmp = allocator_->AllocateWithoutSpilling();
      ASSERT(kSmiTagMask == 1 && kSmiTag == 0);
-    __ movl(tmp.reg(), Immediate(kSmiTagMask));
-    // Smi test.
+    if (tmp.is_valid()) {
+      __ movl(tmp.reg(), Immediate(kSmiTagMask));
+    }
+
+    // Try incrementing or decrementing the smi.
      __ movq(kScratchRegister, new_value.reg());
      if (is_increment) {
        __ addl(kScratchRegister, Immediate(Smi::FromInt(1)));
      } else {
        __ subl(kScratchRegister, Immediate(Smi::FromInt(1)));
      }
-    // deferred->Branch(overflow);
-    __ cmovl(overflow, kScratchRegister, tmp.reg());
-    __ testl(kScratchRegister, tmp.reg());
-    tmp.Unuse();
-    deferred->Branch(not_zero);
+
+    // Go to the deferred case if the result overflows or is non-smi.
+    if (tmp.is_valid()){
+      __ cmovl(overflow, kScratchRegister, tmp.reg());
+      __ testl(kScratchRegister, tmp.reg());
+      tmp.Unuse();
+      deferred->Branch(not_zero);
+    } else {
+      deferred->Branch(overflow);
+      __ testl(kScratchRegister, Immediate(kSmiTagMask));
+      deferred->Branch(not_zero);
+    }
+
      __ movq(new_value.reg(), kScratchRegister);
-
      deferred->BindExit();

-
      // Postfix: store the old value in the allocated slot under the
      // reference.
      if (is_postfix) frame_->SetElementAt(target.size(), &old_value);



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

Reply via email to