summaryrefslogtreecommitdiff
path: root/src/cpu/o3/iew_impl.hh
diff options
context:
space:
mode:
authorRadhika Jagtap <radhika.jagtap@ARM.com>2015-12-07 16:42:15 -0600
committerRadhika Jagtap <radhika.jagtap@ARM.com>2015-12-07 16:42:15 -0600
commiteb19fc29761a99ff7d5a5e4588866b487a2082ee (patch)
tree0d0caae1d24eb8e3bf7d7c34eadd7810e0106cae /src/cpu/o3/iew_impl.hh
parentbbcbe028fe904ec3f48b39e02c4a8fbc6f438699 (diff)
downloadgem5-eb19fc29761a99ff7d5a5e4588866b487a2082ee.tar.xz
probe: Add probe in Fetch, IEW, Rename and Commit
This patch adds probe points in Fetch, IEW, Rename and Commit stages as follows. A probe point is added in the Fetch stage for probing when a fetch request is sent. Notify is fired on the probe point when a request is sent succesfully in the first attempt as well as on a retry attempt. Probe points are added in the IEW stage when an instruction begins to execute and when execution is complete. This points can be used for monitoring the execution time of an instruction. Probe points are added in the Rename stage to probe renaming of source and destination registers and when there is squashing. These probe points can be used to track register dependencies and remove when there is squashing. A probe point for squashing is added in Commit to probe squashed instructions.
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.