diff options
author | Jerry Zhao <jerryz123@berkeley.edu> | 2023-07-11 17:53:23 -0700 |
---|---|---|
committer | Jerry Zhao <jerryz123@berkeley.edu> | 2023-07-11 18:53:54 -0700 |
commit | 2eb2b40102ba0302e1b28959072d9ccb91930a8f (patch) | |
tree | 45734407a719f45ab124f25c823d53f31a945252 | |
parent | 47ab8926b04a592128b924da0bdbd622213568f8 (diff) | |
download | riscv-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.cc | 7 | ||||
-rw-r--r-- | riscv/isa_parser.h | 9 | ||||
-rw-r--r-- | riscv/processor.cc | 2 |
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); |