Chromium Code Reviews| Index: src/codegen-ia32.cc |
| =================================================================== |
| --- src/codegen-ia32.cc (revision 1135) |
| +++ src/codegen-ia32.cc (working copy) |
| @@ -1127,14 +1127,14 @@ |
| __ j(not_zero, deferred->enter(), not_taken); |
| __ sar(ebx, kSmiTagSize); |
| __ shl(ebx, shift_value); |
|
Kevin Millikin (Chromium)
2009/01/23 18:48:08
It's late in the day so I could be wrong.
Do we r
|
| - // This is the Smi check for the shifted result. |
| - // After signed subtraction of 0xc0000000, the valid |
| - // Smis are positive. |
| - __ cmp(ebx, 0xc0000000); |
| - __ j(sign, deferred->enter(), not_taken); |
| - // tag result and store it in TOS (eax) |
| - ASSERT(kSmiTagSize == times_2); // adjust code if not the case |
| - __ lea(eax, Operand(ebx, ebx, times_1, kSmiTag)); |
| + // Convert the int to a Smi, and check that it is in |
| + // the range of valid Smis. |
| + ASSERT(kSmiTagSize == times_2); // Adjust code if not true. |
|
iposva
2009/01/23 16:58:38
kSmiTagSize is a number of bits, times_2 is a inst
|
| + ASSERT(kSmiTag == 0); // Adjust code if not true. |
| + __ add(ebx, Operand(ebx)); |
| + __ j(overflow, deferred->enter(), not_taken); |
| + __ mov(eax, Operand(ebx)); |
| + |
| __ bind(deferred->exit()); |
| frame_->Push(eax); |
| } |