summaryrefslogtreecommitdiff
path: root/src/cpu/o3/rob_impl.hh
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2019-04-16 17:41:19 +0800
committerIru Cai <mytbk920423@gmail.com>2019-04-16 22:15:12 +0800
commit784dfab4de621562b4032e79c0d2085edda7e203 (patch)
treeb4fbd4b4518112047f6a36ff573bc583c4e3a206 /src/cpu/o3/rob_impl.hh
parent18a05d4cbf5f6ba96cbdbf748d40b1110e8e0a7a (diff)
downloadgem5-784dfab4de621562b4032e79c0d2085edda7e203.tar.xz
track instruction after tainted branches
Diffstat (limited to 'src/cpu/o3/rob_impl.hh')
-rw-r--r--src/cpu/o3/rob_impl.hh16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/cpu/o3/rob_impl.hh b/src/cpu/o3/rob_impl.hh
index 093dd2840..b729a9d00 100644
--- a/src/cpu/o3/rob_impl.hh
+++ b/src/cpu/o3/rob_impl.hh
@@ -51,6 +51,7 @@
#include "debug/Fetch.hh"
#include "debug/ROB.hh"
#include "params/DerivO3CPU.hh"
+#include "debug/IFT.hh"
using namespace std;
@@ -429,6 +430,7 @@ ROB<Impl>::updateVisibleState()
bool prevBrsResolved=true;
bool prevInstsCommitted=true;
bool prevBrsCommitted=true;
+ bool prevBrsNotTainted=true;
while (inst_it != tail_inst_it) {
DynInstPtr inst = *inst_it++;
@@ -441,8 +443,15 @@ ROB<Impl>::updateVisibleState()
}
}
+ if (prevBrsNotTainted) {
+ inst->afterTaintedBranch = false;
+ DPRINTF(IFT, "Instruction PC: %s [sn:%lli] is not after a tainted branch.\n",
+ inst->pcState(), inst->seqNum);
+ }
+
if (!prevInstsComplete &&
- !prevBrsResolved) {
+ !prevBrsResolved &&
+ !prevBrsNotTainted) {
break;
}
@@ -468,6 +477,11 @@ ROB<Impl>::updateVisibleState()
|| inst->isSquashed()){
prevBrsResolved = false;
}
+ if (inst->isTainted) {
+ prevBrsNotTainted = false;
+ DPRINTF(IFT, "Instruction PC: %s [sn:%lli] is a tainted branch.\n",
+ inst->pcState(), inst->seqNum);
+ }
}
prevInstsCommitted = false;