| Index: src/ic/mips64/stub-cache-mips64.cc | 
| diff --git a/src/ic/mips64/stub-cache-mips64.cc b/src/ic/mips64/stub-cache-mips64.cc | 
| index d8c2716a67bc2988c3c55c1e5a3a9f84fdc54f6c..41c3aa4969fcccc2cc162693122f5c087810b91f 100644 | 
| --- a/src/ic/mips64/stub-cache-mips64.cc | 
| +++ b/src/ic/mips64/stub-cache-mips64.cc | 
| @@ -15,7 +15,8 @@ | 
| #define __ ACCESS_MASM(masm) | 
|  | 
| static void ProbeTable(StubCache* stub_cache, MacroAssembler* masm, | 
| -                       StubCache::Table table, Register receiver, Register name, | 
| +                       Code::Flags flags, StubCache::Table table, | 
| +                       Register receiver, Register name, | 
| // Number of the cache entry, not scaled. | 
| Register offset, Register scratch, Register scratch2, | 
| Register offset_scratch) { | 
| @@ -62,16 +63,14 @@ | 
| __ ld(code, MemOperand(base_addr, | 
| static_cast<int32_t>(value_off_addr - key_off_addr))); | 
|  | 
| -#ifdef DEBUG | 
| // Check that the flags match what we're looking for. | 
| -  Code::Flags flags = Code::RemoveHolderFromFlags( | 
| -      Code::ComputeHandlerFlags(stub_cache->ic_kind())); | 
| Register flags_reg = base_addr; | 
| base_addr = no_reg; | 
| __ lw(flags_reg, FieldMemOperand(code, Code::kFlagsOffset)); | 
| __ And(flags_reg, flags_reg, Operand(~Code::kFlagsNotUsedInLookup)); | 
| -  __ Check(eq, kUnexpectedValue, flags_reg, Operand(flags)); | 
| +  __ Branch(&miss, ne, flags_reg, Operand(flags)); | 
|  | 
| +#ifdef DEBUG | 
| if (FLAG_test_secondary_stub_cache && table == StubCache::kPrimary) { | 
| __ jmp(&miss); | 
| } else if (FLAG_test_primary_stub_cache && table == StubCache::kSecondary) { | 
| @@ -90,6 +89,9 @@ | 
| void StubCache::GenerateProbe(MacroAssembler* masm, Register receiver, | 
| Register name, Register scratch, Register extra, | 
| Register extra2, Register extra3) { | 
| +  Code::Flags flags = | 
| +      Code::RemoveHolderFromFlags(Code::ComputeHandlerFlags(ic_kind_)); | 
| + | 
| Label miss; | 
|  | 
| // Make sure that code is valid. The multiplying code relies on the | 
| @@ -139,21 +141,23 @@ | 
| // We shift out the last two bits because they are not part of the hash and | 
| // they are always 01 for maps. | 
| __ dsrl(scratch, scratch, kCacheIndexShift); | 
| +  __ Xor(scratch, scratch, Operand((flags >> kCacheIndexShift) & mask)); | 
| __ And(scratch, scratch, Operand(mask)); | 
|  | 
| // Probe the primary table. | 
| -  ProbeTable(this, masm, kPrimary, receiver, name, scratch, extra, extra2, | 
| -             extra3); | 
| +  ProbeTable(this, masm, flags, kPrimary, receiver, name, scratch, extra, | 
| +             extra2, extra3); | 
|  | 
| // Primary miss: Compute hash for secondary probe. | 
| __ dsrl(at, name, kCacheIndexShift); | 
| __ Dsubu(scratch, scratch, at); | 
| uint64_t mask2 = kSecondaryTableSize - 1; | 
| +  __ Daddu(scratch, scratch, Operand((flags >> kCacheIndexShift) & mask2)); | 
| __ And(scratch, scratch, Operand(mask2)); | 
|  | 
| // Probe the secondary table. | 
| -  ProbeTable(this, masm, kSecondary, receiver, name, scratch, extra, extra2, | 
| -             extra3); | 
| +  ProbeTable(this, masm, flags, kSecondary, receiver, name, scratch, extra, | 
| +             extra2, extra3); | 
|  | 
| // Cache miss: Fall-through and let caller handle the miss by | 
| // entering the runtime system. | 
|  |