summaryrefslogtreecommitdiff
path: root/src/cpu/o3/iew_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/iew_impl.hh')
-rw-r--r--src/cpu/o3/iew_impl.hh19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/cpu/o3/iew_impl.hh b/src/cpu/o3/iew_impl.hh
index ae76aa9e1..e02429b14 100644
--- a/src/cpu/o3/iew_impl.hh
+++ b/src/cpu/o3/iew_impl.hh
@@ -125,6 +125,18 @@ DefaultIEW<Impl>::regProbePoints()
{
ppDispatch = new ProbePointArg<DynInstPtr>(cpu->getProbeManager(), "Dispatch");
ppMispredict = new ProbePointArg<DynInstPtr>(cpu->getProbeManager(), "Mispredict");
+ /**
+ * Probe point with dynamic instruction as the argument used to probe when
+ * an instruction starts to execute.
+ */
+ ppExecute = new ProbePointArg<DynInstPtr>(cpu->getProbeManager(),
+ "Execute");
+ /**
+ * Probe point with dynamic instruction as the argument used to probe when
+ * an instruction execution completes and it is marked ready to commit.
+ */
+ ppToCommit = new ProbePointArg<DynInstPtr>(cpu->getProbeManager(),
+ "ToCommit");
}
template <class Impl>
@@ -1190,6 +1202,10 @@ DefaultIEW<Impl>::executeInsts()
DPRINTF(IEW, "Execute: Processing PC %s, [tid:%i] [sn:%i].\n",
inst->pcState(), inst->threadNumber,inst->seqNum);
+ // Notify potential listeners that this instruction has started
+ // executing
+ ppExecute->notify(inst);
+
// Check if the instruction is squashed; if so then skip it
if (inst->isSquashed()) {
DPRINTF(IEW, "Execute: Instruction was squashed. PC: %s, [tid:%i]"
@@ -1402,6 +1418,9 @@ DefaultIEW<Impl>::writebackInsts()
inst->seqNum, inst->pcState());
iewInstsToCommit[tid]++;
+ // Notify potential listeners that execution is complete for this
+ // instruction.
+ ppToCommit->notify(inst);
// Some instructions will be sent to commit without having
// executed because they need commit to handle them.