Index: src/arm/code-stubs-arm.cc |
=================================================================== |
--- src/arm/code-stubs-arm.cc (revision 7050) |
+++ src/arm/code-stubs-arm.cc (working copy) |
@@ -872,12 +872,11 @@ |
// Exponent greater than 31 cannot yield 32-bit integers. |
// Also, a positive value with an exponent equal to 31 is outside of the |
// signed 32-bit integer range. |
- __ tst(src1, Operand(HeapNumber::kSignMask)); |
- __ cmp(scratch, Operand(30), eq); // Executed for positive. If exponent is 30 |
- // the gt condition will be "correct" and |
- // the next instruction will be skipped. |
- __ cmp(scratch, Operand(31), ne); // Executed for negative and positive where |
- // exponent is not 30. |
+ // Another way to put it is that if (exponent - signbit) > 30 then the |
+ // number cannot be represented as an int32. |
+ Register tmp = dst; |
+ __ sub(tmp, scratch, Operand(src1, LSR, 31)); |
+ __ cmp(tmp, Operand(30)); |
__ b(gt, not_int32); |
// - Bits [21:0] in the mantissa are not null. |
__ tst(src2, Operand(0x3fffff)); |