summaryrefslogtreecommitdiff
path: root/src/cpu/pred/bi_mode.hh
diff options
context:
space:
mode:
authorCurtis Dunham <Curtis.Dunham@arm.com>2016-04-05 12:20:19 -0500
committerCurtis Dunham <Curtis.Dunham@arm.com>2016-04-05 12:20:19 -0500
commit76ee011a12ade238d5cbf4b570e1d34d7ba72687 (patch)
tree7254ed0fcc8545103fd197460acc89d75289814e /src/cpu/pred/bi_mode.hh
parent1578d2d0b66d995684cee77b3fe527ed0493d41c (diff)
downloadgem5-76ee011a12ade238d5cbf4b570e1d34d7ba72687.tar.xz
cpu: Implement per-thread GHRs
Branch predictors that use GHRs should index them on a per-thread basis. This makes that so.
Diffstat (limited to 'src/cpu/pred/bi_mode.hh')
-rw-r--r--src/cpu/pred/bi_mode.hh19
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;