#include "../Iinstr.hpp" class Cmovf : public Iinstr { private: bool m_type; public: Cmovf(); 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 Cmovf(); } Iinstr* Cmovf::getNew() { return new Cmovf(); } /** * 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; } Cmovf::Cmovf() : m_type(0) { opcode = B5(01100); name = "movf"; } void Cmovf::evalInstr() { this->m_type = argbits[18]; if(this->m_type) { name = "movpf"; } else { name = "movsf"; } argbits >>= 19; m_rd = this->getRegister(argbits); } void Cmovf::execInstr() { //cout << "should exec " << this->toString() << endl; CDat val; if(this->m_type) { val = this->m_cpu->getFlags(); } else { val = this->m_cpu->getStack(); } this->m_cpu->setRegister(this->m_rd, val); } std::string Cmovf::toString() { stringstream op; op << this->getName(); op << " r" << m_rd; return op.str(); }