diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-04-18 19:42:15 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-04-19 16:01:46 +0000 |
commit | b11a6d508c618b33f8626afc6742773cbb293f66 (patch) | |
tree | 73c8ece6e043c9b6300bf60ca93b0b92390ad33e | |
parent | 26f6b94584c56ffe23336690ec899c78db517261 (diff) | |
download | gem5-b11a6d508c618b33f8626afc6742773cbb293f66.tar.xz |
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 <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
-rw-r--r-- | src/mem/cache/tags/fa_lru.cc | 14 |
1 files 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<FALRUBlk*>(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; |