diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index 59472a43..c18a72d8 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 5b043475..335a42bf 100644 --- a/riscv/isa_parser.h +++ b/riscv/isa_parser.h @@ -6,9 +6,7 @@ #include #include -#include - -class extension_t; +#include typedef enum { // 65('A') ~ 90('Z') is reserved for standard isa in misa @@ -109,15 +107,14 @@ public: std::bitset get_extension_table() const { return extension_table; } - const std::unordered_map & - get_extensions() const { return extensions; } + const std::set &get_extensions() const { return extensions; } protected: unsigned max_xlen; reg_t max_isa; std::bitset extension_table; std::string isa_string; - std::unordered_map extensions; + std::set extensions; }; #endif diff --git a/riscv/processor.cc b/riscv/processor.cc index 1d5675a5..e81375a2 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);