Browse Source

Have ZC* imply extensions rather than erroring if not present

pull/2223/head
Andrew Waterman 2 months ago
parent
commit
5c142baf88
Failed to extract signature
  1. 10
      disasm/isa_parser.cc

10
disasm/isa_parser.cc

@ -140,17 +140,22 @@ void isa_parser_t::add_extension(const std::string& ext_str, const char* str)
if (max_xlen != 32) if (max_xlen != 32)
bad_isa_string(str, "'Zcf' requires RV32"); bad_isa_string(str, "'Zcf' requires RV32");
extension_table['F'] = true; extension_table['F'] = true;
extension_table[EXT_ZCA] = true;
extension_table[EXT_ZCF] = true; extension_table[EXT_ZCF] = true;
} else if (ext_str == "zcb") { } else if (ext_str == "zcb") {
extension_table[EXT_ZCB] = true; extension_table[EXT_ZCB] = true;
extension_table[EXT_ZCA] = true;
} else if (ext_str == "zcd") { } else if (ext_str == "zcd") {
extension_table[EXT_ZCD] = true; extension_table[EXT_ZCD] = true;
extension_table[EXT_ZCA] = true;
extension_table['F'] = true; extension_table['F'] = true;
extension_table['D'] = true; extension_table['D'] = true;
} else if (ext_str == "zcmp") { } else if (ext_str == "zcmp") {
extension_table[EXT_ZCMP] = true; extension_table[EXT_ZCMP] = true;
extension_table[EXT_ZCA] = true;
} else if (ext_str == "zcmt") { } else if (ext_str == "zcmt") {
extension_table[EXT_ZCMT] = true; extension_table[EXT_ZCMT] = true;
extension_table[EXT_ZCA] = true;
} else if (ext_str == "zibi") { } else if (ext_str == "zibi") {
extension_table[EXT_ZIBI] = true; extension_table[EXT_ZIBI] = true;
} else if (ext_str == "zk") { } else if (ext_str == "zk") {
@ -530,11 +535,6 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
bad_isa_string(str, "Zcmp' and 'Zcmt' extensions are incompatible with 'Zcd' extension"); bad_isa_string(str, "Zcmp' and 'Zcmt' extensions are incompatible with 'Zcd' extension");
} }
if ((extension_table[EXT_ZCF] || extension_table[EXT_ZCD] || extension_table[EXT_ZCB] ||
extension_table[EXT_ZCMP] || extension_table[EXT_ZCMT]) && !extension_table[EXT_ZCA]) {
bad_isa_string(str, "'Zcf/Zcd/Zcb/Zcmp/Zcmt' extensions require 'Zca' extension");
}
if (extension_table[EXT_ZACAS] && !extension_table[EXT_ZAAMO]) { if (extension_table[EXT_ZACAS] && !extension_table[EXT_ZAAMO]) {
bad_isa_string(str, "'Zacas' extension requires either the 'A' or the 'Zaamo' extension"); bad_isa_string(str, "'Zacas' extension requires either the 'A' or the 'Zaamo' extension");
} }

Loading…
Cancel
Save