aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhao <jerryz123@berkeley.edu>2023-07-11 17:53:23 -0700
committerJerry Zhao <jerryz123@berkeley.edu>2023-07-11 18:53:54 -0700
commit2eb2b40102ba0302e1b28959072d9ccb91930a8f (patch)
tree45734407a719f45ab124f25c823d53f31a945252
parent47ab8926b04a592128b924da0bdbd622213568f8 (diff)
downloadriscv-isa-sim-2eb2b40102ba0302e1b28959072d9ccb91930a8f.zip
riscv-isa-sim-2eb2b40102ba0302e1b28959072d9ccb91930a8f.tar.gz
riscv-isa-sim-2eb2b40102ba0302e1b28959072d9ccb91930a8f.tar.bz2
Remove dependency of isa_parser_t on extension_t
-rw-r--r--disasm/isa_parser.cc7
-rw-r--r--riscv/isa_parser.h9
-rw-r--r--riscv/processor.cc2
3 files changed, 5 insertions, 13 deletions
diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc
index 59472a4..c18a72d 100644
--- a/disasm/isa_parser.cc
+++ b/disasm/isa_parser.cc
@@ -1,5 +1,4 @@
#include "isa_parser.h"
-#include "extension.h"
static std::string strtolower(const char* str)
{
@@ -292,11 +291,7 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
if (ext_str.size() == 1) {
bad_isa_string(str, "single 'X' is not a proper name");
} else if (ext_str != "xdummy") {
- extension_t* x = find_extension(ext_str.substr(1).c_str())();
- if (!extensions.insert(std::make_pair(x->name(), x)).second) {
- fprintf(stderr, "extensions must have unique names (got two named \"%s\"!)\n", x->name());
- abort();
- }
+ extensions.insert(ext_str.substr(1));
}
} else {
bad_isa_string(str, ("unsupported extension: " + ext_str).c_str());
diff --git a/riscv/isa_parser.h b/riscv/isa_parser.h
index 5b04347..335a42b 100644
--- a/riscv/isa_parser.h
+++ b/riscv/isa_parser.h
@@ -6,9 +6,7 @@
#include <bitset>
#include <string>
-#include <unordered_map>
-
-class extension_t;
+#include <set>
typedef enum {
// 65('A') ~ 90('Z') is reserved for standard isa in misa
@@ -109,15 +107,14 @@ public:
std::bitset<NUM_ISA_EXTENSIONS> get_extension_table() const { return extension_table; }
- const std::unordered_map<std::string, extension_t*> &
- get_extensions() const { return extensions; }
+ const std::set<std::string> &get_extensions() const { return extensions; }
protected:
unsigned max_xlen;
reg_t max_isa;
std::bitset<NUM_ISA_EXTENSIONS> extension_table;
std::string isa_string;
- std::unordered_map<std::string, extension_t*> extensions;
+ std::set<std::string> extensions;
};
#endif
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 1d5675a..e81375a 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -61,7 +61,7 @@ processor_t::processor_t(const isa_parser_t *isa, const cfg_t *cfg,
disassembler = new disassembler_t(isa);
for (auto e : isa->get_extensions())
- register_extension(e.second);
+ register_extension(find_extension(e.c_str())());
set_pmp_granularity(1 << PMP_SHIFT);
set_pmp_num(cfg->pmpregions);