diff --git a/src/cpu/pred/statistical_corrector.cc b/src/cpu/pred/statistical_corrector.cc index 8ddae9be23..3059595040 100644 --- a/src/cpu/pred/statistical_corrector.cc +++ b/src/cpu/pred/statistical_corrector.cc @@ -65,7 +65,8 @@ extraWeightsWidth(p->extraWeightsWidth), scCountersWidth(p->scCountersWidth), firstH(0), - secondH(0) + secondH(0), + stats(this) { wb.resize(1 << logSizeUps, 4); @@ -376,9 +377,9 @@ void StatisticalCorrector::updateStats(bool taken, BranchInfo *bi) { if (taken == bi->scPred) { - scPredictorCorrect++; + stats.correct++; } else { - scPredictorWrong++; + stats.wrong++; } } @@ -396,16 +397,12 @@ StatisticalCorrector::getSizeInBits() const return 0; } -void -StatisticalCorrector::regStats() +StatisticalCorrector::StatisticalCorrectorStats::StatisticalCorrectorStats( + Stats::Group *parent) + : Stats::Group(parent), + ADD_STAT(correct, "Number of time the SC predictor is the" + " provider and the prediction is correct"), + ADD_STAT(wrong, "Number of time the SC predictor is the" + " provider and the prediction is wrong") { - scPredictorCorrect - .name(name() + ".scPredictorCorrect") - .desc("Number of time the SC predictor is the provider and " - "the prediction is correct"); - - scPredictorWrong - .name(name() + ".scPredictorWrong") - .desc("Number of time the SC predictor is the provider and " - "the prediction is wrong"); } diff --git a/src/cpu/pred/statistical_corrector.hh b/src/cpu/pred/statistical_corrector.hh index 2e8e502403..b61f0d8fec 100644 --- a/src/cpu/pred/statistical_corrector.hh +++ b/src/cpu/pred/statistical_corrector.hh @@ -182,9 +182,12 @@ class StatisticalCorrector : public SimObject int8_t firstH; int8_t secondH; - // stats - Stats::Scalar scPredictorCorrect; - Stats::Scalar scPredictorWrong; + struct StatisticalCorrectorStats : public Stats::Group { + StatisticalCorrectorStats(Stats::Group *parent); + Stats::Scalar correct; + Stats::Scalar wrong; + } stats; + public: struct BranchInfo { @@ -260,7 +263,6 @@ class StatisticalCorrector : public SimObject int64_t phist) = 0; void init() override; - void regStats() override; void updateStats(bool taken, BranchInfo *bi); virtual void condBranchUpdate(ThreadID tid, Addr branch_pc, bool taken,