Index: src/ic/x64/ic-x64.cc |
diff --git a/src/ic/x64/ic-x64.cc b/src/ic/x64/ic-x64.cc |
index 016c5e05e50e40a074b14f6c24f8e6a7a4f90860..b987c9362db2feb4729b13af786cae8e4512b2fb 100644 |
--- a/src/ic/x64/ic-x64.cc |
+++ b/src/ic/x64/ic-x64.cc |
@@ -753,14 +753,21 @@ static void StoreIC_PushArgs(MacroAssembler* masm) { |
Register receiver = StoreDescriptor::ReceiverRegister(); |
Register name = StoreDescriptor::NameRegister(); |
Register value = StoreDescriptor::ValueRegister(); |
+ Register temp = r11; |
+ DCHECK(!temp.is(receiver) && !temp.is(name) && !temp.is(value)); |
- DCHECK(!rbx.is(receiver) && !rbx.is(name) && !rbx.is(value)); |
- |
- __ PopReturnAddressTo(rbx); |
+ __ PopReturnAddressTo(temp); |
__ Push(receiver); |
__ Push(name); |
__ Push(value); |
- __ PushReturnAddressFrom(rbx); |
+ if (FLAG_vector_stores) { |
+ Register slot = VectorStoreICDescriptor::SlotRegister(); |
+ Register vector = VectorStoreICDescriptor::VectorRegister(); |
+ DCHECK(!temp.is(slot) && !temp.is(vector)); |
+ __ Push(slot); |
+ __ Push(vector); |
+ } |
+ __ PushReturnAddressFrom(temp); |
} |
@@ -769,7 +776,8 @@ void StoreIC::GenerateMiss(MacroAssembler* masm) { |
StoreIC_PushArgs(masm); |
// Perform tail call to the entry. |
- __ TailCallRuntime(Runtime::kStoreIC_Miss, 3, 1); |
+ int args = FLAG_vector_stores ? 5 : 3; |
+ __ TailCallRuntime(Runtime::kStoreIC_Miss, args, 1); |
} |
@@ -798,7 +806,8 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { |
StoreIC_PushArgs(masm); |
// Do tail-call to runtime routine. |
- __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, 3, 1); |
+ int args = FLAG_vector_stores ? 5 : 3; |
+ __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, args, 1); |
} |