Browse Source

Remove dependency of isa_parser_t on extension_t

pull/1409/head
Jerry Zhao 3 years ago
parent
commit
2eb2b40102
  1. 7
      disasm/isa_parser.cc
  2. 9
      riscv/isa_parser.h
  3. 2
      riscv/processor.cc

7
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());

9
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

2
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);

Loading…
Cancel
Save