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. |