diff options
author | Mitch Hayenga <mitch.hayenga@arm.com> | 2016-04-05 12:20:19 -0500 |
---|---|---|
committer | Mitch Hayenga <mitch.hayenga@arm.com> | 2016-04-05 12:20:19 -0500 |
commit | d99deff8ea296fd28b48da08aba577a1e7dfc01b (patch) | |
tree | bb8645f94f33b45b040776e5e0dd0a0d8edb306f /src/cpu/pred/bi_mode.hh | |
parent | 0fd4bb7f12d8a633f3ff0abe61d4f3a78bca6f84 (diff) | |
download | gem5-d99deff8ea296fd28b48da08aba577a1e7dfc01b.tar.xz |
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).
Diffstat (limited to 'src/cpu/pred/bi_mode.hh')
-rw-r--r-- | src/cpu/pred/bi_mode.hh | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/cpu/pred/bi_mode.hh b/src/cpu/pred/bi_mode.hh index 120a6ffd9..96b3b2ef7 100644 --- a/src/cpu/pred/bi_mode.hh +++ b/src/cpu/pred/bi_mode.hh @@ -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; |