Record numCycles properly.
src/cpu/simple/timing.cc: Record numCycles stat properly. src/cpu/simple/timing.hh: Extra variable to help record numCycles stat. --HG-- extra : convert_revision : 343311902831820264878aad41dc619999726b6b
This commit is contained in:
parent
d48ea81ba2
commit
b17421da20
2 changed files with 31 additions and 0 deletions
|
@ -100,6 +100,7 @@ TimingSimpleCPU::TimingSimpleCPU(Params *p)
|
|||
ifetch_pkt = dcache_pkt = NULL;
|
||||
drainEvent = NULL;
|
||||
fetchEvent = NULL;
|
||||
previousTick = 0;
|
||||
changeState(SimObject::Running);
|
||||
}
|
||||
|
||||
|
@ -158,6 +159,7 @@ TimingSimpleCPU::resume()
|
|||
|
||||
assert(system->getMemoryMode() == System::Timing);
|
||||
changeState(SimObject::Running);
|
||||
previousTick = curTick;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -165,6 +167,7 @@ TimingSimpleCPU::switchOut()
|
|||
{
|
||||
assert(status() == Running || status() == Idle);
|
||||
_status = SwitchedOut;
|
||||
numCycles += curTick - previousTick;
|
||||
|
||||
// If we've been scheduled to resume but are then told to switch out,
|
||||
// we'll need to cancel it.
|
||||
|
@ -187,6 +190,23 @@ TimingSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Port *peer;
|
||||
if (icachePort.getPeer() == NULL) {
|
||||
peer = oldCPU->getPort("icachePort")->getPeer();
|
||||
icachePort.setPeer(peer);
|
||||
} else {
|
||||
peer = icachePort.getPeer();
|
||||
}
|
||||
peer->setPeer(&icachePort);
|
||||
|
||||
if (dcachePort.getPeer() == NULL) {
|
||||
peer = oldCPU->getPort("dcachePort")->getPeer();
|
||||
dcachePort.setPeer(peer);
|
||||
} else {
|
||||
peer = dcachePort.getPeer();
|
||||
}
|
||||
peer->setPeer(&dcachePort);
|
||||
}
|
||||
|
||||
|
||||
|
@ -414,6 +434,9 @@ TimingSimpleCPU::fetch()
|
|||
// fetch fault: advance directly to next instruction (fault handler)
|
||||
advanceInst(fault);
|
||||
}
|
||||
|
||||
numCycles += curTick - previousTick;
|
||||
previousTick = curTick;
|
||||
}
|
||||
|
||||
|
||||
|
@ -444,6 +467,9 @@ TimingSimpleCPU::completeIfetch(Packet *pkt)
|
|||
delete pkt->req;
|
||||
delete pkt;
|
||||
|
||||
numCycles += curTick - previousTick;
|
||||
previousTick = curTick;
|
||||
|
||||
if (getState() == SimObject::Draining) {
|
||||
completeDrain();
|
||||
return;
|
||||
|
@ -516,6 +542,9 @@ TimingSimpleCPU::completeDataAccess(Packet *pkt)
|
|||
assert(_status == DcacheWaitResponse);
|
||||
_status = Running;
|
||||
|
||||
numCycles += curTick - previousTick;
|
||||
previousTick = curTick;
|
||||
|
||||
if (getState() == SimObject::Draining) {
|
||||
completeDrain();
|
||||
|
||||
|
|
|
@ -166,6 +166,8 @@ class TimingSimpleCPU : public BaseSimpleCPU
|
|||
Packet *ifetch_pkt;
|
||||
Packet *dcache_pkt;
|
||||
|
||||
Tick previousTick;
|
||||
|
||||
public:
|
||||
|
||||
virtual Port *getPort(const std::string &if_name, int idx = -1);
|
||||
|
|
Loading…
Reference in a new issue