aboutsummaryrefslogtreecommitdiff
path: root/disasm/isa_parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'disasm/isa_parser.cc')
-rw-r--r--disasm/isa_parser.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc
index f29736b..62466d0 100644
--- a/disasm/isa_parser.cc
+++ b/disasm/isa_parser.cc
@@ -308,6 +308,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
extension_table[EXT_SSQOSID] = true;
} else if (ext_str == "zicfilp") {
extension_table[EXT_ZICFILP] = true;
+ } else if (ext_str == "zicfiss") {
+ extension_table[EXT_ZICFISS] = true;
} else if (ext_str[0] == 'x') {
extension_table['X'] = true;
if (ext_str.size() == 1) {
@@ -397,6 +399,16 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
(extension_table[EXT_ZVKG] || extension_table[EXT_ZVKNED] || extension_table[EXT_ZVKSH])) {
bad_isa_string(str, "'Zvkg', 'Zvkned', and 'Zvksh' extensions are incompatible with 'Zpn' extension in rv64");
}
+
+ // When SSE is 0, Zicfiss behavior is defined by Zicmop
+ if (extension_table[EXT_ZICFISS] && !extension_table[EXT_ZIMOP]) {
+ bad_isa_string(str, "'Zicfiss' extension requires 'Zimop' extension");
+ }
+
+ if (extension_table[EXT_ZICFISS] && extension_table[EXT_ZCA] &&
+ !extension_table[EXT_ZCMOP]) {
+ bad_isa_string(str, "'Zicfiss' extension requires 'Zcmop' extension when `Zca` is supported");
+ }
#ifdef WORDS_BIGENDIAN
// Access to the vector registers as element groups is unimplemented on big-endian setups.
if (extension_table[EXT_ZVKG] || extension_table[EXT_ZVKNHA] || extension_table[EXT_ZVKNHB] ||