Chromium Code Reviews| Index: src/arm/ic-arm.cc |
| diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc |
| index 731c4719e79146ec3a99c3c1e9472f16bba98eb8..5d0a23f5ffd997cce022ae6517965044e10de46b 100644 |
| --- a/src/arm/ic-arm.cc |
| +++ b/src/arm/ic-arm.cc |
| @@ -868,10 +868,7 @@ void LoadIC::GenerateMiss(MacroAssembler* masm) { |
| } |
| -Object* KeyedLoadIC_Miss(Arguments args); |
| - |
| - |
| -void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { |
| +void KeyedLoadIC::GenerateMiss(MacroAssembler* masm, bool force_generic) { |
| // ---------- S t a t e -------------- |
| // -- lr : return address |
| // -- r0 : key |
| @@ -883,8 +880,11 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { |
| __ Push(r1, r0); |
| - ExternalReference ref = |
| - ExternalReference(IC_Utility(kKeyedLoadIC_Miss), isolate); |
| + // Perform tail call to the entry. |
| + ExternalReference ref = force_generic |
| + ? ExternalReference(IC_Utility(kKeyedLoadIC_MissForceGeneric), isolate) |
| + : ExternalReference(IC_Utility(kKeyedLoadIC_Miss), isolate); |
| + |
| __ TailCallExternalReference(ref, 2, 1); |
| } |
| @@ -1075,7 +1075,7 @@ void KeyedLoadIC::GenerateString(MacroAssembler* masm) { |
| char_at_generator.GenerateSlow(masm, call_helper); |
| __ bind(&miss); |
| - GenerateMiss(masm); |
| + GenerateMiss(masm, false); |
| } |
| @@ -1115,11 +1115,30 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { |
| 1); |
| __ bind(&slow); |
| - GenerateMiss(masm); |
| + GenerateMiss(masm, false); |
| +} |
| + |
| + |
| +void KeyedStoreIC::GenerateMiss(MacroAssembler* masm, bool force_generic) { |
| + // ---------- S t a t e -------------- |
| + // -- r0 : value |
| + // -- r1 : key |
| + // -- r2 : receiver |
| + // -- lr : return address |
| + // ----------------------------------- |
| + |
| + // Push receiver, key and value for runtime call. |
| + __ Push(r2, r1, r0); |
| + |
| + ExternalReference ref = force_generic |
| + ? ExternalReference(IC_Utility(kKeyedStoreIC_MissForceGeneric), |
| + masm->isolate()) |
| + : ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate()); |
|
Mads Ager (chromium)
2011/05/10 13:38:06
Really funky indentation. ;-)
danno
2011/05/11 14:20:19
Done.
|
| + __ TailCallExternalReference(ref, 3, 1); |
| } |
| -void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { |
| +void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) { |
| // ---------- S t a t e -------------- |
| // -- r0 : value |
| // -- r1 : key |
| @@ -1131,7 +1150,7 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { |
| __ Push(r2, r1, r0); |
| ExternalReference ref = |
| - ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate()); |
| + ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate()); |
|
Mads Ager (chromium)
2011/05/10 13:38:06
What is the idea with the slow case here? Goes dir
danno
2011/05/11 14:20:19
Exactly. This happens in the external arrays stub
|
| __ TailCallExternalReference(ref, 3, 1); |
| } |