aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhao <jerryz123@berkeley.edu>2024-06-20 14:15:48 -0700
committerJerry Zhao <jerryz123@berkeley.edu>2024-06-21 10:29:18 -0700
commitede537120b87ebb7ab174a34a79f0287bb50adab (patch)
tree92aae68be56e52ebb4c04499dd0b2c3a53c17429
parent0408e797b139dbc1aaa52cb33dea047ad8d230ad (diff)
downloadriscv-isa-sim-ede537120b87ebb7ab174a34a79f0287bb50adab.zip
riscv-isa-sim-ede537120b87ebb7ab174a34a79f0287bb50adab.tar.gz
riscv-isa-sim-ede537120b87ebb7ab174a34a79f0287bb50adab.tar.bz2
Add Zvl/Zve validation to isa_parser
-rw-r--r--disasm/isa_parser.cc21
1 files changed, 21 insertions, 0 deletions
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;