| Index: src/ic/x87/ic-x87.cc
|
| diff --git a/src/ic/x87/ic-x87.cc b/src/ic/x87/ic-x87.cc
|
| index 6ef5b635c7ca7999c5c710710a1cfc4ad9894b7b..4f614d76dc13d8cb322f9fdea31ea8d839367a7d 100644
|
| --- a/src/ic/x87/ic-x87.cc
|
| +++ b/src/ic/x87/ic-x87.cc
|
| @@ -561,26 +561,22 @@ void KeyedStoreIC::GenerateMegamorphic(MacroAssembler* masm,
|
| __ 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 =
|
| - TypeFeedbackVector::DummyVector(masm->isolate());
|
| - int slot = dummy_vector->GetIndex(
|
| - FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot));
|
| - __ push(Immediate(Smi::FromInt(slot)));
|
| - __ push(Immediate(dummy_vector));
|
| - }
|
| + // 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 =
|
| + TypeFeedbackVector::DummyVector(masm->isolate());
|
| + int slot = dummy_vector->GetIndex(
|
| + FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot));
|
| + __ 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,
|
| receiver, key, edi, no_reg);
|
|
|
| - if (FLAG_vector_stores) {
|
| - __ pop(VectorStoreICDescriptor::VectorRegister());
|
| - __ pop(VectorStoreICDescriptor::SlotRegister());
|
| - }
|
| + __ pop(VectorStoreICDescriptor::VectorRegister());
|
| + __ pop(VectorStoreICDescriptor::SlotRegister());
|
|
|
| // Cache miss.
|
| __ jmp(&miss);
|
| @@ -732,21 +728,10 @@ void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm,
|
|
|
|
|
| void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| - if (FLAG_vector_stores) {
|
| - // This shouldn't be called.
|
| - __ int3();
|
| - return;
|
| - }
|
| -
|
| - // Return address is on the stack.
|
| - Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
|
| - Code::ComputeHandlerFlags(Code::STORE_IC));
|
| - masm->isolate()->stub_cache()->GenerateProbe(
|
| - masm, Code::STORE_IC, flags, StoreDescriptor::ReceiverRegister(),
|
| - StoreDescriptor::NameRegister(), ebx, no_reg);
|
| -
|
| - // Cache miss: Jump to runtime.
|
| - GenerateMiss(masm);
|
| + // This shouldn't be called.
|
| + // TODO(mvstanton): remove this method.
|
| + __ int3();
|
| + return;
|
| }
|
|
|
|
|
| @@ -754,25 +739,15 @@ static void StoreIC_PushArgs(MacroAssembler* masm) {
|
| Register receiver = StoreDescriptor::ReceiverRegister();
|
| Register name = StoreDescriptor::NameRegister();
|
| Register value = StoreDescriptor::ValueRegister();
|
| + Register slot = VectorStoreICDescriptor::SlotRegister();
|
| + Register vector = VectorStoreICDescriptor::VectorRegister();
|
|
|
| - if (FLAG_vector_stores) {
|
| - Register slot = VectorStoreICDescriptor::SlotRegister();
|
| - Register vector = VectorStoreICDescriptor::VectorRegister();
|
| -
|
| - __ xchg(receiver, Operand(esp, 0));
|
| - __ push(name);
|
| - __ push(value);
|
| - __ push(slot);
|
| - __ push(vector);
|
| - __ push(receiver); // Contains the return address.
|
| - } else {
|
| - DCHECK(!ebx.is(receiver) && !ebx.is(name) && !ebx.is(value));
|
| - __ pop(ebx);
|
| - __ push(receiver);
|
| - __ push(name);
|
| - __ push(value);
|
| - __ push(ebx);
|
| - }
|
| + __ xchg(receiver, Operand(esp, 0));
|
| + __ push(name);
|
| + __ push(value);
|
| + __ push(slot);
|
| + __ push(vector);
|
| + __ push(receiver); // Contains the return address.
|
| }
|
|
|
|
|
| @@ -781,8 +756,7 @@ void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
| StoreIC_PushArgs(masm);
|
|
|
| // Perform tail call to the entry.
|
| - int args = FLAG_vector_stores ? 5 : 3;
|
| - __ TailCallRuntime(Runtime::kStoreIC_Miss, args, 1);
|
| + __ TailCallRuntime(Runtime::kStoreIC_Miss, 5, 1);
|
| }
|
|
|
|
|
| @@ -798,25 +772,21 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) {
|
| // objects. Push and restore receiver but rely on
|
| // GenerateDictionaryStore preserving the value and name.
|
| __ push(receiver);
|
| - if (FLAG_vector_stores) {
|
| - __ push(vector);
|
| - __ push(slot);
|
| - }
|
| + __ push(vector);
|
| + __ push(slot);
|
|
|
| Register dictionary = ebx;
|
| __ mov(dictionary, FieldOperand(receiver, JSObject::kPropertiesOffset));
|
| GenerateDictionaryStore(masm, &restore_miss, dictionary, name, value,
|
| receiver, edi);
|
| - __ Drop(FLAG_vector_stores ? 3 : 1);
|
| + __ Drop(3);
|
| Counters* counters = masm->isolate()->counters();
|
| __ IncrementCounter(counters->store_normal_hit(), 1);
|
| __ ret(0);
|
|
|
| __ bind(&restore_miss);
|
| - if (FLAG_vector_stores) {
|
| - __ pop(slot);
|
| - __ pop(vector);
|
| - }
|
| + __ pop(slot);
|
| + __ pop(vector);
|
| __ pop(receiver);
|
| __ IncrementCounter(counters->store_normal_miss(), 1);
|
| GenerateMiss(masm);
|
| @@ -828,8 +798,7 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
|
| StoreIC_PushArgs(masm);
|
|
|
| // Do tail-call to runtime routine.
|
| - int args = FLAG_vector_stores ? 5 : 3;
|
| - __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, args, 1);
|
| + __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, 5, 1);
|
| }
|
|
|
|
|
|
|