From: Martin Perner Date: Tue, 9 Nov 2010 16:42:25 +0000 (+0100) Subject: sim: added performance counter X-Git-Tag: bootrom_v1~167 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=5323485da487f6436f3f97971054e8b663778455 sim: added performance counter sort of ... --- diff --git a/3b_sim/ccpu.cpp b/3b_sim/ccpu.cpp index abeeafd..5f533ce 100644 --- a/3b_sim/ccpu.cpp +++ b/3b_sim/ccpu.cpp @@ -17,6 +17,7 @@ void CCpu::tick() if(instr == NULL) { throw string("Out of Instructions!"); } + this->incPerf(); if(this->conditionMet(instr->getCondition())) { cout << "Executing: " << instr->toString() << endl; instr->execInstr(); @@ -190,7 +191,23 @@ void CCpu::setStack(const int val) this->m_stack = val; } -CCpu::CCpu(int regs, int ram, int prog) : m_Z(false), m_S(false), m_C(false), m_O(false), m_pc(0), m_pc_next(0), m_reg(regs), m_ram(ram), m_prog(prog), m_stack(0) +CDat CCpu::getPerf() const +{ + return this->m_perf; +} + +void CCpu::setPerf(CDat val) +{ + this->m_perf = val; +} + +void CCpu::incPerf() +{ + this->m_perf++; +} + + +CCpu::CCpu(int regs, int ram, int prog) : m_Z(false), m_S(false), m_C(false), m_O(false), m_pc(0), m_pc_next(0), m_perf(0), m_reg(regs), m_ram(ram), m_prog(prog), m_stack(0) { } diff --git a/3b_sim/ccpu.hpp b/3b_sim/ccpu.hpp index 86940a2..ebe15f9 100644 --- a/3b_sim/ccpu.hpp +++ b/3b_sim/ccpu.hpp @@ -15,7 +15,7 @@ class CCpu { bool m_Z, m_S, m_C, m_O; - CDat m_pc, m_pc_next; + CDat m_pc, m_pc_next, m_perf; CMem m_reg, m_ram; CPMem m_prog; @@ -34,6 +34,10 @@ class CCpu { Iinstr* getProg(const int) const; void setProg(const int, Iinstr*); + CDat getPerf() const; + void setPerf(CDat); + void incPerf(); + CDat getCurPC() const; CDat getNextPC() const; void setNextPC(CDat); diff --git a/3b_sim/sim.cpp b/3b_sim/sim.cpp index 1fd3834..4896f01 100644 --- a/3b_sim/sim.cpp +++ b/3b_sim/sim.cpp @@ -394,6 +394,17 @@ void listBreaks(const vector&) } } +void getPerf(const vector&) +{ + cout << "current perfcounter is " << std::dec << global_cpu->getPerf() << endl; +} + +void resetPerf(const vector&) +{ + cout << "reset perfcounter" << endl; + global_cpu->setPerf(0); +} + void printStatus(const vector&) { CDat stackp = global_cpu->getStack(); @@ -606,6 +617,8 @@ int main(int argc, char* argv[]) Completers.push_back(CompleterElement("setreg [s] [num]",&setReg, "Sets Register s to num.")); Completers.push_back(CompleterElement("setdata [s] [num]",&setRam, "Sets RAM-Addr s to num.")); Completers.push_back(CompleterElement("status",&printStatus, "Prints status of CPU.")); + Completers.push_back(CompleterElement("getperf",&getPerf, "Prints performance counter.")); + Completers.push_back(CompleterElement("resetperf",&resetPerf, "Resets performance counter to 0.")); Reader.RegisterCompletions(Completers);