sim: added performance counter
authorMartin Perner <martin@perner.cc>
Tue, 9 Nov 2010 16:42:25 +0000 (17:42 +0100)
committerMartin Perner <martin@perner.cc>
Tue, 9 Nov 2010 16:42:25 +0000 (17:42 +0100)
sort of ...

3b_sim/ccpu.cpp
3b_sim/ccpu.hpp
3b_sim/sim.cpp

index abeeafd607c912e01402a9d889871895fe6bee49..5f533ce42c546860fd22e9f99d63ae77d371f2b8 100644 (file)
@@ -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)
 {
 }
 
index 86940a29f1f8743bbae2eb3aa923befbfd709365..ebe15f91c24cf03d14e88dd83e308d8c6cfd1847 100644 (file)
@@ -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<CDat> m_reg, m_ram;
                CPMem<Iinstr*> 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);
index 1fd383403321a016e2ac7db23f9f6404be438609..4896f0120b57ecb591ffdaab07bfddb788f3b3df 100644 (file)
@@ -394,6 +394,17 @@ void listBreaks(const vector<string>&)
        }
 }
 
+void getPerf(const vector<string>&)
+{
+       cout << "current perfcounter is " << std::dec << global_cpu->getPerf() << endl;
+}
+
+void resetPerf(const vector<string>&)
+{
+       cout << "reset perfcounter" << endl;
+       global_cpu->setPerf(0);
+}
+
 void printStatus(const vector<string>&)
 {
        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);