cpu: Fix bi-mode branch predictor thresholds
authorRico Amslinger <rico.amslinger@informatik.uni-augsburg.de>
Thu, 24 Aug 2017 13:07:44 +0000 (15:07 +0200)
committerRico Amslinger <rico.amslinger@informatik.uni-augsburg.de>
Wed, 6 Sep 2017 07:39:11 +0000 (07:39 +0000)
When different sizes were set for the choice and global saturation
counter (e.g. ex5_big), the threshold calculation used the wrong
size. Thus the branch predictor always predicted "not taken" for
choice > global.

Change-Id: I076549ff1482e2280cef24a0d16b7bb2122d4110
Reviewed-on: https://gem5-review.googlesource.com/4560
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/cpu/pred/bi_mode.cc

index 69af4584a8254ed1c82e3ed9a4b3d9d5ce9c622d..e8fda7387a997b8e5aebf48fb7fe025fb57ae9f1 100644 (file)
@@ -68,8 +68,8 @@ BiModeBP::BiModeBP(const BiModeBPParams *params)
     globalHistoryMask = globalPredictorSize - 1;
 
     choiceThreshold = (ULL(1) << (choiceCtrBits - 1)) - 1;
-    takenThreshold = (ULL(1) << (choiceCtrBits - 1)) - 1;
-    notTakenThreshold = (ULL(1) << (choiceCtrBits - 1)) - 1;
+    takenThreshold = (ULL(1) << (globalCtrBits - 1)) - 1;
+    notTakenThreshold = (ULL(1) << (globalCtrBits - 1)) - 1;
 }
 
 /*