Browse Source

Lift artificial limit of 191 extensions

Add new accessors that accept the isa_extension_t enum.

Retain the original ones that accept unsigned char to avoid churn.
pull/1228/head
Andrew Waterman 3 years ago
parent
commit
830324dcd2
  1. 2
      riscv/isa_parser.cc
  2. 4
      riscv/isa_parser.h
  3. 6
      riscv/processor.h

2
riscv/isa_parser.cc

@ -28,7 +28,7 @@ static void bad_priv_string(const char* priv)
}
isa_parser_t::isa_parser_t(const char* str, const char *priv)
: extension_table(256, false)
: extension_table(NUM_ISA_EXTENSIONS, false)
{
isa_string = strtolower(str);
const char* all_subsets = "mafdqchpv";

4
riscv/isa_parser.h

@ -62,6 +62,7 @@ typedef enum {
EXT_XZBR,
EXT_XZBT,
EXT_SSTC,
NUM_ISA_EXTENSIONS
} isa_extension_t;
typedef enum {
@ -83,6 +84,9 @@ public:
reg_t get_max_isa() const { return max_isa; }
std::string get_isa_string() const { return isa_string; }
bool extension_enabled(unsigned char ext) const {
return extension_enabled(isa_extension_t(ext));
}
bool extension_enabled(isa_extension_t ext) const {
if (ext >= 'A' && ext <= 'Z')
return (max_isa >> (ext - 'A')) & 1;
else

6
riscv/processor.h

@ -217,6 +217,9 @@ public:
return !custom_extensions.empty();
}
bool extension_enabled(unsigned char ext) const {
return extension_enabled(isa_extension_t(ext));
}
bool extension_enabled(isa_extension_t ext) const {
if (ext >= 'A' && ext <= 'Z')
return state.misa->extension_enabled(ext);
else
@ -226,6 +229,9 @@ public:
// possibly be disabled dynamically. Useful for documenting
// assumptions about writable misa bits.
bool extension_enabled_const(unsigned char ext) const {
return extension_enabled_const(isa_extension_t(ext));
}
bool extension_enabled_const(isa_extension_t ext) const {
if (ext >= 'A' && ext <= 'Z')
return state.misa->extension_enabled_const(ext);
else

Loading…
Cancel
Save