diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-03-27 11:53:33 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-05-03 14:25:29 +0000 |
commit | c149983d931054d8cf88d2977a1f03a0b8b3b543 (patch) | |
tree | 1651101f29d8b06098394ffb078bf2716348664a /src/mem/cache/tags/base_set_assoc.cc | |
parent | ddb80527e37e505e74b04755da502934ce8f0645 (diff) | |
download | gem5-c149983d931054d8cf88d2977a1f03a0b8b3b543.tar.xz |
mem-cache: ReplacementPolicy specific replacement data
Replacement data is specific for each replacement policy, and thus
should be instantiated differently by each policy.
Touch() and reset() do not need to be aware of CacheBlk, as they
only update its ReplacementData.
Invalidate() makes replacement policies independent of cache blocks,
by removing the awareness of the valid state.
An inheritable base ReplaceableEntry class was created to allow usage
of replacement policies with any table-like structure.
Change-Id: I998917d800fa48504ed95abffa2f1b7bfd68522b
Reviewed-on: https://gem5-review.googlesource.com/9421
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/tags/base_set_assoc.cc')
-rw-r--r-- | src/mem/cache/tags/base_set_assoc.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mem/cache/tags/base_set_assoc.cc b/src/mem/cache/tags/base_set_assoc.cc index f0ee2a5d8..5888d1f00 100644 --- a/src/mem/cache/tags/base_set_assoc.cc +++ b/src/mem/cache/tags/base_set_assoc.cc @@ -50,7 +50,6 @@ #include <string> #include "base/intmath.hh" -#include "sim/core.hh" BaseSetAssoc::BaseSetAssoc(const Params *p) :BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc), @@ -92,6 +91,9 @@ BaseSetAssoc::BaseSetAssoc(const Params *p) // Associate a data chunk to the block blk->data = &dataBlks[blkSize*blkIndex]; + // Associate a replacement data entry to the block + blk->replacementData = replacementPolicy->instantiateEntry(); + // Setting the tag to j is just to prevent long chains in the // hash table; won't matter because the block is invalid blk->tag = j; @@ -106,6 +108,15 @@ BaseSetAssoc::BaseSetAssoc(const Params *p) } } +void +BaseSetAssoc::invalidate(CacheBlk *blk) +{ + BaseTags::invalidate(blk); + + // Invalidate replacement data + replacementPolicy->invalidate(blk->replacementData); +} + CacheBlk* BaseSetAssoc::findBlock(Addr addr, bool is_secure) const { |