From ede537120b87ebb7ab174a34a79f0287bb50adab Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Thu, 20 Jun 2024 14:15:48 -0700 Subject: Add Zvl/Zve validation to isa_parser --- disasm/isa_parser.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index f1ba9f3..c35e449 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -459,6 +459,27 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) "extensions are incompatible with WORDS_BIGENDIAN setups."); } #endif + + if ((vlen != 0) ^ (elen != 0)) { + bad_isa_string(str, "Invalid Zvl/Zve configuration"); + } + + if (extension_table[EXT_ZVFHMIN] && (vlen == 0 || elen == 0 || !zvf)) { + bad_isa_string(str, "'Zvfhmin' extension requires Zve32f"); + } + + if (extension_table[EXT_ZVFH] && (vlen == 0 || elen == 0 || !zvf || !extension_table[EXT_ZVFHMIN])) { + bad_isa_string(str, "'Zvfh' extension requires Zve32f and 'Zvfhmin'"); + } + + if (zvd && !extension_table['D'] && elen < 64) { + bad_isa_string(str, "'ZveXXd' extension requires D"); + } + + if (zvf && !extension_table['F']) { + bad_isa_string(str, "'ZveXXf' extension requires F"); + } + std::string lowercase = strtolower(priv); bool user = false, supervisor = false; -- cgit v1.1