diff options
author | Ved Shanbhogue <ved@rivosinc.com> | 2023-10-30 17:24:43 -0500 |
---|---|---|
committer | Ved Shanbhogue <ved@rivosinc.com> | 2023-11-02 14:19:20 -0500 |
commit | 04cbaf0c1c609506b8fc74e756305e0d792fa784 (patch) | |
tree | 74b594c5b4b362b33742d104fedb635792281f5c | |
parent | 2adfab25a5c206afdd7c06855cbe2e27536d633e (diff) | |
download | spike-04cbaf0c1c609506b8fc74e756305e0d792fa784.zip spike-04cbaf0c1c609506b8fc74e756305e0d792fa784.tar.gz spike-04cbaf0c1c609506b8fc74e756305e0d792fa784.tar.bz2 |
Add Zabha instructions to disasm
-rw-r--r-- | disasm/disasm.cc | 23 | ||||
-rw-r--r-- | disasm/isa_parser.cc | 6 |
2 files changed, 29 insertions, 0 deletions
diff --git a/disasm/disasm.cc b/disasm/disasm.cc index df02e03..6917fa5 100644 --- a/disasm/disasm.cc +++ b/disasm/disasm.cc @@ -840,6 +840,29 @@ void disassembler_t::add_instructions(const isa_parser_t* isa) DEFINE_XAMO(amocas_q) } + if (isa->extension_enabled(EXT_ZABHA)) { + DEFINE_XAMO(amoadd_b) + DEFINE_XAMO(amoswap_b) + DEFINE_XAMO(amoand_b) + DEFINE_XAMO(amoor_b) + DEFINE_XAMO(amoxor_b) + DEFINE_XAMO(amomin_b) + DEFINE_XAMO(amomax_b) + DEFINE_XAMO(amominu_b) + DEFINE_XAMO(amomaxu_b) + DEFINE_XAMO(amocas_b) + DEFINE_XAMO(amoadd_h) + DEFINE_XAMO(amoswap_h) + DEFINE_XAMO(amoand_h) + DEFINE_XAMO(amoor_h) + DEFINE_XAMO(amoxor_h) + DEFINE_XAMO(amomin_h) + DEFINE_XAMO(amomax_h) + DEFINE_XAMO(amominu_h) + DEFINE_XAMO(amomaxu_h) + DEFINE_XAMO(amocas_h) + } + add_insn(new disasm_insn_t("j", match_jal, mask_jal | mask_rd, {&jump_target})); add_insn(new disasm_insn_t("jal", match_jal | match_rd_ra, mask_jal | mask_rd, {&jump_target})); add_insn(new disasm_insn_t("jal", match_jal, mask_jal, {&xrd, &jump_target})); diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index 563f687..ef51310 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -121,6 +121,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) // HINTs encoded in base-ISA instructions are always present. } else if (ext_str == "zacas") { extension_table[EXT_ZACAS] = true; + } else if (ext_str == "zabha") { + extension_table[EXT_ZABHA] = true; } else if (ext_str == "zmmul") { extension_table[EXT_ZMMUL] = true; } else if (ext_str == "zba") { @@ -357,6 +359,10 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) bad_isa_string(str, "'Zacas' extension requires 'A' extension"); } + if (extension_table[EXT_ZABHA] && !extension_table['A']) { + bad_isa_string(str, "'Zabha' extension requires 'A' extension"); + } + // Zpn conflicts with Zvknha/Zvknhb in both rv32 and rv64 if (extension_table[EXT_ZPN] && (extension_table[EXT_ZVKNHA] || extension_table[EXT_ZVKNHB])) { bad_isa_string(str, "'Zvkna' and 'Zvknhb' extensions are incompatible with 'Zpn' extension"); |