sort of ...
if(instr == NULL) {
throw string("Out of Instructions!");
}
+ this->incPerf();
if(this->conditionMet(instr->getCondition())) {
cout << "Executing: " << instr->toString() << endl;
instr->execInstr();
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)
{
}
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;
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);
}
}
+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();
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);