diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-03-09 15:04:20 +0100 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-10-10 18:17:42 +0000 |
commit | d204e56b2b9b8ad561fc258ebdc50ae8365159e1 (patch) | |
tree | 52783a7a32db7d055cb85e5454e6512c22cb2b1c /src/mem/cache/tags/skewed_assoc.cc | |
parent | 99a6c94e58b6375c0d524530cab2a27b6ea0f2bc (diff) | |
download | gem5-d204e56b2b9b8ad561fc258ebdc50ae8365159e1.tar.xz |
mem-cache: Use possible locations to find block
Use possible locations to find block to make it placement policy
independent.
Change-Id: I4c9d9e1e1ff91ce12e85ca1970f927d8f4f5a93b
Reviewed-on: https://gem5-review.googlesource.com/c/8884
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/mem/cache/tags/skewed_assoc.cc')
-rw-r--r-- | src/mem/cache/tags/skewed_assoc.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/mem/cache/tags/skewed_assoc.cc b/src/mem/cache/tags/skewed_assoc.cc index b3945d0c4..89ab61588 100644 --- a/src/mem/cache/tags/skewed_assoc.cc +++ b/src/mem/cache/tags/skewed_assoc.cc @@ -204,15 +204,15 @@ SkewedAssoc::regenerateBlkAddr(const CacheBlk* blk) const return (blk->tag << tagShift) | (set << setShift); } -const std::vector<CacheBlk*> -SkewedAssoc::getPossibleLocations(Addr addr) const +std::vector<ReplaceableEntry*> +SkewedAssoc::getPossibleLocations(const Addr addr) const { - std::vector<CacheBlk*> locations; + std::vector<ReplaceableEntry*> locations; // Parse all ways for (int way = 0; way < assoc; ++way) { // Apply hash to get set, and get way entry in it - locations.push_back(sets[extractSet(addr, way)].blks[way]); + locations.push_back(sets[extractSet(addr, way)][way]); } return locations; @@ -225,10 +225,11 @@ SkewedAssoc::findBlock(Addr addr, bool is_secure) const Addr tag = extractTag(addr); // Find possible locations for the given address - std::vector<CacheBlk*> locations = getPossibleLocations(addr); + std::vector<ReplaceableEntry*> locations = getPossibleLocations(addr); // Search for block - for (const auto& blk : locations) { + for (const auto& location : locations) { + CacheBlk* blk = static_cast<CacheBlk*>(location); if ((blk->tag == tag) && blk->isValid() && (blk->isSecure() == is_secure)) { return blk; |