| Index: src/ic/x64/handler-compiler-x64.cc
|
| diff --git a/src/ic/x64/handler-compiler-x64.cc b/src/ic/x64/handler-compiler-x64.cc
|
| index fe6d168b52813ad37c38b6ee9d1e698654191a3b..1490c921fc3e1890b33f66418f2f3d484ca65601 100644
|
| --- a/src/ic/x64/handler-compiler-x64.cc
|
| +++ b/src/ic/x64/handler-compiler-x64.cc
|
| @@ -304,13 +304,26 @@ static void StoreIC_PushArgs(MacroAssembler* masm) {
|
| Register name = StoreDescriptor::NameRegister();
|
| Register value = StoreDescriptor::ValueRegister();
|
|
|
| - DCHECK(!rbx.is(receiver) && !rbx.is(name) && !rbx.is(value));
|
| + if (FLAG_vector_stores) {
|
| + Register slot = VectorStoreICDescriptor::SlotRegister();
|
| + Register vector = VectorStoreICDescriptor::VectorRegister();
|
| +
|
| + __ PopReturnAddressTo(r11);
|
| + __ Push(receiver);
|
| + __ Push(name);
|
| + __ Push(value);
|
| + __ Push(slot);
|
| + __ Push(vector);
|
| + __ PushReturnAddressFrom(r11);
|
| + } else {
|
| + DCHECK(!rbx.is(receiver) && !rbx.is(name) && !rbx.is(value));
|
|
|
| - __ PopReturnAddressTo(rbx);
|
| - __ Push(receiver);
|
| - __ Push(name);
|
| - __ Push(value);
|
| - __ PushReturnAddressFrom(rbx);
|
| + __ PopReturnAddressTo(rbx);
|
| + __ Push(receiver);
|
| + __ Push(name);
|
| + __ Push(value);
|
| + __ PushReturnAddressFrom(rbx);
|
| + }
|
| }
|
|
|
|
|
| @@ -319,7 +332,7 @@ void NamedStoreHandlerCompiler::GenerateSlow(MacroAssembler* masm) {
|
| StoreIC_PushArgs(masm);
|
|
|
| // Do tail-call to runtime routine.
|
| - __ TailCallRuntime(Runtime::kStoreIC_Slow, 3, 1);
|
| + __ TailCallRuntime(Runtime::kStoreIC_Slow, FLAG_vector_stores ? 5 : 3, 1);
|
| }
|
|
|
|
|
| @@ -328,7 +341,8 @@ void ElementHandlerCompiler::GenerateStoreSlow(MacroAssembler* masm) {
|
| StoreIC_PushArgs(masm);
|
|
|
| // Do tail-call to runtime routine.
|
| - __ TailCallRuntime(Runtime::kKeyedStoreIC_Slow, 3, 1);
|
| + __ TailCallRuntime(Runtime::kKeyedStoreIC_Slow, FLAG_vector_stores ? 5 : 3,
|
| + 1);
|
| }
|
|
|
|
|
| @@ -575,6 +589,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
|
| Label success;
|
| __ jmp(&success);
|
| GenerateRestoreName(miss, name);
|
| + if (IC::ICUseVector(kind())) PopVectorAndSlot();
|
| TailCallBuiltin(masm(), MissBuiltin(kind()));
|
| __ bind(&success);
|
| }
|
|
|