From 715906f4161c02b5e3275f0ea5031d1c196d9562 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 22 Jan 2026 15:07:00 -0800 Subject: [PATCH] Have Zclsd imply extensions rather than erroring if not present --- disasm/isa_parser.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index bbb84ba4..ee4ac622 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -287,11 +287,14 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) } else if (ext_str == "zihpm") { extension_table[EXT_ZIHPM] = true; } else if (ext_str == "zilsd") { + zilsd: if (max_xlen != 32) - bad_isa_string(str, "'Zilsd' requires RV32"); + bad_isa_string(str, ("'" + ext_str + "' requires RV32").c_str()); extension_table[EXT_ZILSD] = true; } else if (ext_str == "zclsd") { extension_table[EXT_ZCLSD] = true; + extension_table[EXT_ZCA] = true; + goto zilsd; } else if (ext_str == "zvkb") { extension_table[EXT_ZVKB] = true; } else if (ext_str == "zvbb") { @@ -489,18 +492,14 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) if (extension_table[EXT_ZICFISS] && extension_table[EXT_ZCA]) extension_table[EXT_ZCMOP] = true; - if (extension_table[EXT_ZCLSD] && extension_table[EXT_ZCF]) { - bad_isa_string(str, "'Zclsd' extension conflicts with 'Zcf' extensions"); - } - - if (extension_table[EXT_ZCLSD] && (!extension_table[EXT_ZCA] || !extension_table[EXT_ZILSD])) { - bad_isa_string(str, "'Zclsd' extension requires 'Zca' and 'Zilsd' extensions"); - } - if (extension_table[EXT_ZFBFMIN] || extension_table[EXT_ZFHMIN]) { extension_table[EXT_INTERNAL_ZFH_MOVE] = true; } + if (extension_table[EXT_ZCLSD] && extension_table[EXT_ZCF]) { + bad_isa_string(str, "'Zclsd' extension conflicts with 'Zcf' extensions"); + } + if (extension_table[EXT_ZFBFMIN] && (!extension_table['F'])) { bad_isa_string(str, "'Zfbfmin' extension requires 'F' extension"); }