#include "../Iinstr.hpp" class Cmovt : public Iinstr { private: bool m_type; public: Cmovt(); void evalInstr(); void execInstr(); std::string toString(); Iinstr* getNew(); }; /** * Name: create_instruction * Purpose: if compiled as shared library, this functions creates the instruction object * Returns: pointer to instruction object */ extern "C" Iinstr* create_instruction() { return new Cmovt(); } Iinstr* Cmovt::getNew() { return new Cmovt(); } /** * Name: destroy_instruction * Purpose: if compiled as shared library, this functions destoys the instruction object * Parameter: IInstruction - the instruction object to delete */ extern "C" void destroy_instruction(Iinstr* p) { delete p; } Cmovt::Cmovt() : m_type(0) { opcode = B5(01101); name = "movt"; } void Cmovt::evalInstr() { this->m_type = argbits[18]; if(this->m_type) { name = "movpt"; } else { name = "movst"; } argbits >>= 19; m_rd = this->getRegister(argbits); } void Cmovt::execInstr() { //cout << "should exec " << this->toString() << endl; CDat val = this->m_cpu->getRegister(this->m_rd); if(this->m_type) { this->m_cpu->setFlags(val); } else { this->m_cpu->setStack(val); } } std::string Cmovt::toString() { stringstream op; op << this->getName(); op << " r" << m_rd; return op.str(); }