| Index: src/ia32/ic-ia32.cc
|
| diff --git a/src/ia32/ic-ia32.cc b/src/ia32/ic-ia32.cc
|
| index 90bfd4b664dc105dfb577c1f01881b84fcd0939b..472f2a9e94e0a28c9255d4f3e38fc7df003403ca 100644
|
| --- a/src/ia32/ic-ia32.cc
|
| +++ b/src/ia32/ic-ia32.cc
|
| @@ -1231,8 +1231,12 @@ static void GenerateMonomorphicCacheProbe(MacroAssembler* masm,
|
| Label number, non_number, non_string, boolean, probe, miss;
|
|
|
| // Probe the stub cache.
|
| - Code::Flags flags =
|
| - Code::ComputeFlags(kind, NOT_IN_LOOP, MONOMORPHIC, NORMAL, argc);
|
| + Code::Flags flags = Code::ComputeFlags(kind,
|
| + NOT_IN_LOOP,
|
| + MONOMORPHIC,
|
| + Code::kNoExtraICState,
|
| + NORMAL,
|
| + argc);
|
| StubCache::GenerateProbe(masm, flags, edx, ecx, ebx, eax);
|
|
|
| // If the stub cache probing failed, the receiver might be a value.
|
| @@ -1325,7 +1329,10 @@ static void GenerateCallNormal(MacroAssembler* masm, int argc) {
|
| }
|
|
|
|
|
| -static void GenerateCallMiss(MacroAssembler* masm, int argc, IC::UtilityId id) {
|
| +static void GenerateCallMiss(MacroAssembler* masm,
|
| + Code::ExtraICState extra_ic_state,
|
| + int argc,
|
| + IC::UtilityId id) {
|
| // ----------- S t a t e -------------
|
| // -- ecx : name
|
| // -- esp[0] : return address
|
| @@ -1349,10 +1356,13 @@ static void GenerateCallMiss(MacroAssembler* masm, int argc, IC::UtilityId id) {
|
| // Push the receiver and the name of the function.
|
| __ push(edx);
|
| __ push(ecx);
|
| + if (extra_ic_state != Code::kNoExtraICState) {
|
| + __ push(Immediate(Smi::FromInt(extra_ic_state)));
|
| + }
|
|
|
| // Call the entry.
|
| CEntryStub stub(1);
|
| - __ mov(eax, Immediate(2));
|
| + __ mov(eax, Immediate((extra_ic_state == Code::kNoExtraICState) ? 2 : 3));
|
| __ mov(ebx, Immediate(ExternalReference(IC_Utility(id))));
|
| __ CallStub(&stub);
|
|
|
| @@ -1399,7 +1409,7 @@ void CallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
| // Get the receiver of the function from the stack; 1 ~ return address.
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
| GenerateMonomorphicCacheProbe(masm, argc, Code::CALL_IC);
|
| - GenerateMiss(masm, argc);
|
| + GenerateMiss(masm, Code::kNoExtraICState, argc);
|
| }
|
|
|
|
|
| @@ -1413,11 +1423,13 @@ void CallIC::GenerateNormal(MacroAssembler* masm, int argc) {
|
| // -----------------------------------
|
|
|
| GenerateCallNormal(masm, argc);
|
| - GenerateMiss(masm, argc);
|
| + GenerateMiss(masm, Code::kNoExtraICState, argc);
|
| }
|
|
|
|
|
| -void CallIC::GenerateMiss(MacroAssembler* masm, int argc) {
|
| +void CallIC::GenerateMiss(MacroAssembler* masm,
|
| + Code::ExtraICState extra_ic_state,
|
| + int argc) {
|
| // ----------- S t a t e -------------
|
| // -- ecx : name
|
| // -- esp[0] : return address
|
| @@ -1426,7 +1438,7 @@ void CallIC::GenerateMiss(MacroAssembler* masm, int argc) {
|
| // -- esp[(argc + 1) * 4] : receiver
|
| // -----------------------------------
|
|
|
| - GenerateCallMiss(masm, argc, IC::kCallIC_Miss);
|
| + GenerateCallMiss(masm, extra_ic_state, argc, IC::kCallIC_Miss);
|
| }
|
|
|
|
|
| @@ -1560,7 +1572,7 @@ void KeyedCallIC::GenerateMiss(MacroAssembler* masm, int argc) {
|
| // -- esp[(argc + 1) * 4] : receiver
|
| // -----------------------------------
|
|
|
| - GenerateCallMiss(masm, argc, IC::kKeyedCallIC_Miss);
|
| + GenerateCallMiss(masm, Code::kNoExtraICState, argc, IC::kKeyedCallIC_Miss);
|
| }
|
|
|
|
|
|
|