Chromium Code Reviews| Index: src/ic/x64/stub-cache-x64.cc |
| diff --git a/src/ic/x64/stub-cache-x64.cc b/src/ic/x64/stub-cache-x64.cc |
| index fa0a0b32a0fc0bcb258c1151a238a56ec016162e..f93c2ad0832502f3f36e2ac5816238aa185f487b 100644 |
| --- a/src/ic/x64/stub-cache-x64.cc |
| +++ b/src/ic/x64/stub-cache-x64.cc |
| @@ -14,7 +14,7 @@ namespace internal { |
| #define __ ACCESS_MASM(masm) |
| -static void ProbeTable(Isolate* isolate, MacroAssembler* masm, |
| +static void ProbeTable(StubCache* stub_cache, MacroAssembler* masm, |
| Code::Flags flags, StubCache::Table table, |
| Register receiver, Register name, |
| // The offset is scaled by 4, based on |
| @@ -30,8 +30,8 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm, |
| DCHECK_EQ(3u * kPointerSize, sizeof(StubCache::Entry)); |
| // The offset register holds the entry offset times four (due to masking |
| // and shifting optimizations). |
| - ExternalReference key_offset(isolate->stub_cache()->key_reference(table)); |
| - ExternalReference value_offset(isolate->stub_cache()->value_reference(table)); |
| + ExternalReference key_offset(stub_cache->key_reference(table)); |
| + ExternalReference value_offset(stub_cache->value_reference(table)); |
| Label miss; |
| // Multiply by 3 because there are 3 fields per entry (name, code, map). |
| @@ -45,8 +45,8 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm, |
| // Get the map entry from the cache. |
| // Use key_offset + kPointerSize * 2, rather than loading map_offset. |
| - DCHECK(isolate->stub_cache()->map_reference(table).address() - |
| - isolate->stub_cache()->key_reference(table).address() == |
| + DCHECK(stub_cache->map_reference(table).address() - |
| + stub_cache->key_reference(table).address() == |
| kPointerSize * 2); |
| __ movp(kScratchRegister, |
| Operand(kScratchRegister, offset, scale_factor, kPointerSize * 2)); |
| @@ -78,12 +78,12 @@ static void ProbeTable(Isolate* isolate, MacroAssembler* masm, |
| __ bind(&miss); |
| } |
| - |
| -void StubCache::GenerateProbe(MacroAssembler* masm, Code::Kind ic_kind, |
| - Code::Flags flags, Register receiver, |
| +void StubCache::GenerateProbe(MacroAssembler* masm, Register receiver, |
| Register name, Register scratch, Register extra, |
| Register extra2, Register extra3) { |
| - Isolate* isolate = masm->isolate(); |
| + Code::Flags flags = |
| + Code::RemoveHolderFromFlags(Code::ComputeHandlerFlags(ic_kind_)); |
| + |
| Label miss; |
| USE(extra); // The register extra is not used on the X64 platform. |
| USE(extra2); // The register extra2 is not used on the X64 platform. |
| @@ -105,14 +105,13 @@ void StubCache::GenerateProbe(MacroAssembler* masm, Code::Kind ic_kind, |
| // If vector-based ics are in use, ensure that scratch doesn't conflict with |
| // the vector and slot registers, which need to be preserved for a handler |
| // call or miss. |
| - if (IC::ICUseVector(ic_kind)) { |
| - if (ic_kind == Code::LOAD_IC || ic_kind == Code::LOAD_GLOBAL_IC || |
| - ic_kind == Code::KEYED_LOAD_IC) { |
| + if (IC::ICUseVector(ic_kind_)) { |
|
Jakob Kummerow
2016/07/13 09:54:47
This can be a DCHECK now (or dropped entirely); al
|
| + if (ic_kind_ == Code::LOAD_IC || ic_kind_ == Code::KEYED_LOAD_IC) { |
| Register vector = LoadWithVectorDescriptor::VectorRegister(); |
| Register slot = LoadDescriptor::SlotRegister(); |
| DCHECK(!AreAliased(vector, slot, scratch)); |
| } else { |
| - DCHECK(ic_kind == Code::STORE_IC || ic_kind == Code::KEYED_STORE_IC); |
| + DCHECK(ic_kind_ == Code::STORE_IC || ic_kind_ == Code::KEYED_STORE_IC); |
| Register vector = VectorStoreICDescriptor::VectorRegister(); |
| Register slot = VectorStoreICDescriptor::SlotRegister(); |
| DCHECK(!AreAliased(vector, slot, scratch)); |
| @@ -136,7 +135,7 @@ void StubCache::GenerateProbe(MacroAssembler* masm, Code::Kind ic_kind, |
| __ andp(scratch, Immediate((kPrimaryTableSize - 1) << kCacheIndexShift)); |
| // Probe the primary table. |
| - ProbeTable(isolate, masm, flags, kPrimary, receiver, name, scratch); |
| + ProbeTable(this, masm, flags, kPrimary, receiver, name, scratch); |
| // Primary miss: Compute hash for secondary probe. |
| __ movl(scratch, FieldOperand(name, Name::kHashFieldOffset)); |
| @@ -148,7 +147,7 @@ void StubCache::GenerateProbe(MacroAssembler* masm, Code::Kind ic_kind, |
| __ andp(scratch, Immediate((kSecondaryTableSize - 1) << kCacheIndexShift)); |
| // Probe the secondary table. |
| - ProbeTable(isolate, masm, flags, kSecondary, receiver, name, scratch); |
| + ProbeTable(this, masm, flags, kSecondary, receiver, name, scratch); |
| // Cache miss: Fall-through and let caller handle the miss by |
| // entering the runtime system. |