Simple CPU: Make sure only instructions which complete without faulting are counted.

--HG--
extra : convert_revision : 01019c7129ed762d8826c3e6519989aa3fc3b5fd
This commit is contained in:
Gabe Black 2007-08-26 20:25:42 -07:00
parent 537239b278
commit e056e49c45
4 changed files with 27 additions and 6 deletions

View file

@ -546,6 +546,11 @@ AtomicSimpleCPU::tick()
if(curStaticInst)
{
fault = curStaticInst->execute(this, traceData);
// keep an instruction count
if (fault == NoFault)
countInst();
postExecute();
}

View file

@ -357,12 +357,6 @@ BaseSimpleCPU::preExecute()
thread->setFloatReg(ZeroReg, 0.0);
#endif // ALPHA_ISA
// keep an instruction count
numInst++;
numInsts++;
thread->funcExeInst++;
// check for instruction-count-based events
comInstEventQueue[0]->serviceEvents(numInst);

View file

@ -157,6 +157,14 @@ class BaseSimpleCPU : public BaseCPU
Counter startNumInst;
Stats::Scalar<> numInsts;
void countInst()
{
numInst++;
numInsts++;
thread->funcExeInst++;
}
virtual Counter totalInstructions() const
{
return numInst - startNumInst;

View file

@ -540,13 +540,23 @@ TimingSimpleCPU::completeIfetch(PacketPtr pkt)
delete dcache_pkt->req;
delete dcache_pkt;
dcache_pkt = NULL;
// keep an instruction count
if (fault == NoFault)
countInst();
}
postExecute();
advanceInst(fault);
}
} else {
// non-memory instruction: execute completely now
Fault fault = curStaticInst->execute(this, traceData);
// keep an instruction count
if (fault == NoFault)
countInst();
postExecute();
advanceInst(fault);
}
@ -615,6 +625,10 @@ TimingSimpleCPU::completeDataAccess(PacketPtr pkt)
Fault fault = curStaticInst->completeAcc(pkt, this, traceData);
// keep an instruction count
if (fault == NoFault)
countInst();
if (pkt->isRead() && pkt->isLocked()) {
TheISA::handleLockedRead(thread, pkt->req);
}