aboutsummaryrefslogtreecommitdiff
path: root/disasm/disasm.cc
diff options
context:
space:
mode:
authormarcfedorow <mark.fedorov@cloudbear.ru>2021-10-15 02:18:53 +0300
committerGitHub <noreply@github.com>2021-10-14 16:18:53 -0700
commitb8d27b6ac039abc1c31b3caea4342cadfb682ea3 (patch)
tree7248a2254c803767d1670ca5478c13438398cb4f /disasm/disasm.cc
parent877686f4e0016819077dc1c23571c5bde770eb32 (diff)
downloadspike-b8d27b6ac039abc1c31b3caea4342cadfb682ea3.zip
spike-b8d27b6ac039abc1c31b3caea4342cadfb682ea3.tar.gz
spike-b8d27b6ac039abc1c31b3caea4342cadfb682ea3.tar.bz2
Split 'P' to EXT_ZPN and friends (#830)
* Added ZMMUL extension * Splitted P-ext to its zeds * Typo fix
Diffstat (limited to 'disasm/disasm.cc')
-rw-r--r--disasm/disasm.cc32
1 files changed, 17 insertions, 15 deletions
diff --git a/disasm/disasm.cc b/disasm/disasm.cc
index 4eb6970..1a7a092 100644
--- a/disasm/disasm.cc
+++ b/disasm/disasm.cc
@@ -834,9 +834,13 @@ disassembler_t::disassembler_t(int xlen)
DEFINE_R1TYPE(sext_h);
add_insn(new disasm_insn_t("zext.h", (xlen == 32 ? match_pack : match_packw), mask_pack | mask_rs2, {&xrd, &xrs1}));
DEFINE_RTYPE(pack);
+ DEFINE_RTYPE(packu);
DEFINE_RTYPE(packw);
DEFINE_RTYPE(grev);
- add_insn(new disasm_insn_t("rev8", match_grevi | ((xlen == 32 ? 0x18 : 0x38) << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1}));
+ add_insn(new disasm_insn_t("rev", match_grevi | ((xlen - 1) << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1}));
+ add_insn(new disasm_insn_t("rev8", match_grevi | ((xlen - 8) << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1}));
+ add_insn(new disasm_insn_t("rev.b", match_grevi | (0x7 << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1})); // brev8
+ add_insn(new disasm_insn_t("rev8.h", match_grevi | (0x8 << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1})); // swap16
DEFINE_ITYPE_SHIFT(grevi);
DEFINE_RTYPE(gorc);
add_insn(new disasm_insn_t("orc.b", match_gorci | (0x7 << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1}));
@@ -846,6 +850,12 @@ disassembler_t::disassembler_t(int xlen)
DEFINE_RTYPE(xperm_h);
DEFINE_RTYPE(xperm_w);
+ DEFINE_R3TYPE(cmix);
+ DEFINE_R3TYPE(fsr);
+ DEFINE_R3TYPE(fsri);
+ DEFINE_R3TYPE(fsriw);
+ DEFINE_R3TYPE(fsrw);
+
DEFINE_NOARG(ecall);
DEFINE_NOARG(ebreak);
DEFINE_NOARG(uret);
@@ -1592,12 +1602,9 @@ disassembler_t::disassembler_t(int xlen)
DEFINE_R1TYPE(kabs16);
DEFINE_R1TYPE(clrs16);
DEFINE_R1TYPE(clz16);
- DEFINE_R1TYPE(clo16);
DEFINE_R1TYPE(kabs8);
DEFINE_R1TYPE(clrs8);
DEFINE_R1TYPE(clz8);
- DEFINE_R1TYPE(clo8);
- DEFINE_R1TYPE(swap8);
DEFINE_R1TYPE(sunpkd810);
DEFINE_R1TYPE(sunpkd820);
@@ -1649,19 +1656,16 @@ disassembler_t::disassembler_t(int xlen)
DEFINE_RTYPE(uclip32)
DEFINE_R1TYPE(clrs32);
DEFINE_R1TYPE(clz32);
- DEFINE_R1TYPE(clo32);
DEFINE_RTYPE(pbsad);
DEFINE_RTYPE(pbsada);
DEFINE_RTYPE(smaqa);
DEFINE_RTYPE(umaqa);
DEFINE_RTYPE(smaqa_su);
- DEFINE_RTYPE(add64);
DEFINE_RTYPE(radd64);
DEFINE_RTYPE(uradd64);
DEFINE_RTYPE(kadd64);
DEFINE_RTYPE(ukadd64);
- DEFINE_RTYPE(sub64);
DEFINE_RTYPE(rsub64);
DEFINE_RTYPE(ursub64);
DEFINE_RTYPE(ksub64);
@@ -1711,18 +1715,14 @@ disassembler_t::disassembler_t(int xlen)
DEFINE_RTYPE(uraddw);
DEFINE_RTYPE(rsubw);
DEFINE_RTYPE(ursubw);
- DEFINE_RTYPE(maxw);
- DEFINE_RTYPE(minw);
+ DEFINE_RTYPE(max);
+ DEFINE_RTYPE(min);
DEFINE_RTYPE(mulr64);
DEFINE_RTYPE(mulsr64);
DEFINE_RTYPE(msubr32);
DEFINE_RTYPE(ave);
DEFINE_RTYPE(sra_u);
DEFINE_PI5TYPE(srai_u);
- DEFINE_RTYPE(bitrev);
- DEFINE_RTYPE(wext);
- DEFINE_PI5TYPE(wexti);
- DEFINE_R3TYPE(bpick);
DEFINE_PI3TYPE(insb);
DEFINE_RTYPE(maddr32)
@@ -1732,14 +1732,16 @@ disassembler_t::disassembler_t(int xlen)
DISASM_INSN("c.fsw", c_fsw, 0, {&rvc_fp_rs2s, &rvc_lw_address});
DISASM_INSN("c.fswsp", c_fswsp, 0, {&rvc_fp_rs2, &rvc_swsp_address});
DISASM_INSN("c.jal", c_jal, 0, {&rvc_jump_target});
- DEFINE_PI5TYPE(bitrevi);
+
+ DEFINE_RTYPE(add64);
+ DEFINE_RTYPE(sub64);
} else {
DISASM_INSN("c.ld", c_ld, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.ldsp", c_ldsp, 0, {&xrd, &rvc_ldsp_address});
DISASM_INSN("c.sd", c_sd, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.sdsp", c_sdsp, 0, {&rvc_rs2, &rvc_sdsp_address});
DISASM_INSN("c.addiw", c_addiw, 0, {&xrd, &rvc_imm});
- DEFINE_PI6TYPE(bitrevi);
+
DEFINE_RTYPE(add32);
DEFINE_RTYPE(radd32);
DEFINE_RTYPE(uradd32);