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:
Kevin Lim 2006-10-08 00:55:05 -04:00
parent d48ea81ba2
commit b17421da20
2 changed files with 31 additions and 0 deletions

View file

@ -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();

View file

@ -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);