Chromium Code Reviews| Index: src/ic/ia32/stub-cache-ia32.cc |
| diff --git a/src/ic/ia32/stub-cache-ia32.cc b/src/ic/ia32/stub-cache-ia32.cc |
| index e5791793f5de72f3cda573bdec84486399b5b108..c6ffb0f7286615ac6f0af78e9dbb6420b6477a8d 100644 |
| --- a/src/ic/ia32/stub-cache-ia32.cc |
| +++ b/src/ic/ia32/stub-cache-ia32.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". |
|
Jakob Kummerow
2015/09/14 14:02:42
nit: s/pop/Pop/, again below
mvstanton
2015/09/14 14:25:35
Done.
|
| // 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); |