Index: src/ic/ia32/ic-ia32.cc |
diff --git a/src/ic/ia32/ic-ia32.cc b/src/ic/ia32/ic-ia32.cc |
index 6d54b074d22fcad6ca2a3a066dc893eb42300387..4d6a00e05068d0710c402c2946b0f3a2255c7496 100644 |
--- a/src/ic/ia32/ic-ia32.cc |
+++ b/src/ic/ia32/ic-ia32.cc |
@@ -553,10 +553,28 @@ void KeyedStoreIC::GenerateMegamorphic(MacroAssembler* masm, |
__ mov(ebx, FieldOperand(key, HeapObject::kMapOffset)); |
__ movzx_b(ebx, FieldOperand(ebx, Map::kInstanceTypeOffset)); |
__ JumpIfNotUniqueNameInstanceType(ebx, &slow); |
+ |
+ |
+ if (FLAG_vector_stores) { |
+ // The handlers in the stub cache expect a vector and slot. Since we won't |
+ // change the IC from any downstream misses, a dummy vector can be used. |
+ Handle<TypeFeedbackVector> dummy_vector = Handle<TypeFeedbackVector>::cast( |
+ masm->isolate()->factory()->keyed_store_dummy_vector()); |
+ int slot = dummy_vector->GetIndex(FeedbackVectorICSlot(0)); |
+ __ push(Immediate(Smi::FromInt(slot))); |
+ __ push(Immediate(dummy_vector)); |
+ } |
+ |
Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( |
Code::ComputeHandlerFlags(Code::STORE_IC)); |
masm->isolate()->stub_cache()->GenerateProbe( |
masm, Code::STORE_IC, flags, false, receiver, key, ebx, no_reg); |
+ |
+ if (FLAG_vector_stores) { |
+ __ pop(VectorStoreICDescriptor::VectorRegister()); |
+ __ pop(VectorStoreICDescriptor::SlotRegister()); |
+ } |
+ |
// Cache miss. |
__ jmp(&miss); |