aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVed Shanbhogue <ved@rivosinc.com>2023-10-30 17:24:43 -0500
committerVed Shanbhogue <ved@rivosinc.com>2023-11-02 14:19:20 -0500
commit04cbaf0c1c609506b8fc74e756305e0d792fa784 (patch)
tree74b594c5b4b362b33742d104fedb635792281f5c
parent2adfab25a5c206afdd7c06855cbe2e27536d633e (diff)
downloadriscv-isa-sim-04cbaf0c1c609506b8fc74e756305e0d792fa784.zip
riscv-isa-sim-04cbaf0c1c609506b8fc74e756305e0d792fa784.tar.gz
riscv-isa-sim-04cbaf0c1c609506b8fc74e756305e0d792fa784.tar.bz2
Add Zabha instructions to disasm
-rw-r--r--disasm/disasm.cc23
-rw-r--r--disasm/isa_parser.cc6
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");