[turbofan] Allow unittest to call TruncateDoubleToI.
authorrodolph.perfetta@arm.com <rodolph.perfetta@arm.com>
Fri, 29 Aug 2014 18:46:30 +0000 (18:46 +0000)
committerrodolph.perfetta@arm.com <rodolph.perfetta@arm.com>
Fri, 29 Aug 2014 18:46:30 +0000 (18:46 +0000)
Switches stack pointer if necessary.

BUG=
R=bmeurer@chromium.org

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

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

src/arm64/macro-assembler-arm64.cc
test/cctest/cctest.status

index 658497b..c13fba7 100644 (file)
@@ -3013,12 +3013,22 @@ void MacroAssembler::TryConvertDoubleToInt64(Register result,
 void MacroAssembler::TruncateDoubleToI(Register result,
                                        DoubleRegister double_input) {
   Label done;
-  DCHECK(jssp.Is(StackPointer()));
 
   // Try to convert the double to an int64. If successful, the bottom 32 bits
   // contain our truncated int32 result.
   TryConvertDoubleToInt64(result, double_input, &done);
 
+  const Register old_stack_pointer = StackPointer();
+  if (csp.Is(old_stack_pointer)) {
+    // This currently only happens during compiler-unittest. If it arises
+    // during regular code generation the DoubleToI stub should be updated to
+    // cope with csp and have an extra parameter indicating which stack pointer
+    // it should use.
+    Push(jssp, xzr);  // Push xzr to maintain csp required 16-bytes alignment.
+    Mov(jssp, csp);
+    SetStackPointer(jssp);
+  }
+
   // If we fell through then inline version didn't succeed - call stub instead.
   Push(lr, double_input);
 
@@ -3030,8 +3040,15 @@ void MacroAssembler::TruncateDoubleToI(Register result,
                      true);  // skip_fastpath
   CallStub(&stub);  // DoubleToIStub preserves any registers it needs to clobber
 
-  Drop(1, kDoubleSize);  // Drop the double input on the stack.
-  Pop(lr);
+  DCHECK_EQ(xzr.SizeInBytes(), double_input.SizeInBytes());
+  Pop(xzr, lr);  // xzr to drop the double input on the stack.
+
+  if (csp.Is(old_stack_pointer)) {
+    Mov(csp, jssp);
+    SetStackPointer(csp);
+    AssertStackConsistency();
+    Pop(xzr, jssp);
+  }
 
   Bind(&done);
 }
index 48f6a38..894ae1b 100644 (file)
 
   # BUG(v8:3434).
   ' test-api/LoadICFastApi_DirectCall_GCMoveStubWithProfiler': [SKIP],
-
-  # TODO(rodolph): Please investigate.
-  'test-run-machops/RunTruncateFloat64ToInt32P': [SKIP],
 }],  # 'arch == arm64'
 
 ['arch == arm64 and simulator_run == True', {