diff options
Diffstat (limited to 'src/cpu/o3/rob_impl.hh')
-rw-r--r-- | src/cpu/o3/rob_impl.hh | 16 |
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; |