diff options
Diffstat (limited to 'src/cpu/o3/lsq_unit_impl.hh')
-rw-r--r-- | src/cpu/o3/lsq_unit_impl.hh | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh index 7462d4c84..14256e382 100644 --- a/src/cpu/o3/lsq_unit_impl.hh +++ b/src/cpu/o3/lsq_unit_impl.hh @@ -1043,6 +1043,7 @@ LSQUnit<Impl>::updateVisibleState() } inst->readyToExpose(true); }else { +#if 0 /* now an untainted USL can be safe */ if (inst->readyToExpose()){ DPRINTF(LSQUnit, "The load can not be validated " "[sn:%lli] PC %s\n", @@ -1050,7 +1051,19 @@ LSQUnit<Impl>::updateVisibleState() assert(0); //--loadsToVLD; } - inst->readyToExpose(false); +#endif + /* set taint for dst registers */ + inst->taintDestRegs(); + /* if the load depends on tainted registers, set + readyToExpose to false, otherwise set it to true + */ + if (inst->srcTainted()) { + DPRINTF(LSQUnit, "load inst [sn:%lli] %s not safe, set readyToExpose to false\n", inst->seqNum, inst->pcState()); + inst->readyToExpose(false); + } else { + DPRINTF(LSQUnit, "load inst [sn:%lli] %s is an unsafe speculated load, but source registers are not tainted.\n", inst->seqNum, inst->pcState()); + inst->readyToExpose(true); + } } inst->fenceDelay(false); } else { |