cpu: Added a probe to notify the address of retired instructions

A probe is added to notify the address of each retired instruction.

Change-Id: Iefc1b09d74b3aa0aa5773b17ba637bf51f5a59c9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17632
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
Javier Bueno
2019-03-26 23:12:00 +01:00
committed by Javier Bueno Hedo
parent cbaae54782
commit 1a27580e3b
5 changed files with 11 additions and 7 deletions

View File

@@ -391,6 +391,7 @@ BaseCPU::regProbePoints()
ppActiveCycles = pmuProbePoint("ActiveCycles");
ppRetiredInsts = pmuProbePoint("RetiredInsts");
ppRetiredInstsPC = pmuProbePoint("RetiredInstsPC");
ppRetiredLoads = pmuProbePoint("RetiredLoads");
ppRetiredStores = pmuProbePoint("RetiredStores");
ppRetiredBranches = pmuProbePoint("RetiredBranches");
@@ -400,11 +401,12 @@ BaseCPU::regProbePoints()
}
void
BaseCPU::probeInstCommit(const StaticInstPtr &inst)
BaseCPU::probeInstCommit(const StaticInstPtr &inst, Addr pc)
{
if (!inst->isMicroop() || inst->isLastMicroop())
if (!inst->isMicroop() || inst->isLastMicroop()) {
ppRetiredInsts->notify(1);
ppRetiredInstsPC->notify(pc);
}
if (inst->isLoad())
ppRetiredLoads->notify(1);

View File

@@ -487,8 +487,9 @@ class BaseCPU : public MemObject
* instruction.
*
* @param inst Instruction that just committed
* @param pc PC of the instruction that just committed
*/
virtual void probeInstCommit(const StaticInstPtr &inst);
virtual void probeInstCommit(const StaticInstPtr &inst, Addr pc);
protected:
/**
@@ -509,6 +510,7 @@ class BaseCPU : public MemObject
* instructions may call notify once for the entire bundle.
*/
ProbePoints::PMUUPtr ppRetiredInsts;
ProbePoints::PMUUPtr ppRetiredInstsPC;
/** Retired load instructions */
ProbePoints::PMUUPtr ppRetiredLoads;

View File

@@ -872,7 +872,7 @@ Execute::doInstCommitAccounting(MinorDynInstPtr inst)
if (inst->traceData)
inst->traceData->setCPSeq(thread->numOp);
cpu.probeInstCommit(inst->staticInst);
cpu.probeInstCommit(inst->staticInst, inst->pc.instAddr());
}
bool

View File

@@ -1623,7 +1623,7 @@ FullO3CPU<Impl>::instDone(ThreadID tid, const DynInstPtr &inst)
thread[tid]->numOps++;
committedOps[tid]++;
probeInstCommit(inst->staticInst);
probeInstCommit(inst->staticInst, inst->instAddr());
}
template <class Impl>

View File

@@ -661,7 +661,7 @@ BaseSimpleCPU::postExecute()
}
// Call CPU instruction commit probes
probeInstCommit(curStaticInst);
probeInstCommit(curStaticInst, instAddr);
}
void