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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user