#include #include #include #include #ifndef INSTHANDLER_H #define INSTHANDLER_H typedef struct { uint64_t lineNumber; std::vector tokens; uint32_t loc; bool usesLabel; uint32_t hex; //xstd::string comment; } inst_t; typedef struct { std::string name; uint32_t loc; } label_t; class InstHandler { private: typedef std::function lf_t; std::smatch matches; std::map funcMap; std::vector* labels; int handleLD(inst_t* inst); int handleLfD(inst_t* inst); int handleSD(inst_t* inst); int handleSfD(inst_t* inst); int handleDADDI(inst_t* inst); int handleDADDIU(inst_t* inst); int handleBEQ(inst_t* inst); int handleBNE(inst_t* inst); int handleDADD(inst_t* inst); int handleDSUB(inst_t* inst); int handleADDfD(inst_t* inst); int handleSUBfD(inst_t* inst); int handleMULfD(inst_t* inst); int handleDIVfD(inst_t* inst); int handleJ(inst_t* inst); int handleHALT(inst_t* inst); int handleNOP(inst_t* inst); int handleDUMP(inst_t* inst); int parseRegister(std::string arg, uint32_t& reg); int parseFPRegister(std::string arg, uint32_t& reg); int parseImmediate(std::string arg, uint32_t& imm, bool isDump); int parseImmediateJump(std::string arg, uint32_t& imm); int parseImmediateBranch(std::string arg, uint32_t& imm, uint32_t icount); public: InstHandler(std::vector* labels_); int handle(inst_t* inst); uint32_t findLabel(std::string l); }; #endif