| Index: src/ic/x87/stub-cache-x87.cc
|
| diff --git a/src/ic/x87/stub-cache-x87.cc b/src/ic/x87/stub-cache-x87.cc
|
| index 0de5d760fb52c8fd662315ab5f98d3e90a818de8..2522223eade2040c807d0af3de793309761119a3 100644
|
| --- a/src/ic/x87/stub-cache-x87.cc
|
| +++ b/src/ic/x87/stub-cache-x87.cc
|
| @@ -23,6 +23,8 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm,
|
| ExternalReference key_offset(isolate->stub_cache()->key_reference(table));
|
| ExternalReference value_offset(isolate->stub_cache()->value_reference(table));
|
| ExternalReference map_offset(isolate->stub_cache()->map_reference(table));
|
| + ExternalReference virtual_register =
|
| + ExternalReference::vector_store_virtual_register(masm->isolate());
|
|
|
| Label miss;
|
| bool is_vector_store =
|
| @@ -67,9 +69,10 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm,
|
| DCHECK(extra.is(VectorStoreICDescriptor::SlotRegister()));
|
| __ add(extra, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| __ pop(vector);
|
| - __ xchg(extra, Operand(esp, 0));
|
| + __ mov(Operand::StaticVariable(virtual_register), extra);
|
| + __ pop(extra); // Pop "slot".
|
| // Jump to the first instruction in the code stub.
|
| - __ ret(0);
|
| + __ jmp(Operand::StaticVariable(virtual_register));
|
| } else {
|
| __ pop(LoadWithVectorDescriptor::VectorRegister());
|
| __ pop(LoadDescriptor::SlotRegister());
|
| @@ -124,9 +127,10 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm,
|
| Register vector = VectorStoreICDescriptor::VectorRegister();
|
| DCHECK(offset.is(VectorStoreICDescriptor::SlotRegister()));
|
| __ add(offset, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| + __ mov(Operand::StaticVariable(virtual_register), offset);
|
| __ pop(vector);
|
| - __ xchg(offset, Operand(esp, 0));
|
| - __ ret(0);
|
| + __ pop(offset); // Pop "slot".
|
| + __ jmp(Operand::StaticVariable(virtual_register));
|
| } else {
|
| __ add(offset, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| __ jmp(offset);
|
|
|