From 715c1597ab53df915cf3478c924eb025b33a6212 Mon Sep 17 00:00:00 2001 From: Nadime Barhoumi Date: Tue, 19 Aug 2025 18:09:53 -0400 Subject: [PATCH] Fix BFloat16 vector extension dependencies * Enable EXT_INTERNAL_ZFH_MOVE when either Zfbfmin or Zfhmin is enabled * Change Zvfbfmin to require Zve32f instead of V extension. * Add proper dependency chain for Zvfbfwma requiring both Zvfbfmin and Zfbfmin. --- disasm/isa_parser.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index 5fe82808..efedc89a 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -456,16 +456,20 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) bad_isa_string(str, "'Zclsd' extension requires 'Zca' and 'Zilsd' extensions"); } - if (extension_table[EXT_ZFBFMIN] && !extension_table['F']) { + if (extension_table[EXT_ZFBFMIN] || extension_table[EXT_ZFHMIN]) { + extension_table[EXT_INTERNAL_ZFH_MOVE] = true; + } + + if (extension_table[EXT_ZFBFMIN] && (!extension_table['F'] || !extension_table[EXT_INTERNAL_ZFH_MOVE])) { bad_isa_string(str, "'Zfbfmin' extension requires 'F' extension"); } - if ((extension_table[EXT_ZVFBFMIN] || extension_table[EXT_ZVFBFWMA]) && !extension_table['V']) { - bad_isa_string(str, "'Zvfbfmin/Zvfbfwma' extension requires 'V' extension"); + if (extension_table[EXT_ZVFBFMIN] && (vlen == 0 || elen == 0 || !zvf)) { + bad_isa_string(str, "'Zvfbfmin' extension requires 'Zve32f' extension"); } - if (extension_table[EXT_ZFBFMIN] || extension_table[EXT_ZVFBFMIN] || extension_table[EXT_ZFHMIN]) { - extension_table[EXT_INTERNAL_ZFH_MOVE] = true; + if (extension_table[EXT_ZVFBFWMA] && (!extension_table[EXT_ZFBFMIN] || !extension_table[EXT_ZVFBFMIN])) { + bad_isa_string(str, "'Zvfbfwma' extension requires 'Zfbfmin' and 'Zvfbfmin' extensions"); } if (extension_table[EXT_ZFINX] && extension_table['F']) {