Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 4482) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -6468,11 +6468,22 @@ |
__ pop(lr); |
} |
+ // HEAP_NUMBERS stub is slower than GENERIC on a pair of smis. |
+ // r0 is known to be a smi. If r1 is also a smi then switch to GENERIC. |
+ Label r1_is_not_smi; |
+ if (runtime_operands_type_ == BinaryOpIC::HEAP_NUMBERS) { |
+ __ tst(r1, Operand(kSmiTagMask)); |
+ __ b(ne, &r1_is_not_smi); |
+ GenerateTypeTransition(masm); |
+ __ jmp(&r1_is_smi); |
+ } |
+ |
__ bind(&finished_loading_r0); |
// Move r1 to a double in r0-r1. |
__ tst(r1, Operand(kSmiTagMask)); |
__ b(eq, &r1_is_smi); // It's a Smi so don't check it's a heap number. |
+ __ bind(&r1_is_not_smi); |
__ CompareObjectType(r1, r4, r4, HEAP_NUMBER_TYPE); |
__ b(ne, &slow); |
if (mode_ == OVERWRITE_LEFT) { |