#include #include #include #include "asm.hpp" namespace { std::map instructions = { {"lb", {}}, {"lh", {}}, {"lw", {}}, {"ld", {}}, {"lbu", {}}, {"lhu", {}}, {"lwu", {}}, {"sb", {}}, {"sh", {}}, {"sw", {}}, {"sd", {}}, {"li", {}}, {"lui", {}}, {"auipc", {}}, {"mv", {}}, {"sext.b", {}}, {"sext.h", {}}, {"sext.w", {}}, {"zext.b", {}}, {"zext.h", {}}, {"zext.w", {}}, {"rev8", {}}, {"czero.eqz", {}}, {"czero.nez", {}}, {"addi", {}}, {"add", {}}, {"sh1add", {}}, {"sh2add", {}}, {"sh3add", {}}, {"add.wu", {}}, {"sh1add.wu", {}}, {"sh2add.wu", {}}, {"sh3add.wu", {}}, {"addiw", {}}, {"addw", {}}, {"sub", {}}, {"subw", {}}, {"neg", {}}, {"negw", {}}, {"mul", {}}, {"mulw", {}}, {"mulh", {}}, {"mulhu", {}}, {"mulhsu", {}}, {"div", {}}, {"divu", {}}, {"rem", {}}, {"remu", {}}, {"min", {}}, {"max", {}}, {"minu", {}}, {"maxu", {}}, {"seqz", {}}, {"snez", {}}, {"slti", {}}, {"slt", {}}, {"sltiu", {}}, {"sltu", {}}, {"bexti", {}}, {"bext", {}}, {"andi", {}}, {"and", {}}, {"andn", {}}, {"bclri", {}}, {"bclr", {}}, {"ori", {}}, {"or", {}}, {"orn", {}}, {"bseti", {}}, {"bset", {}}, {"xori", {}}, {"xor", {}}, {"xnor", {}}, {"binvi", {}}, {"binv", {}}, {"not", {}}, {"orc.b", {}}, {"slli", {}}, {"sll", {}}, {"slliw", {}}, {"sllw", {}}, {"slli.wu", {}}, {"srli", {}}, {"srl", {}}, {"srliw", {}}, {"srlw", {}}, {"srai", {}}, {"sra", {}}, {"sraiw", {}}, {"sraw", {}}, {"rori", {}}, {"ror", {}}, {"rol", {}}, {"roriw", {}}, {"rorw", {}}, {"rolw", {}}, {"clz", {}}, {"clzw", {}}, {"ctz", {}}, {"ctzw", {}}, {"cpop", {}}, {"cpopw", {}}, {"j", {}}, {"jal", {}}, {"jr", {}}, {"jalr", {}}, {"call", {}}, {"tail", {}}, {"ret", {}}, {"beq", {}}, {"bne", {}}, {"blt", {}}, {"bgt", {}}, {"bge", {}}, {"ble", {}}, {"bltu", {}}, {"bgtu", {}}, {"bgeu", {}}, {"bleu", {}}, {"nop", {}}, {"ecall", {}}, {"ebreak", {}}, }; std::map registers = { {"x0", 0}, {"x1", 1}, {"x2", 2}, {"x3", 3}, {"x4", 4}, {"x5", 5}, {"x6", 6}, {"x7", 7}, {"x8", 8}, {"x9", 9}, {"x10", 10}, {"x11", 11}, {"x12", 12}, {"x13", 13}, {"x14", 14}, {"x15", 15}, {"x16", 16}, {"x17", 17}, {"x18", 18}, {"x19", 19}, {"x20", 20}, {"x21", 21}, {"x22", 22}, {"x23", 23}, {"x24", 24}, {"x25", 25}, {"x26", 26}, {"x27", 27}, {"x28", 28}, {"x29", 29}, {"x30", 30}, {"x31", 31}, {"zero", 0}, {"ra", 1}, {"sp", 2}, {"gp", 3}, {"tp", 4}, {"t0", 5}, {"t1", 6}, {"t2", 7}, {"s0", 8}, {"fp", 8}, {"s1", 9}, {"a0", 10}, {"a1", 11}, {"a2", 12}, {"a3", 13}, {"a4", 14}, {"a5", 15}, {"a6", 16}, {"a7", 17}, {"s2", 18}, {"s3", 19}, {"s4", 20}, {"s5", 21}, {"s6", 22}, {"s7", 23}, {"s8", 24}, {"s9", 25}, {"s10", 26}, {"s11", 27}, {"t3", 28}, {"t4", 29}, {"t5", 30}, {"t6", 31}, }; } // namespace