Index: src/ic/arm64/handler-compiler-arm64.cc |
diff --git a/src/ic/arm64/handler-compiler-arm64.cc b/src/ic/arm64/handler-compiler-arm64.cc |
index 5de436420bd0493922a1b2993c1f24b601ac0e1f..10ea1d72ff3030b98077cbd65888f9cba09ebef8 100644 |
--- a/src/ic/arm64/handler-compiler-arm64.cc |
+++ b/src/ic/arm64/handler-compiler-arm64.cc |
@@ -299,27 +299,36 @@ void NamedLoadHandlerCompiler::GenerateLoadViaGetter( |
} |
+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, name 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) { |
ASM_LOCATION("ElementHandlerCompiler::GenerateStoreSlow"); |
- |
- // 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); |
} |
@@ -618,6 +627,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) { |
__ B(&success); |
GenerateRestoreName(miss, name); |
+ if (IC::ICUseVector(kind())) PopVectorAndSlot(); |
TailCallBuiltin(masm(), MissBuiltin(kind())); |
__ Bind(&success); |