cpu: Implement per-thread GHRs

Branch predictors that use GHRs should index them on a
per-thread basis.  This makes that so.

This is a re-spin of fb51231 after the revert (bd1c6789).
This commit is contained in:
Mitch Hayenga
2016-04-05 12:20:19 -05:00
parent 0fd4bb7f12
commit d99deff8ea
8 changed files with 110 additions and 108 deletions

View File

@@ -57,16 +57,17 @@ class BiModeBP : public BPredUnit
{
public:
BiModeBP(const BiModeBPParams *params);
void uncondBranch(Addr pc, 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);
unsigned getGHR(void *bp_history) const;
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);
void retireSquashed(ThreadID tid, void *bp_history);
unsigned getGHR(ThreadID tid, void *bp_history) const;
private:
void updateGlobalHistReg(bool taken);
void updateGlobalHistReg(ThreadID tid, bool taken);
struct BPHistory {
unsigned globalHistoryReg;
@@ -95,7 +96,7 @@ class BiModeBP : public BPredUnit
// not-taken direction predictors
std::vector<SatCounter> notTakenCounters;
unsigned globalHistoryReg;
std::vector<unsigned> globalHistoryReg;
unsigned globalHistoryBits;
unsigned historyRegisterMask;