diff options
-rw-r--r-- | spike_main/spike-dasm.cc | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/spike_main/spike-dasm.cc b/spike_main/spike-dasm.cc index 4ec9d35..8e0e20b 100644 --- a/spike_main/spike-dasm.cc +++ b/spike_main/spike-dasm.cc @@ -25,9 +25,26 @@ int main(int argc, char** argv) parser.option(0, "isa", 1, [&](const char* s){isa = s;}); parser.parse(argv); - processor_t p(isa, DEFAULT_PRIV, DEFAULT_VARCH, 0, 0); - if (extension) - p.register_extension(extension()); + std::string lowercase; + for (const char *p = isa; *p; p++) + lowercase += std::tolower(*p); + + int xlen; + if (lowercase.compare(0, 4, "rv32") == 0) { + xlen = 32; + } else if (lowercase.compare(0, 4, "rv64") == 0) { + xlen = 64; + } else { + fprintf(stderr, "bad ISA string: %s\n", isa); + return 1; + } + + disassembler_t* disassembler = new disassembler_t(xlen); + if (extension) { + for (auto disasm_insn : extension()->get_disasms()) { + disassembler->add_insn(disasm_insn); + } + } while (getline(cin, s)) { @@ -52,7 +69,7 @@ int main(int argc, char** argv) if (nbits < 64) bits = bits << (64 - nbits) >> (64 - nbits); - string dis = p.get_disassembler()->disassemble(bits); + string dis = disassembler->disassemble(bits); s = s.substr(0, start) + dis + s.substr(endp - &s[0] + 1); pos = start + dis.length(); } |