33c33
< #include "debug/CacheRepl.hh"
---
> #include <memory>
40,41c40,42
< CacheBlk*
< FIFORP::getVictim(const ReplacementCandidates& candidates)
---
> void
> FIFORP::invalidate(const std::shared_ptr<ReplacementData>& replacement_data)
> const
42a44,65
> // Reset insertion tick
> std::static_pointer_cast<FIFOReplData>(
> replacement_data)->tickInserted = Tick(0);
> }
>
> void
> FIFORP::touch(const std::shared_ptr<ReplacementData>& replacement_data) const
> {
> // A touch does not modify the insertion tick
> }
>
> void
> FIFORP::reset(const std::shared_ptr<ReplacementData>& replacement_data) const
> {
> // Set insertion tick
> std::static_pointer_cast<FIFOReplData>(
> replacement_data)->tickInserted = curTick();
> }
>
> ReplaceableEntry*
> FIFORP::getVictim(const ReplacementCandidates& candidates) const
> {
47c70
< CacheBlk* blk = candidates[0];
---
> ReplaceableEntry* victim = candidates[0];
49,55c72,77
< // Stop iteration if found an invalid block
< if (!candidate->isValid()) {
< blk = candidate;
< break;
< // Update victim block if necessary
< } else if (candidate->tickInserted < blk->tickInserted) {
< blk = candidate;
---
> // Update victim entry if necessary
> if (std::static_pointer_cast<FIFOReplData>(
> candidate->replacementData)->tickInserted <
> std::static_pointer_cast<FIFOReplData>(
> victim->replacementData)->tickInserted) {
> victim = candidate;
59,60c81,82
< DPRINTF(CacheRepl, "set %x, way %x: selecting blk for replacement\n",
< blk->set, blk->way);
---
> return victim;
> }
62c84,87
< return blk;
---
> std::shared_ptr<ReplacementData>
> FIFORP::instantiateEntry()
> {
> return std::shared_ptr<ReplacementData>(new FIFOReplData());