Browse Source

Clean up handling of Zcf

pull/2223/head
Andrew Waterman 2 months ago
parent
commit
1a2af0362e
Failed to extract signature
  1. 21
      disasm/isa_parser.cc
  2. 1
      riscv/isa_parser.h

21
disasm/isa_parser.cc

@ -131,18 +131,20 @@ void isa_parser_t::add_extension(const std::string& ext_str, const char* str)
extension_table[EXT_ZCB] = true;
extension_table[EXT_ZCMT] = true;
extension_table[EXT_ZCMP] = true;
if (extension_table['F'] && max_xlen == 32)
extension_table[EXT_ZCF] = true;
extension_table[EXT_ZCE] = true;
} else if (ext_str == "zca") {
extension_table[EXT_ZCA] = true;
} else if (ext_str == "zcf") {
if (max_xlen != 32)
bad_isa_string(str, "'Zcf' requires RV32");
extension_table['F'] = true;
extension_table[EXT_ZCF] = true;
} else if (ext_str == "zcb") {
extension_table[EXT_ZCB] = true;
} else if (ext_str == "zcd") {
extension_table[EXT_ZCD] = true;
extension_table['F'] = true;
extension_table['D'] = true;
} else if (ext_str == "zcmp") {
extension_table[EXT_ZCMP] = true;
} else if (ext_str == "zcmt") {
@ -498,12 +500,15 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
if (extension_table['C']) {
extension_table[EXT_ZCA] = true;
if (extension_table['F'] && max_xlen == 32)
extension_table[EXT_ZCF] = true;
if (extension_table['D'])
extension_table[EXT_ZCD] = true;
}
if (extension_table['C'] || extension_table[EXT_ZCE]) {
if (extension_table['F'] && max_xlen == 32)
extension_table[EXT_ZCF] = true;
}
if (extension_table[EXT_ZICFISS] && extension_table[EXT_ZCA])
extension_table[EXT_ZCMOP] = true;
@ -527,14 +532,6 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
bad_isa_string(str, ("Zfinx/Zdinx/Zhinx{min} extensions conflict with 'F/D/Q/Zfh{min}' extensions"));
}
if (extension_table[EXT_ZCF] && !extension_table['F']) {
bad_isa_string(str, "'Zcf' extension requires 'F' extension");
}
if (extension_table[EXT_ZCD] && !extension_table['D']) {
bad_isa_string(str, "'Zcd' extension requires 'D' extension");
}
if ((extension_table[EXT_ZCMP] || extension_table[EXT_ZCMT]) && extension_table[EXT_ZCD]) {
bad_isa_string(str, "Zcmp' and 'Zcmt' extensions are incompatible with 'Zcd' extension");
}

1
riscv/isa_parser.h

@ -22,6 +22,7 @@ typedef enum {
EXT_ZCA,
EXT_ZCB,
EXT_ZCD,
EXT_ZCE,
EXT_ZCF,
EXT_ZCLSD,
EXT_ZCMP,

Loading…
Cancel
Save