#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;
// not-taken direction predictors
std::vector<SatCounter> notTakenCounters;
- unsigned instShiftAmt;
-
- unsigned globalHistoryReg;
+ std::vector<unsigned> globalHistoryReg;
unsigned globalHistoryBits;
unsigned historyRegisterMask;