Index: src/ia32/ic-ia32.cc |
=================================================================== |
--- src/ia32/ic-ia32.cc (revision 5974) |
+++ src/ia32/ic-ia32.cc (working copy) |
@@ -2049,12 +2049,23 @@ |
} |
+static bool HasInlinedSmiCode(Address address) { |
+ // The address of the instruction following the call. |
+ Address test_instruction_address = |
+ address + Assembler::kCallTargetAddressOffset; |
+ |
+ // If the instruction following the call is not a test al, nothing |
+ // was inlined. |
+ return *test_instruction_address == Assembler::kTestAlByte; |
+} |
+ |
+ |
void CompareIC::UpdateCaches(Handle<Object> x, Handle<Object> y) { |
HandleScope scope; |
Handle<Code> rewritten; |
State previous_state = GetState(); |
- State state = TargetState(previous_state, x, y); |
+ State state = TargetState(previous_state, HasInlinedSmiCode(address()), x, y); |
if (state == GENERIC) { |
CompareStub stub(GetCondition(), strict(), NO_COMPARE_FLAGS); |
rewritten = stub.GetCode(); |