From: rodolph.perfetta@arm.com Date: Fri, 29 Aug 2014 18:46:30 +0000 (+0000) Subject: [turbofan] Allow unittest to call TruncateDoubleToI. X-Git-Tag: upstream/4.7.83~7270 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bfd5fb0693219176bb8616bb6a082a738c782af8;p=platform%2Fupstream%2Fv8.git [turbofan] Allow unittest to call TruncateDoubleToI. 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 --- diff --git a/src/arm64/macro-assembler-arm64.cc b/src/arm64/macro-assembler-arm64.cc index 658497b..c13fba7 100644 --- a/src/arm64/macro-assembler-arm64.cc +++ b/src/arm64/macro-assembler-arm64.cc @@ -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); } diff --git a/test/cctest/cctest.status b/test/cctest/cctest.status index 48f6a38..894ae1b 100644 --- a/test/cctest/cctest.status +++ b/test/cctest/cctest.status @@ -195,9 +195,6 @@ # 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', {