diff options
Diffstat (limited to 'disasm')
-rw-r--r-- | disasm/disasm.cc | 5 | ||||
-rw-r--r-- | disasm/isa_parser.cc | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/disasm/disasm.cc b/disasm/disasm.cc index 6716e5b..7c07ec3 100644 --- a/disasm/disasm.cc +++ b/disasm/disasm.cc @@ -880,6 +880,11 @@ void disassembler_t::add_instructions(const isa_parser_t* isa) DEFINE_XAMO(amocas_h) } + if (isa->extension_enabled(EXT_ZAWRS)) { + DEFINE_NOARG(wrs_sto); + DEFINE_NOARG(wrs_nto); + } + if (isa->extension_enabled(EXT_ZICFILP)) { // lpad encodes as `auipc x0, label`, so it needs to be added before auipc // for higher disassembling priority diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index c0869f3..ee57a51 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -123,6 +123,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) extension_table[EXT_ZACAS] = true; } else if (ext_str == "zabha") { extension_table[EXT_ZABHA] = true; + } else if (ext_str == "zawrs") { + extension_table[EXT_ZAWRS] = true; } else if (ext_str == "zmmul") { extension_table[EXT_ZMMUL] = true; } else if (ext_str == "zba") { @@ -378,14 +380,18 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) bad_isa_string(str, "'Zcf/Zcd/Zcb/Zcmp/Zcmt' extensions require 'Zca' extension"); } - if (extension_table[EXT_ZACAS] && !extension_table['A'] && !extension_table[EXT_ZAAMO]) { + if (extension_table[EXT_ZACAS] && !extension_table[EXT_ZAAMO]) { bad_isa_string(str, "'Zacas' extension requires either the 'A' or the 'Zaamo' extension"); } - if (extension_table[EXT_ZABHA] && !extension_table['A'] && !extension_table[EXT_ZAAMO]) { + if (extension_table[EXT_ZABHA] && !extension_table[EXT_ZAAMO]) { bad_isa_string(str, "'Zabha' extension requires either the 'A' or the 'Zaamo' extension"); } + if (extension_table[EXT_ZAWRS] && !extension_table[EXT_ZALRSC]) { + bad_isa_string(str, "'Zabha' extension requires either the 'A' or the 'Zalrsc' extension"); + } + // 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"); |