Small TLB cleanup
This commit is contained in:
@@ -294,36 +294,40 @@ static FORCE_INLINE u64 getVPN(const u64 addr, const u64 pageMask) {
|
|||||||
|
|
||||||
TLBEntry *Cop0::TLBTryMatch(const u64 vaddr, int &index) {
|
TLBEntry *Cop0::TLBTryMatch(const u64 vaddr, int &index) {
|
||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
if (TLBEntry *entry = &tlb[i]; entry->initialized) {
|
TLBEntry *entry = &tlb[i];
|
||||||
const u64 entry_vpn = getVPN(entry->entryHi.raw, entry->pageMask.raw);
|
if (!entry->initialized)
|
||||||
const u64 vaddr_vpn = getVPN(vaddr, entry->pageMask.raw);
|
continue;
|
||||||
|
|
||||||
const bool vpn_match = entry_vpn == vaddr_vpn;
|
const u64 entry_vpn = getVPN(entry->entryHi.raw, entry->pageMask.raw);
|
||||||
|
const u64 vaddr_vpn = getVPN(vaddr, entry->pageMask.raw);
|
||||||
|
|
||||||
if (const bool asid_match = entry->global || entryHi.asid == entry->entryHi.asid;
|
const bool vpn_match = entry_vpn == vaddr_vpn;
|
||||||
vpn_match && asid_match) {
|
const bool asid_match = entry->global || entryHi.asid == entry->entryHi.asid;
|
||||||
index = i;
|
|
||||||
return entry;
|
if(!vpn_match || !asid_match)
|
||||||
}
|
continue;
|
||||||
}
|
|
||||||
|
index = i;
|
||||||
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
TLBEntry *Cop0::TLBTryMatch(const u64 vaddr) {
|
TLBEntry *Cop0::TLBTryMatch(const u64 vaddr) {
|
||||||
for (auto &i : tlb) {
|
for (auto &t : tlb) {
|
||||||
if (TLBEntry *entry = &i; entry->initialized) {
|
TLBEntry *entry = &t;
|
||||||
const u64 entry_vpn = getVPN(entry->entryHi.raw, entry->pageMask.raw);
|
if (!entry->initialized)
|
||||||
const u64 vaddr_vpn = getVPN(vaddr, entry->pageMask.raw);
|
continue;
|
||||||
|
|
||||||
const bool vpn_match = entry_vpn == vaddr_vpn;
|
const u64 entry_vpn = getVPN(entry->entryHi.raw, entry->pageMask.raw);
|
||||||
|
const u64 vaddr_vpn = getVPN(vaddr, entry->pageMask.raw);
|
||||||
|
|
||||||
if (const bool asid_match = entry->global || entryHi.asid == entry->entryHi.asid;
|
const bool vpn_match = entry_vpn == vaddr_vpn;
|
||||||
vpn_match && asid_match) {
|
const bool asid_match = entry->global || entryHi.asid == entry->entryHi.asid;
|
||||||
return entry;
|
|
||||||
}
|
if (vpn_match && asid_match)
|
||||||
}
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user