From fdc46eea7a24dffcb84ca8669c3f9bbc066d4a3b Mon Sep 17 00:00:00 2001 From: "palfia@homejinni.com" Date: Tue, 4 Jun 2013 20:11:16 +0000 Subject: [PATCH] MIPS : Collect type feedback for power-of-2 right operands in BinaryOps. Port r14928 (a2e0e18) Original commit message: Improved --trace-ic output for unary/binary ops a bit on the way. Moved int32_t/uint32_t conversion helpers around. BUG= Review URL: https://codereview.chromium.org/16361004 Patch from Balazs Kilvady . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14941 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/code-stubs-mips.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 552797adb2..3333213e62 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -2277,7 +2277,16 @@ void BinaryOpStub_GenerateSmiCode( void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) { - Label not_smis, call_runtime; + Label right_arg_changed, call_runtime; + + if (op_ == Token::MOD && has_fixed_right_arg_) { + // It is guaranteed that the value will fit into a Smi, because if it + // didn't, we wouldn't be here, see BinaryOp_Patch. + __ Branch(&right_arg_changed, + ne, + a0, + Operand(Smi::FromInt(fixed_right_arg_value()))); + } if (result_type_ == BinaryOpIC::UNINITIALIZED || result_type_ == BinaryOpIC::SMI) { @@ -2294,6 +2303,7 @@ void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) { // Code falls through if the result is not returned as either a smi or heap // number. + __ bind(&right_arg_changed); GenerateTypeTransition(masm); __ bind(&call_runtime); @@ -2494,6 +2504,11 @@ void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) { // to type transition. } else { + if (has_fixed_right_arg_) { + __ Move(f16, fixed_right_arg_value()); + __ BranchF(&transition, NULL, ne, f14, f16); + } + // We preserved a0 and a1 to be able to call runtime. // Save the left value on the stack. __ Push(t1, t0);