diff options
author | Andrew Waterman <andrew@sifive.com> | 2020-01-09 15:12:24 -0800 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-02-12 23:08:01 -0800 |
commit | b7a05a6ba257cf42cb2179f78d14608c9eb23546 (patch) | |
tree | 4c1ff33a2223de7af7523bf5cc0dded80071753b | |
parent | 4b3b867e35383b6323ebe7062bac601c1f1617a5 (diff) | |
download | spike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.zip spike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.tar.gz spike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.tar.bz2 |
Decouple spike-dasm program from simulator code
-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(); } |