summaryrefslogtreecommitdiff
path: root/src/cpu/o3/lsq_unit_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/lsq_unit_impl.hh
parent18a05d4cbf5f6ba96cbdbf748d40b1110e8e0a7a (diff)
downloadgem5-784dfab4de621562b4032e79c0d2085edda7e203.tar.xz
track instruction after tainted branches
Diffstat (limited to 'src/cpu/o3/lsq_unit_impl.hh')
-rw-r--r--src/cpu/o3/lsq_unit_impl.hh12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh
index 79d913175..a45048ff9 100644
--- a/src/cpu/o3/lsq_unit_impl.hh
+++ b/src/cpu/o3/lsq_unit_impl.hh
@@ -1059,7 +1059,17 @@ LSQUnit<Impl>::updateVisibleState()
/* if the load depends on tainted registers, set
readyToExpose to false, otherwise set it to true
*/
- bool doSpecLoad = inst->needPostFetch() || inst->srcTainted();
+ bool doSpecLoad = false;
+ if (inst->needPostFetch()) {
+ doSpecLoad = true;
+ DPRINTF(LSQUnit, "load inst [sn:%lli] %s needs post fetch.\n", inst->seqNum, inst->pcState());
+ } else if (inst->afterTaintedBranch) {
+ doSpecLoad = true;
+ DPRINTF(LSQUnit, "load inst [sn:%lli] %s is after a tainted branch.\n", inst->seqNum, inst->pcState());
+ } else if (inst->srcTainted()) {
+ doSpecLoad = true;
+ DPRINTF(LSQUnit, "source registers of load inst [sn:%lli] %s is tainted.\n", inst->seqNum, inst->pcState());
+ }
if (doSpecLoad) {
DPRINTF(LSQUnit, "load inst [sn:%lli] %s not safe, set readyToExpose to false\n", inst->seqNum, inst->pcState());
inst->readyToExpose(false);