ARM64: fix DoDeferredTaggedToI
authorm.m.capewell@googlemail.com <m.m.capewell@googlemail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Mar 2014 10:36:52 +0000 (10:36 +0000)
committerm.m.capewell@googlemail.com <m.m.capewell@googlemail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Mar 2014 10:36:52 +0000 (10:36 +0000)
BUG=

R=ulan@chromium.org

Review URL: https://codereview.chromium.org/211063004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20272 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm64/lithium-arm64.cc
src/arm64/lithium-codegen-arm64.cc

index 3d3ae97..60bf51e 100644 (file)
@@ -1106,8 +1106,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
       } else {
         LOperand* value = UseRegister(instr->value());
         LOperand* temp1 = TempRegister();
-        LOperand* temp2 =
-            instr->CanTruncateToInt32() ? TempRegister() : FixedTemp(d24);
+        LOperand* temp2 = instr->CanTruncateToInt32() ? NULL : FixedTemp(d24);
         res = DefineAsRegister(new(zone()) LTaggedToI(value, temp1, temp2));
         res = AssignEnvironment(res);
       }
index b1dca1f..5383896 100644 (file)
@@ -5522,7 +5522,6 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr,
 
   if (instr->truncating()) {
     Register output = ToRegister(instr->result());
-    Register scratch2 = ToRegister(temp2);
     Label check_bools;
 
     // If it's not a heap number, jump to undefined check.
@@ -5535,11 +5534,11 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr,
     __ Bind(&check_bools);
 
     Register true_root = output;
-    Register false_root = scratch2;
+    Register false_root = scratch1;
     __ LoadTrueFalseRoots(true_root, false_root);
-    __ Cmp(scratch1, true_root);
+    __ Cmp(input, true_root);
     __ Cset(output, eq);
-    __ Ccmp(scratch1, false_root, ZFlag, ne);
+    __ Ccmp(input, false_root, ZFlag, ne);
     __ B(eq, &done);
 
     // Output contains zero, undefined is converted to zero for truncating