From b11a6d508c618b33f8626afc6742773cbb293f66 Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Wed, 18 Apr 2018 19:42:15 +0200 Subject: mem-cache: Use findBlock in FALRU's block access An access must perform a block search, which is done by findBlock. The tagHash is indexed by tags, so use extractTag instead of re- implementing its functionality. Change-Id: Ib5abacbc65cddf0f2d7e4440eb5355b56998a585 Reviewed-on: https://gem5-review.googlesource.com/10082 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- src/mem/cache/tags/fa_lru.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc index f515c4db6..6abae2bb9 100644 --- a/src/mem/cache/tags/fa_lru.cc +++ b/src/mem/cache/tags/fa_lru.cc @@ -139,10 +139,9 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat, CachesMask *in_caches_mask) { CachesMask mask = 0; - Addr blkAddr = blkAlign(addr); - FALRUBlk* blk = hashLookup(blkAddr); + FALRUBlk* blk = static_cast(findBlock(addr, is_secure)); - if (blk && blk->isValid()) { + if (blk != nullptr) { // If a cache hit lat = accessLatency; // Check if the block to be accessed is available. If not, @@ -153,13 +152,12 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat, lat = cache->ticksToCycles(blk->whenReady - curTick()) + accessLatency; } - assert(blk->tag == blkAddr); mask = blk->inCachesMask; + moveToHead(blk); } else { // If a cache miss lat = lookupLatency; - blk = nullptr; } if (in_caches_mask) { *in_caches_mask = mask; @@ -174,11 +172,11 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat, CacheBlk* FALRU::findBlock(Addr addr, bool is_secure) const { - Addr blkAddr = blkAlign(addr); - FALRUBlk* blk = hashLookup(blkAddr); + Addr tag = extractTag(addr); + FALRUBlk* blk = hashLookup(tag); if (blk && blk->isValid()) { - assert(blk->tag == blkAddr); + assert(blk->tag == tag); assert(blk->isSecure() == is_secure); } else { blk = nullptr; -- cgit v1.2.3