Index: src/ic/ppc/handler-compiler-ppc.cc |
diff --git a/src/ic/ppc/handler-compiler-ppc.cc b/src/ic/ppc/handler-compiler-ppc.cc |
index d4b2314c4f93fdf0cb4c7cf4f9ed8843c5876153..52efcf91a4c7c0a650f8abc713b1dde7a821b1ff 100644 |
--- a/src/ic/ppc/handler-compiler-ppc.cc |
+++ b/src/ic/ppc/handler-compiler-ppc.cc |
@@ -305,25 +305,35 @@ void PropertyHandlerCompiler::GenerateApiAccessorCall( |
} |
+static void StoreIC_PushArgs(MacroAssembler* masm) { |
+ if (FLAG_vector_stores) { |
+ __ Push(StoreDescriptor::ReceiverRegister(), |
+ StoreDescriptor::NameRegister(), StoreDescriptor::ValueRegister(), |
+ VectorStoreICDescriptor::SlotRegister(), |
+ VectorStoreICDescriptor::VectorRegister()); |
+ } else { |
+ __ Push(StoreDescriptor::ReceiverRegister(), |
+ StoreDescriptor::NameRegister(), StoreDescriptor::ValueRegister()); |
+ } |
+} |
+ |
+ |
void NamedStoreHandlerCompiler::GenerateSlow(MacroAssembler* masm) { |
- // Push receiver, key and value for runtime call. |
- __ Push(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(), |
- StoreDescriptor::ValueRegister()); |
+ StoreIC_PushArgs(masm); |
// The slow case calls into the runtime to complete the store without causing |
// an IC miss that would otherwise cause a transition to the generic stub. |
- __ TailCallRuntime(Runtime::kStoreIC_Slow, 3, 1); |
+ __ TailCallRuntime(Runtime::kStoreIC_Slow, FLAG_vector_stores ? 5 : 3, 1); |
} |
void ElementHandlerCompiler::GenerateStoreSlow(MacroAssembler* masm) { |
- // Push receiver, key and value for runtime call. |
- __ Push(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(), |
- StoreDescriptor::ValueRegister()); |
+ StoreIC_PushArgs(masm); |
// The slow case calls into the runtime to complete the store without causing |
// an IC miss that would otherwise cause a transition to the generic stub. |
- __ TailCallRuntime(Runtime::kKeyedStoreIC_Slow, 3, 1); |
+ __ TailCallRuntime(Runtime::kKeyedStoreIC_Slow, FLAG_vector_stores ? 5 : 3, |
+ 1); |
} |
@@ -565,6 +575,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) { |
Label success; |
__ b(&success); |
GenerateRestoreName(miss, name); |
+ if (IC::ICUseVector(kind())) PopVectorAndSlot(); |
TailCallBuiltin(masm(), MissBuiltin(kind())); |
__ bind(&success); |
} |