summaryrefslogtreecommitdiff
path: root/src/cpu/o3/rename_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/rename_impl.hh')
-rw-r--r--src/cpu/o3/rename_impl.hh19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/cpu/o3/rename_impl.hh b/src/cpu/o3/rename_impl.hh
index 43b7ba9aa..b19b3414c 100644
--- a/src/cpu/o3/rename_impl.hh
+++ b/src/cpu/o3/rename_impl.hh
@@ -186,6 +186,15 @@ DefaultRename<Impl>::regStats()
template <class Impl>
void
+DefaultRename<Impl>::regProbePoints()
+{
+ ppRename = new ProbePointArg<DynInstPtr>(cpu->getProbeManager(), "Rename");
+ ppSquashInRename = new ProbePointArg<SeqNumRegPair>(cpu->getProbeManager(),
+ "SquashInRename");
+}
+
+template <class Impl>
+void
DefaultRename<Impl>::setTimeBuffer(TimeBuffer<TimeStruct> *tb_ptr)
{
timeBuffer = tb_ptr;
@@ -697,7 +706,9 @@ DefaultRename<Impl>::renameInsts(ThreadID tid)
storesInProgress[tid]++;
}
++renamed_insts;
-
+ // Notify potential listeners that source and destination registers for
+ // this instruction have been renamed.
+ ppRename->notify(inst);
// Put instruction in rename queue.
toIEW->insts[toIEWIndex] = inst;
@@ -929,6 +940,12 @@ DefaultRename<Impl>::doSquash(const InstSeqNum &squashed_seq_num, ThreadID tid)
freeList->addReg(hb_it->newPhysReg);
}
+ // Notify potential listeners that the register mapping needs to be
+ // removed because the instruction it was mapped to got squashed. Note
+ // that this is done before hb_it is incremented.
+ ppSquashInRename->notify(std::make_pair(hb_it->instSeqNum,
+ hb_it->newPhysReg));
+
historyBuffer[tid].erase(hb_it++);
++renameUndoneMaps;