42c42
< maxRRPV(p->max_RRPV), hitPriority(p->hit_priority), btp(p->btp)
---
> numRRPVBits(p->num_bits), hitPriority(p->hit_priority), btp(p->btp)
44c44
< fatal_if(maxRRPV <= 0, "max_RRPV should be greater than zero.\n");
---
> fatal_if(numRRPVBits <= 0, "There should be at least one bit per RRPV.\n");
54,55c54,55
< // Set RRPV to an invalid distance
< casted_replacement_data->rrpv = maxRRPV + 1;
---
> // Invalidate entry
> casted_replacement_data->valid = false;
68,69c68,69
< casted_replacement_data->rrpv = 0;
< } else if (casted_replacement_data->rrpv > 0) {
---
> casted_replacement_data->rrpv.reset();
> } else {
82a83
> casted_replacement_data->rrpv.saturate();
84,86c85
< casted_replacement_data->rrpv = maxRRPV-1;
< } else {
< casted_replacement_data->rrpv = maxRRPV;
---
> casted_replacement_data->rrpv--;
87a87,89
>
> // Mark entry as ready to be used
> casted_replacement_data->valid = true;
105,107c107,109
< // Get candidate's rrpv
< int candidate_RRPV = std::static_pointer_cast<BRRIPReplData>(
< candidate->replacementData)->rrpv;
---
> std::shared_ptr<BRRIPReplData> candidate_repl_data =
> std::static_pointer_cast<BRRIPReplData>(
> candidate->replacementData);
110c112
< if (candidate_RRPV == maxRRPV + 1) {
---
> if (!candidate_repl_data->valid) {
111a114,115
> }
>
113c117,118
< } else if (candidate_RRPV > victim_RRPV) {
---
> int candidate_RRPV = candidate_repl_data->rrpv;
> if (candidate_RRPV > victim_RRPV) {
121c126,127
< int diff = maxRRPV - victim_RRPV;
---
> int diff = std::static_pointer_cast<BRRIPReplData>(
> victim->replacementData)->rrpv.saturate();
138c144
< return std::shared_ptr<ReplacementData>(new BRRIPReplData(maxRRPV));
---
> return std::shared_ptr<ReplacementData>(new BRRIPReplData(numRRPVBits));