cpu: Fix bi-mode branch predictor thresholds
[gem5.git] / src / cpu / pred / bi_mode.hh
index a412d63cf59135d1153f46409b27f798ca1529d2..7b091d111c169bbb530a71e1a5a46b9141084309 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "cpu/pred/bpred_unit.hh"
 #include "cpu/pred/sat_counter.hh"
+#include "params/BiModeBP.hh"
 
 /**
  * Implements a bi-mode branch predictor. The bi-mode predictor is a two-level
 class BiModeBP : public BPredUnit
 {
   public:
-    BiModeBP(const Params *params);
-    void uncondBranch(void * &bp_history);
-    void squash(void *bp_history);
-    bool lookup(Addr branch_addr, void * &bp_history);
-    void btbUpdate(Addr branch_addr, void * &bp_history);
-    void update(Addr branch_addr, bool taken, void *bp_history, bool squashed);
-    void retireSquashed(void *bp_history);
+    BiModeBP(const BiModeBPParams *params);
+    void uncondBranch(ThreadID tid, Addr pc, void * &bp_history);
+    void squash(ThreadID tid, void *bp_history);
+    bool lookup(ThreadID tid, Addr branch_addr, void * &bp_history);
+    void btbUpdate(ThreadID tid, Addr branch_addr, void * &bp_history);
+    void update(ThreadID tid, Addr branch_addr, bool taken, void *bp_history,
+                bool squashed);
+    unsigned getGHR(ThreadID tid, void *bp_history) const;
 
   private:
-    void updateGlobalHistReg(bool taken);
+    void updateGlobalHistReg(ThreadID tid, bool taken);
 
     struct BPHistory {
         unsigned globalHistoryReg;
@@ -93,9 +95,7 @@ class BiModeBP : public BPredUnit
     // not-taken direction predictors
     std::vector<SatCounter> notTakenCounters;
 
-    unsigned instShiftAmt;
-
-    unsigned globalHistoryReg;
+    std::vector<unsigned> globalHistoryReg;
     unsigned globalHistoryBits;
     unsigned historyRegisterMask;