| Index: src/ic/ia32/ic-ia32.cc
|
| diff --git a/src/ic/ia32/ic-ia32.cc b/src/ic/ia32/ic-ia32.cc
|
| index a622ba4faf3bbbeb4c30a8cd0bfac0138950efac..faa8c9fea33d3975570f92876b0fae10ad3c790d 100644
|
| --- a/src/ic/ia32/ic-ia32.cc
|
| +++ b/src/ic/ia32/ic-ia32.cc
|
| @@ -767,31 +767,52 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) {
|
| static void LoadIC_PushArgs(MacroAssembler* masm) {
|
| Register receiver = LoadDescriptor::ReceiverRegister();
|
| Register name = LoadDescriptor::NameRegister();
|
| - DCHECK(!ebx.is(receiver) && !ebx.is(name));
|
| + if (FLAG_vector_ics) {
|
| + Register slot = VectorLoadICDescriptor::SlotRegister();
|
| + Register vector = VectorLoadICDescriptor::VectorRegister();
|
| + DCHECK(!edi.is(receiver) && !edi.is(name) && !edi.is(slot) &&
|
| + !edi.is(vector));
|
| +
|
| + __ pop(edi);
|
| + __ push(receiver);
|
| + __ push(name);
|
| + __ push(slot);
|
| + __ push(vector);
|
| + __ push(edi);
|
| + } else {
|
| + DCHECK(!ebx.is(receiver) && !ebx.is(name));
|
|
|
| - __ pop(ebx);
|
| - __ push(receiver);
|
| - __ push(name);
|
| - __ push(ebx);
|
| + __ pop(ebx);
|
| + __ push(receiver);
|
| + __ push(name);
|
| + __ push(ebx);
|
| + }
|
| }
|
|
|
|
|
| void LoadIC::GenerateMiss(MacroAssembler* masm) {
|
| // Return address is on the stack.
|
| __ IncrementCounter(masm->isolate()->counters()->load_miss(), 1);
|
| -
|
| LoadIC_PushArgs(masm);
|
|
|
| // Perform tail call to the entry.
|
| ExternalReference ref =
|
| ExternalReference(IC_Utility(kLoadIC_Miss), masm->isolate());
|
| - __ TailCallExternalReference(ref, 2, 1);
|
| + int arg_count = FLAG_vector_ics ? 4 : 2;
|
| + __ TailCallExternalReference(ref, arg_count, 1);
|
| }
|
|
|
|
|
| void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
| // Return address is on the stack.
|
| - LoadIC_PushArgs(masm);
|
| + Register receiver = LoadDescriptor::ReceiverRegister();
|
| + Register name = LoadDescriptor::NameRegister();
|
| + DCHECK(!ebx.is(receiver) && !ebx.is(name));
|
| +
|
| + __ pop(ebx);
|
| + __ push(receiver);
|
| + __ push(name);
|
| + __ push(ebx);
|
|
|
| // Perform tail call to the entry.
|
| __ TailCallRuntime(Runtime::kGetProperty, 2, 1);
|
| @@ -807,13 +828,21 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
|
| // Perform tail call to the entry.
|
| ExternalReference ref =
|
| ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
|
| - __ TailCallExternalReference(ref, 2, 1);
|
| + int arg_count = FLAG_vector_ics ? 4 : 2;
|
| + __ TailCallExternalReference(ref, arg_count, 1);
|
| }
|
|
|
|
|
| void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
| // Return address is on the stack.
|
| - LoadIC_PushArgs(masm);
|
| + Register receiver = LoadDescriptor::ReceiverRegister();
|
| + Register name = LoadDescriptor::NameRegister();
|
| + DCHECK(!ebx.is(receiver) && !ebx.is(name));
|
| +
|
| + __ pop(ebx);
|
| + __ push(receiver);
|
| + __ push(name);
|
| + __ push(ebx);
|
|
|
| // Perform tail call to the entry.
|
| __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
|
|
|