aboutsummaryrefslogtreecommitdiff
path: root/spike_main
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2020-01-09 15:12:24 -0800
committerChih-Min Chao <chihmin.chao@sifive.com>2020-02-12 23:08:01 -0800
commitb7a05a6ba257cf42cb2179f78d14608c9eb23546 (patch)
tree4c1ff33a2223de7af7523bf5cc0dded80071753b /spike_main
parent4b3b867e35383b6323ebe7062bac601c1f1617a5 (diff)
downloadspike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.zip
spike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.tar.gz
spike-b7a05a6ba257cf42cb2179f78d14608c9eb23546.tar.bz2
Decouple spike-dasm program from simulator code
Diffstat (limited to 'spike_main')
-rw-r--r--spike_main/spike-dasm.cc25
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();
}