123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- From f6a5298d5c929a9d30fa56ddc14d686892f9bafc Mon Sep 17 00:00:00 2001
- From: Nelson Chu <nelson.chu@sifive.com>
- Date: Mon, 7 Dec 2020 16:25:05 +0800
- Subject: [PATCH 41/48] RISC-V: Re-define zba, zbb, zbc and zbs extensions.
- Andrew had re-defined zba, zbb, zbc and zbs on the tech-bitmanip mail list.
- Other instructions and sub-extensions are still discussing, so I change their
- type to INSN_CLASS_B, to keep the encodings and implementations, but we
- do need to re-define them in the future.
- Besides, B includes all of the zb*, except zbr and zbt.
- ---
- gas/config/tc-riscv.c | 38 ++--
- include/opcode/riscv.h | 14 +-
- opcodes/riscv-opc.c | 409 +++++++++++++++++++++--------------------
- 3 files changed, 232 insertions(+), 229 deletions(-)
- diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
- index b53442b8b4..b1b86a7afb 100644
- --- a/gas/config/tc-riscv.c
- +++ b/gas/config/tc-riscv.c
- @@ -260,39 +260,35 @@ riscv_multi_subset_supports (enum riscv_insn_class insn_class)
- case INSN_CLASS_V_AND_ZVQMAC:
- return riscv_subset_supports ("v") && riscv_subset_supports ("zvqmac");
-
- - case INSN_CLASS_B_OR_ZBB:
- - return riscv_subset_supports ("b") || riscv_subset_supports ("zbb");
- -
- + /* Sure. */
- case INSN_CLASS_B_OR_ZBA:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zba");
- -
- + case INSN_CLASS_B_OR_ZBB:
- + return riscv_subset_supports ("b") || riscv_subset_supports ("zbb");
- case INSN_CLASS_B_OR_ZBC:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zbc");
- -
- + case INSN_CLASS_B_OR_ZBS:
- + return riscv_subset_supports ("b") || riscv_subset_supports ("zbs");
- + case INSN_CLASS_B_OR_ZBA_OR_ZBB:
- + return (riscv_subset_supports ("b")
- + || riscv_subset_supports ("zba")
- + || riscv_subset_supports ("zbb"));
- +
- + /* Not sure. */
- + case INSN_CLASS_B:
- + return riscv_subset_supports ("b");
- case INSN_CLASS_B_OR_ZBE:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zbe");
- -
- case INSN_CLASS_B_OR_ZBF:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zbf");
- -
- case INSN_CLASS_B_OR_ZBM:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zbm");
- -
- case INSN_CLASS_B_OR_ZBP:
- return riscv_subset_supports ("b") || riscv_subset_supports ("zbp");
- -
- - case INSN_CLASS_B_OR_ZBR:
- - return riscv_subset_supports ("b") || riscv_subset_supports ("zbr");
- -
- - case INSN_CLASS_B_OR_ZBS:
- - return riscv_subset_supports ("b") || riscv_subset_supports ("zbs");
- -
- - case INSN_CLASS_B_OR_ZBT:
- - return riscv_subset_supports ("b") || riscv_subset_supports ("zbt");
- -
- - case INSN_CLASS_B_OR_ZBB_OR_ZBP:
- - return riscv_subset_supports ("b") || riscv_subset_supports ("zbb")
- - || riscv_subset_supports ("zbp");
- + case INSN_CLASS_ZBR:
- + return riscv_subset_supports ("zbr");
- + case INSN_CLASS_ZBT:
- + return riscv_subset_supports ("zbt");
-
- default:
- as_fatal ("Unreachable");
- diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
- index 5303d14998..a23a2a8002 100644
- --- a/include/opcode/riscv.h
- +++ b/include/opcode/riscv.h
- @@ -379,6 +379,7 @@ enum riscv_insn_class
- INSN_CLASS_F,
- INSN_CLASS_D,
- INSN_CLASS_Q,
- + INSN_CLASS_B,
- INSN_CLASS_V,
- INSN_CLASS_F_AND_C,
- INSN_CLASS_F_AND_ZFH,
- @@ -390,19 +391,18 @@ enum riscv_insn_class
- INSN_CLASS_V_AND_ZVEDIV,
- INSN_CLASS_V_OR_ZVLSSEG,
- INSN_CLASS_V_AND_ZVQMAC,
- -
- - INSN_CLASS_B,
- - INSN_CLASS_B_OR_ZBT,
- - INSN_CLASS_B_OR_ZBR,
- - INSN_CLASS_B_OR_ZBB,
- INSN_CLASS_B_OR_ZBA,
- + INSN_CLASS_B_OR_ZBB,
- INSN_CLASS_B_OR_ZBC,
- + INSN_CLASS_B_OR_ZBS,
- + INSN_CLASS_B_OR_ZBA_OR_ZBB,
- +
- INSN_CLASS_B_OR_ZBE,
- INSN_CLASS_B_OR_ZBF,
- INSN_CLASS_B_OR_ZBM,
- INSN_CLASS_B_OR_ZBP,
- - INSN_CLASS_B_OR_ZBS,
- - INSN_CLASS_B_OR_ZBB_OR_ZBP
- + INSN_CLASS_ZBR,
- + INSN_CLASS_ZBT,
- };
-
- /* This structure holds information for a particular instruction. */
- diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
- index dbabc5c2f6..86cfcabec9 100644
- --- a/opcodes/riscv-opc.c
- +++ b/opcodes/riscv-opc.c
- @@ -984,220 +984,227 @@ const struct riscv_opcode riscv_opcodes[] =
- {"fcvt.h.lu", 64, INSN_CLASS_F_AND_ZFH, "D,s", MATCH_FCVT_H_LU | MASK_RM, MASK_FCVT_H_L | MASK_RM, match_opcode, 0 },
- {"fcvt.h.lu", 64, INSN_CLASS_F_AND_ZFH, "D,s,m", MATCH_FCVT_H_LU, MASK_FCVT_H_LU, match_opcode, 0 },
-
- -/* Bitmanip instruction subset */
- -{"andn", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_ANDN, MASK_ANDN, match_opcode, 0 },
- -{"orn", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_ORN, MASK_ORN, match_opcode, 0 },
- -{"xnor", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_XNOR, MASK_XNOR, match_opcode, 0 },
- -{"sloi", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_SLOI, MASK_SLOI, match_opcode, 0 },
- -{"sroi", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_SROI, MASK_SROI, match_opcode, 0 },
- -{"roli", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,>", 0, (int) M_RL, match_never, INSN_MACRO },
- -{"rori", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,>", MATCH_RORI, MASK_RORI, match_opcode, 0 },
- -{"slo", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SLO, MASK_SLO, match_opcode, 0 },
- -{"slo", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_SLOI, MASK_SLOI, match_opcode, INSN_ALIAS },
- -{"sro", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SRO, MASK_SRO, match_opcode, 0 },
- -{"sro", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_SROI, MASK_SROI, match_opcode, INSN_ALIAS },
- -{"rol", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_ROL, MASK_ROL, match_opcode, 0 },
- -{"rol", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,>", 0, (int) M_RL, match_never, INSN_MACRO },
- -{"ror", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_ROR, MASK_ROR, match_opcode, 0 },
- -{"ror", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,>", MATCH_RORI, MASK_RORI, match_opcode, INSN_ALIAS },
- -{"sbclri", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBCLRI, MASK_SBCLRI, match_opcode, 0 },
- -{"sbseti", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBSETI, MASK_SBSETI, match_opcode, 0 },
- -{"sbinvi", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBINVI, MASK_SBINVI, match_opcode, 0 },
- -{"sbexti", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBEXTI, MASK_SBEXTI, match_opcode, 0 },
- -{"gorci", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_GORCI, MASK_GORCI, match_opcode, 0 },
- -{"grevi", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_GREVI, MASK_GREVI, match_opcode, 0 },
- -{"sbclr", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBCLR, MASK_SBCLR, match_opcode, 0 },
- -{"sbclr", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBCLRI, MASK_SBCLRI, match_opcode, INSN_ALIAS },
- -{"sbset", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBSET, MASK_SBSET, match_opcode, 0 },
- -{"sbset", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBSETI, MASK_SBSETI, match_opcode, INSN_ALIAS },
- -{"sbinv", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBINV, MASK_SBINV, match_opcode, 0 },
- -{"sbinv", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBINVI, MASK_SBINVI, match_opcode, INSN_ALIAS },
- -{"sbext", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBEXT, MASK_SBEXT, match_opcode, 0 },
- -{"sbext", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBEXTI, MASK_SBEXTI, match_opcode, INSN_ALIAS },
- -{"gorc", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_GORC, MASK_GORC, match_opcode, 0 },
- -{"gorc", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_GORCI, MASK_GORCI, match_opcode, INSN_ALIAS },
- -{"grev", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_GREV, MASK_GREV, match_opcode, 0 },
- -{"grev", 0, INSN_CLASS_B_OR_ZBP, "d,s,>", MATCH_GREVI, MASK_GREVI, match_opcode, INSN_ALIAS },
- -{"cmix", 0, INSN_CLASS_B_OR_ZBT, "d,t,s,r", MATCH_CMIX, MASK_CMIX, match_opcode, 0 },
- -{"cmov", 0, INSN_CLASS_B_OR_ZBT, "d,t,s,r", MATCH_CMOV, MASK_CMOV, match_opcode, 0 },
- -{"fsli", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,>", 0, (int) M_FL, match_never, INSN_MACRO },
- -{"fsri", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,>", MATCH_FSRI, MASK_FSRI, match_opcode, 0 },
- -{"fsl", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,t", MATCH_FSL, MASK_FSL, match_opcode, 0 },
- -{"fsl", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,>", 0, (int) M_FL, match_never, INSN_MACRO },
- -{"fsr", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,t", MATCH_FSR, MASK_FSR, match_opcode, 0 },
- -{"fsr", 0, INSN_CLASS_B_OR_ZBT, "d,s,r,>", MATCH_FSRI, MASK_FSRI, match_opcode, INSN_ALIAS },
- +/* Bitmanip instruction subset - for sure */
- +{"sh1add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },
- +{"sh2add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },
- +{"sh3add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },
- +{"slliu.w", 64, INSN_CLASS_B_OR_ZBA, "d,s,>", MATCH_SLLIU_W, MASK_SLLIU_W, match_opcode, 0 },
- +{"zext.w", 64, INSN_CLASS_B_OR_ZBA_OR_ZBB, "d,s", MATCH_ADDU_W, MASK_ADDU_W | MASK_RS2, match_opcode, INSN_ALIAS },
- +{"addu.w", 64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_ADDU_W, MASK_ADDU_W, match_opcode, 0 },
- +{"sh1addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH1ADDU_W, MASK_SH1ADDU_W, match_opcode, 0 },
- +{"sh2addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH2ADDU_W, MASK_SH2ADDU_W, match_opcode, 0 },
- +{"sh3addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH3ADDU_W, MASK_SH3ADDU_W, match_opcode, 0 },
- +
- {"clz", 0, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CLZ, MASK_CLZ, match_opcode, 0 },
- {"ctz", 0, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CTZ, MASK_CTZ, match_opcode, 0 },
- {"pcnt", 0, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_PCNT, MASK_PCNT, match_opcode, 0 },
- +{"min", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MIN, MASK_MIN, match_opcode, 0 },
- +{"max", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MAX, MASK_MAX, match_opcode, 0 },
- +{"minu", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MINU, MASK_MINU, match_opcode, 0 },
- +{"maxu", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MAXU, MASK_MAXU, match_opcode, 0 },
- +{"andn", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ANDN, MASK_ANDN, match_opcode, 0 },
- +{"orn", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ORN, MASK_ORN, match_opcode, 0 },
- +{"xnor", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_XNOR, MASK_XNOR, match_opcode, 0 },
- +{"roli", 0, INSN_CLASS_B_OR_ZBB, "d,s,>", 0, (int) M_RL, match_never, INSN_MACRO }, /* rori */
- +{"rol", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ROL, MASK_ROL, match_opcode, 0 },
- +{"rol", 0, INSN_CLASS_B_OR_ZBB, "d,s,>", 0, (int) M_RL, match_never, INSN_MACRO }, /* rori */
- +{"rori", 0, INSN_CLASS_B_OR_ZBB, "d,s,>", MATCH_RORI, MASK_RORI, match_opcode, 0 },
- +{"ror", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ROR, MASK_ROR, match_opcode, 0 },
- +{"ror", 0, INSN_CLASS_B_OR_ZBB, "d,s,>", MATCH_RORI, MASK_RORI, match_opcode, INSN_ALIAS },
- {"sext.b", 0, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_SEXT_B, MASK_SEXT_B, match_opcode, 0 },
- {"sext.h", 0, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_SEXT_H, MASK_SEXT_H, match_opcode, 0 },
- -{"bmatflip", 64, INSN_CLASS_B_OR_ZBM, "d,s", MATCH_BMATFLIP, MASK_BMATFLIP, match_opcode, 0 },
- -{"crc32.b", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32_B, MASK_CRC32_B, match_opcode, 0 },
- -{"crc32.h", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32_H, MASK_CRC32_H, match_opcode, 0 },
- -{"crc32.w", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32_W, MASK_CRC32_W, match_opcode, 0 },
- -{"crc32.d", 64, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32_D, MASK_CRC32_D, match_opcode, 0 },
- -{"crc32c.b", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32C_B, MASK_CRC32C_B, match_opcode, 0 },
- -{"crc32c.h", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32C_H, MASK_CRC32C_H, match_opcode, 0 },
- -{"crc32c.w", 0, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32C_W, MASK_CRC32C_W, match_opcode, 0 },
- -{"crc32c.d", 64, INSN_CLASS_B_OR_ZBR, "d,s", MATCH_CRC32C_D, MASK_CRC32C_D, match_opcode, 0 },
- -{"sh1add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH1ADD, MASK_SH1ADD, match_opcode, 0 },
- -{"sh2add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH2ADD, MASK_SH2ADD, match_opcode, 0 },
- -{"sh3add", 0, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH3ADD, MASK_SH3ADD, match_opcode, 0 },
- +{"zext.h", 32, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_PACK, MASK_PACK | MASK_RS2, match_opcode, INSN_ALIAS }, /* pack with rs2=x0 */
- +{"zext.h", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_PACKW, MASK_PACKW | MASK_RS2, match_opcode, INSN_ALIAS }, /* packw with rs2=x0 */
- +{"clzw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CLZW, MASK_CLZW, match_opcode, 0 },
- +{"ctzw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CTZW, MASK_CTZW, match_opcode, 0 },
- +{"pcntw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_PCNTW, MASK_PCNTW, match_opcode, 0 },
- +{"roliw", 64, INSN_CLASS_B_OR_ZBB, "d,s,<", 0, (int) M_RL, match_never, INSN_MACRO }, /* roriw */
- +{"rolw", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ROLW, MASK_ROLW, match_opcode, 0 },
- +{"rolw", 64, INSN_CLASS_B_OR_ZBB, "d,s,<", 0, (int) M_RL, match_never, INSN_MACRO }, /* roriw */
- +{"roriw", 64, INSN_CLASS_B_OR_ZBB, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, 0 },
- +{"rorw", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_RORW, MASK_RORW, match_opcode, 0 },
- +{"rorw", 64, INSN_CLASS_B_OR_ZBB, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, INSN_ALIAS },
- +{"rev8", 0, INSN_CLASS_B_OR_ZBB, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc.b", 0, INSN_CLASS_B_OR_ZBB, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +
- {"clmul", 0, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMUL, MASK_CLMUL, match_opcode, 0 },
- {"clmulh", 0, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULH, MASK_CLMULH, match_opcode, 0 },
- {"clmulr", 0, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULR, MASK_CLMULR, match_opcode, 0 },
- -{"min", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MIN, MASK_MIN, match_opcode, 0 },
- -{"max", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MAX, MASK_MAX, match_opcode, 0 },
- -{"minu", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MINU, MASK_MINU, match_opcode, 0 },
- -{"maxu", 0, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_MAXU, MASK_MAXU, match_opcode, 0 },
- -{"shfli", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_SHFLI, MASK_SHFLI, match_opcode, 0 },
- -{"unshfli", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, 0 },
- -{"shfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SHFL, MASK_SHFL, match_opcode, 0 },
- -{"shfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_SHFLI, MASK_SHFLI, match_opcode, INSN_ALIAS },
- -{"unshfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_UNSHFL, MASK_UNSHFL, match_opcode, 0 },
- -{"unshfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, INSN_ALIAS },
- -{"xperm.n", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMN, MASK_XPERMN, match_opcode, 0 },
- -{"xperm.b", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMB, MASK_XPERMB, match_opcode, 0 },
- -{"xperm.h", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMH, MASK_XPERMH, match_opcode, 0 },
- -{"bdep", 0, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BDEP, MASK_BDEP, match_opcode, 0 },
- -{"bext", 0, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BEXT, MASK_BEXT, match_opcode, 0 },
- -{"zext.h", 32, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", MATCH_PACK, MASK_PACK | MASK_RS2, match_opcode, INSN_ALIAS },
- -{"zext.h", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", MATCH_PACKW, MASK_PACKW | MASK_RS2, match_opcode, INSN_ALIAS },
- -{"pack", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACK, MASK_PACK, match_opcode, 0 },
- -{"packu", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACKU, MASK_PACKU, match_opcode, 0 },
- -{"packh", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACKH, MASK_PACKH, match_opcode, 0 },
- -{"bmator", 64, INSN_CLASS_B_OR_ZBM, "d,s,t", MATCH_BMATOR, MASK_BMATOR, match_opcode, 0 },
- -{"bmatxor", 64, INSN_CLASS_B_OR_ZBM, "d,s,t", MATCH_BMATXOR, MASK_BMATXOR, match_opcode, 0 },
- -{"bfp", 0, INSN_CLASS_B_OR_ZBF, "d,s,t", MATCH_BFP, MASK_BFP, match_opcode, 0 },
- -{"slliu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,>", MATCH_SLLIU_W, MASK_SLLIU_W, match_opcode, 0 },
- -{"zext.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", MATCH_ADDU_W, MASK_ADDU_W | MASK_RS2, match_opcode, INSN_ALIAS },
- -{"addu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ADDU_W, MASK_ADDU_W, match_opcode, 0 },
- -{"subu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_SUBU_W, MASK_SUBU_W, match_opcode, 0 },
- -{"sloiw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, 0 },
- -{"sroiw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_SROIW, MASK_SROIW, match_opcode, 0 },
- -{"roliw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,<", 0, (int) M_RL, match_never, INSN_MACRO },
- -{"roriw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, 0 },
- -{"slow", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SLOW, MASK_SLOW, match_opcode, 0 },
- -{"slow", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, INSN_ALIAS },
- -{"srow", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SROW, MASK_SROW, match_opcode, 0 },
- -{"srow", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_SROIW, MASK_SROIW, match_opcode, INSN_ALIAS },
- -{"rolw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_ROLW, MASK_ROLW, match_opcode, 0 },
- -{"rolw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,<", 0, (int) M_RL, match_never, INSN_MACRO },
- -{"rorw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_RORW, MASK_RORW, match_opcode, 0 },
- -{"rorw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,<", MATCH_RORIW, MASK_RORIW, match_opcode, INSN_ALIAS },
- -{"sbclriw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBCLRIW, MASK_SBCLRIW, match_opcode, 0 },
- +
- +{"sbseti", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBSETI, MASK_SBSETI, match_opcode, 0 },
- +{"sbset", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBSET, MASK_SBSET, match_opcode, 0 },
- +{"sbset", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBSETI, MASK_SBSETI, match_opcode, INSN_ALIAS },
- +{"sbclri", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBCLRI, MASK_SBCLRI, match_opcode, 0 },
- +{"sbclr", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBCLR, MASK_SBCLR, match_opcode, 0 },
- +{"sbclr", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBCLRI, MASK_SBCLRI, match_opcode, INSN_ALIAS },
- +{"sbinvi", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBINVI, MASK_SBINVI, match_opcode, 0 },
- +{"sbinv", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBINV, MASK_SBINV, match_opcode, 0 },
- +{"sbinv", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBINVI, MASK_SBINVI, match_opcode, INSN_ALIAS },
- +{"sbexti", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBEXTI, MASK_SBEXTI, match_opcode, 0 },
- +{"sbext", 0, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBEXT, MASK_SBEXT, match_opcode, 0 },
- +{"sbext", 0, INSN_CLASS_B_OR_ZBS, "d,s,>", MATCH_SBEXTI, MASK_SBEXTI, match_opcode, INSN_ALIAS },
- {"sbsetiw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBSETIW, MASK_SBSETIW, match_opcode, 0 },
- -{"sbinviw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBINVIW, MASK_SBINVIW, match_opcode, 0 },
- -{"gorciw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_GORCIW, MASK_GORCIW, match_opcode, 0 },
- -{"greviw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_GREVIW, MASK_GREVIW, match_opcode, 0 },
- -{"sbclrw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBCLRW, MASK_SBCLRW, match_opcode, 0 },
- -{"sbclrw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBCLRIW, MASK_SBCLRIW, match_opcode, INSN_ALIAS },
- {"sbsetw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBSETW, MASK_SBSETW, match_opcode, 0 },
- {"sbsetw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBSETIW, MASK_SBSETIW, match_opcode, INSN_ALIAS },
- +{"sbclriw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBCLRIW, MASK_SBCLRIW, match_opcode, 0 },
- +{"sbclrw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBCLRW, MASK_SBCLRW, match_opcode, 0 },
- +{"sbclrw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBCLRIW, MASK_SBCLRIW, match_opcode, INSN_ALIAS },
- +{"sbinviw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBINVIW, MASK_SBINVIW, match_opcode, 0 },
- {"sbinvw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBINVW, MASK_SBINVW, match_opcode, 0 },
- {"sbinvw", 64, INSN_CLASS_B_OR_ZBS, "d,s,<", MATCH_SBINVIW, MASK_SBINVIW, match_opcode, INSN_ALIAS },
- -{"sbextw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBEXTW, MASK_SBEXTW, match_opcode, 0 },
- -{"gorcw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_GORCW, MASK_GORCW, match_opcode, 0 },
- -{"gorcw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_GORCIW, MASK_GORCIW, match_opcode, INSN_ALIAS },
- -{"grevw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_GREVW, MASK_GREVW, match_opcode, 0 },
- -{"grevw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_GREVIW, MASK_GREVIW, match_opcode, INSN_ALIAS },
- -{"fsliw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,<", 0, (int) M_FL, match_never, INSN_MACRO },
- -{"fsriw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,<", MATCH_FSRIW, MASK_FSRIW, match_opcode, 0 },
- -{"fslw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,t", MATCH_FSLW, MASK_FSLW, match_opcode, 0 },
- -{"fslw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,<", 0, (int) M_FL, match_never, INSN_MACRO },
- -{"fsrw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,t", MATCH_FSRW, MASK_FSRW, match_opcode, 0 },
- -{"fsrw", 64, INSN_CLASS_B_OR_ZBT, "d,s,r,<", MATCH_FSRIW, MASK_FSRIW, match_opcode, INSN_ALIAS },
- -{"clzw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CLZW, MASK_CLZW, match_opcode, 0 },
- -{"ctzw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_CTZW, MASK_CTZW, match_opcode, 0 },
- -{"pcntw", 64, INSN_CLASS_B_OR_ZBB, "d,s", MATCH_PCNTW, MASK_PCNTW, match_opcode, 0 },
- -{"sh1addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH1ADDU_W, MASK_SH1ADDU_W, match_opcode, 0 },
- -{"sh2addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH2ADDU_W, MASK_SH2ADDU_W, match_opcode, 0 },
- -{"sh3addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH3ADDU_W, MASK_SH3ADDU_W, match_opcode, 0 },
- -{"shflw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SHFLW, MASK_SHFLW, match_opcode, 0 },
- -{"unshflw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_UNSHFLW, MASK_UNSHFLW, match_opcode, 0 },
- -{"xperm.w", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMW, MASK_XPERMW, match_opcode, 0 },
- -{"bdepw", 64, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BDEPW, MASK_BDEPW, match_opcode, 0 },
- -{"bextw", 64, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BEXTW, MASK_BEXTW, match_opcode, 0 },
- -{"packw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACKW, MASK_PACKW, match_opcode, 0 },
- -{"packuw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACKUW, MASK_PACKUW, match_opcode, 0 },
- -{"bfpw", 64, INSN_CLASS_B_OR_ZBF, "d,s,t", MATCH_BFPW, MASK_BFPW, match_opcode, 0 },
- -
- -/* Bitmanip pseudo-instructions */
- -{"rev.p", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev2.n", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev.n", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev4.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev2.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev8.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev4.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev2.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev16.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev8.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev4.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev2.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev32", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev16", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev8", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev4", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev2", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"rev", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -
- -{"orc.p", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc2.n", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc.n", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc4.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc2.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc.b", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc8.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc4.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc2.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc.h", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc16.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc8.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc4.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc2.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc.w", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc32", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc16", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc8", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc4", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc2", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"orc", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -
- -{"zip.n", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip2.b", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip.b", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip4.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip2.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip8.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip4.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip2.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip16", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip8", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip4", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip2", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"zip", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -
- -{"unzip.n", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip2.b", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip.b", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip4.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip2.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip.h", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip8.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip4.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip2.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip.w", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip16", 64, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip8", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip4", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip2", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- -{"unzip", 0, INSN_CLASS_B_OR_ZBP, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"sbextw", 64, INSN_CLASS_B_OR_ZBS, "d,s,t", MATCH_SBEXTW, MASK_SBEXTW, match_opcode, 0 }, /* No sbextiw */
- +
- +/* Bitmanip instruction subset - unsure */
- +{"sloi", 0, INSN_CLASS_B, "d,s,>", MATCH_SLOI, MASK_SLOI, match_opcode, 0 },
- +{"sroi", 0, INSN_CLASS_B, "d,s,>", MATCH_SROI, MASK_SROI, match_opcode, 0 },
- +{"slo", 0, INSN_CLASS_B, "d,s,t", MATCH_SLO, MASK_SLO, match_opcode, 0 },
- +{"slo", 0, INSN_CLASS_B, "d,s,>", MATCH_SLOI, MASK_SLOI, match_opcode, INSN_ALIAS },
- +{"sro", 0, INSN_CLASS_B, "d,s,t", MATCH_SRO, MASK_SRO, match_opcode, 0 },
- +{"sro", 0, INSN_CLASS_B, "d,s,>", MATCH_SROI, MASK_SROI, match_opcode, INSN_ALIAS },
- +{"gorci", 0, INSN_CLASS_B, "d,s,>", MATCH_GORCI, MASK_GORCI, match_opcode, 0 },
- +{"grevi", 0, INSN_CLASS_B, "d,s,>", MATCH_GREVI, MASK_GREVI, match_opcode, 0 },
- +{"gorc", 0, INSN_CLASS_B, "d,s,t", MATCH_GORC, MASK_GORC, match_opcode, 0 },
- +{"gorc", 0, INSN_CLASS_B, "d,s,>", MATCH_GORCI, MASK_GORCI, match_opcode, INSN_ALIAS },
- +{"grev", 0, INSN_CLASS_B, "d,s,t", MATCH_GREV, MASK_GREV, match_opcode, 0 },
- +{"grev", 0, INSN_CLASS_B, "d,s,>", MATCH_GREVI, MASK_GREVI, match_opcode, INSN_ALIAS },
- +{"bmatflip", 64, INSN_CLASS_B, "d,s", MATCH_BMATFLIP, MASK_BMATFLIP, match_opcode, 0 },
- +{"shfli", 0, INSN_CLASS_B, "d,s,|", MATCH_SHFLI, MASK_SHFLI, match_opcode, 0 },
- +{"unshfli", 0, INSN_CLASS_B, "d,s,|", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, 0 },
- +{"shfl", 0, INSN_CLASS_B, "d,s,t", MATCH_SHFL, MASK_SHFL, match_opcode, 0 },
- +{"shfl", 0, INSN_CLASS_B, "d,s,|", MATCH_SHFLI, MASK_SHFLI, match_opcode, INSN_ALIAS },
- +{"unshfl", 0, INSN_CLASS_B, "d,s,t", MATCH_UNSHFL, MASK_UNSHFL, match_opcode, 0 },
- +{"unshfl", 0, INSN_CLASS_B, "d,s,|", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, INSN_ALIAS },
- +{"xperm.n", 0, INSN_CLASS_B, "d,s,t", MATCH_XPERMN, MASK_XPERMN, match_opcode, 0 },
- +{"xperm.b", 0, INSN_CLASS_B, "d,s,t", MATCH_XPERMB, MASK_XPERMB, match_opcode, 0 },
- +{"xperm.h", 0, INSN_CLASS_B, "d,s,t", MATCH_XPERMH, MASK_XPERMH, match_opcode, 0 },
- +{"bdep", 0, INSN_CLASS_B, "d,s,t", MATCH_BDEP, MASK_BDEP, match_opcode, 0 },
- +{"bext", 0, INSN_CLASS_B, "d,s,t", MATCH_BEXT, MASK_BEXT, match_opcode, 0 },
- +{"pack", 0, INSN_CLASS_B, "d,s,t", MATCH_PACK, MASK_PACK, match_opcode, 0 },
- +{"packu", 0, INSN_CLASS_B, "d,s,t", MATCH_PACKU, MASK_PACKU, match_opcode, 0 },
- +{"packh", 0, INSN_CLASS_B, "d,s,t", MATCH_PACKH, MASK_PACKH, match_opcode, 0 },
- +{"bmator", 64, INSN_CLASS_B, "d,s,t", MATCH_BMATOR, MASK_BMATOR, match_opcode, 0 },
- +{"bmatxor", 64, INSN_CLASS_B, "d,s,t", MATCH_BMATXOR, MASK_BMATXOR, match_opcode, 0 },
- +{"bfp", 0, INSN_CLASS_B, "d,s,t", MATCH_BFP, MASK_BFP, match_opcode, 0 },
- +{"subu.w", 64, INSN_CLASS_B, "d,s,t", MATCH_SUBU_W, MASK_SUBU_W, match_opcode, 0 },
- +{"sloiw", 64, INSN_CLASS_B, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, 0 },
- +{"sroiw", 64, INSN_CLASS_B, "d,s,<", MATCH_SROIW, MASK_SROIW, match_opcode, 0 },
- +{"slow", 64, INSN_CLASS_B, "d,s,t", MATCH_SLOW, MASK_SLOW, match_opcode, 0 },
- +{"slow", 64, INSN_CLASS_B, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, INSN_ALIAS },
- +{"srow", 64, INSN_CLASS_B, "d,s,t", MATCH_SROW, MASK_SROW, match_opcode, 0 },
- +{"srow", 64, INSN_CLASS_B, "d,s,<", MATCH_SROIW, MASK_SROIW, match_opcode, INSN_ALIAS },
- +{"gorciw", 64, INSN_CLASS_B, "d,s,<", MATCH_GORCIW, MASK_GORCIW, match_opcode, 0 },
- +{"greviw", 64, INSN_CLASS_B, "d,s,<", MATCH_GREVIW, MASK_GREVIW, match_opcode, 0 },
- +{"gorcw", 64, INSN_CLASS_B, "d,s,t", MATCH_GORCW, MASK_GORCW, match_opcode, 0 },
- +{"gorcw", 64, INSN_CLASS_B, "d,s,<", MATCH_GORCIW, MASK_GORCIW, match_opcode, INSN_ALIAS },
- +{"grevw", 64, INSN_CLASS_B, "d,s,t", MATCH_GREVW, MASK_GREVW, match_opcode, 0 },
- +{"grevw", 64, INSN_CLASS_B, "d,s,<", MATCH_GREVIW, MASK_GREVIW, match_opcode, INSN_ALIAS },
- +{"shflw", 64, INSN_CLASS_B, "d,s,t", MATCH_SHFLW, MASK_SHFLW, match_opcode, 0 },
- +{"unshflw", 64, INSN_CLASS_B, "d,s,t", MATCH_UNSHFLW, MASK_UNSHFLW, match_opcode, 0 },
- +{"xperm.w", 64, INSN_CLASS_B, "d,s,t", MATCH_XPERMW, MASK_XPERMW, match_opcode, 0 },
- +{"bdepw", 64, INSN_CLASS_B, "d,s,t", MATCH_BDEPW, MASK_BDEPW, match_opcode, 0 },
- +{"bextw", 64, INSN_CLASS_B, "d,s,t", MATCH_BEXTW, MASK_BEXTW, match_opcode, 0 },
- +{"packw", 64, INSN_CLASS_B, "d,s,t", MATCH_PACKW, MASK_PACKW, match_opcode, 0 },
- +{"packuw", 64, INSN_CLASS_B, "d,s,t", MATCH_PACKUW, MASK_PACKUW, match_opcode, 0 },
- +{"bfpw", 64, INSN_CLASS_B, "d,s,t", MATCH_BFPW, MASK_BFPW, match_opcode, 0 },
- +
- +{"cmix", 0, INSN_CLASS_ZBT, "d,t,s,r", MATCH_CMIX, MASK_CMIX, match_opcode, 0 },
- +{"cmov", 0, INSN_CLASS_ZBT, "d,t,s,r", MATCH_CMOV, MASK_CMOV, match_opcode, 0 },
- +{"fsli", 0, INSN_CLASS_ZBT, "d,s,r,>", 0, (int) M_FL, match_never, INSN_MACRO }, /* fsri */
- +{"fsl", 0, INSN_CLASS_ZBT, "d,s,r,t", MATCH_FSL, MASK_FSL, match_opcode, 0 },
- +{"fsl", 0, INSN_CLASS_ZBT, "d,s,r,>", 0, (int) M_FL, match_never, INSN_MACRO }, /* fsri */
- +{"fsri", 0, INSN_CLASS_ZBT, "d,s,r,>", MATCH_FSRI, MASK_FSRI, match_opcode, 0 },
- +{"fsr", 0, INSN_CLASS_ZBT, "d,s,r,t", MATCH_FSR, MASK_FSR, match_opcode, 0 },
- +{"fsr", 0, INSN_CLASS_ZBT, "d,s,r,>", MATCH_FSRI, MASK_FSRI, match_opcode, INSN_ALIAS },
- +{"fsliw", 64, INSN_CLASS_ZBT, "d,s,r,<", 0, (int) M_FL, match_never, INSN_MACRO }, /* fsriw */
- +{"fslw", 64, INSN_CLASS_ZBT, "d,s,r,t", MATCH_FSLW, MASK_FSLW, match_opcode, 0 },
- +{"fslw", 64, INSN_CLASS_ZBT, "d,s,r,<", 0, (int) M_FL, match_never, INSN_MACRO }, /* fsriw */
- +{"fsriw", 64, INSN_CLASS_ZBT, "d,s,r,<", MATCH_FSRIW, MASK_FSRIW, match_opcode, 0 },
- +{"fsrw", 64, INSN_CLASS_ZBT, "d,s,r,t", MATCH_FSRW, MASK_FSRW, match_opcode, 0 },
- +{"fsrw", 64, INSN_CLASS_ZBT, "d,s,r,<", MATCH_FSRIW, MASK_FSRIW, match_opcode, INSN_ALIAS },
- +
- +{"crc32.b", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_B, MASK_CRC32_B, match_opcode, 0 },
- +{"crc32.h", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_H, MASK_CRC32_H, match_opcode, 0 },
- +{"crc32.w", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_W, MASK_CRC32_W, match_opcode, 0 },
- +{"crc32c.b", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_B, MASK_CRC32C_B, match_opcode, 0 },
- +{"crc32c.h", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_H, MASK_CRC32C_H, match_opcode, 0 },
- +{"crc32c.w", 0, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_W, MASK_CRC32C_W, match_opcode, 0 },
- +{"crc32.d", 64, INSN_CLASS_ZBR, "d,s", MATCH_CRC32_D, MASK_CRC32_D, match_opcode, 0 },
- +{"crc32c.d", 64, INSN_CLASS_ZBR, "d,s", MATCH_CRC32C_D, MASK_CRC32C_D, match_opcode, 0 },
- +
- +/* Bitmanip pseudo-instructions */
- +{"rev.p", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev2.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev4.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev2.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev8.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev4.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev2.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev16.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev8.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev4.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev2.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev32", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev16", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev4", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev2", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"rev", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +
- +{"orc.p", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc2.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc4.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc2.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc8.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc4.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc2.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc16.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc8.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc4.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc2.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc32", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc16", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc8", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc4", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc2", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"orc", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +
- +{"zip.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip2.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip4.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip2.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip8.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip4.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip2.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip16", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip8", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip4", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip2", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"zip", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +
- +{"unzip.n", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip2.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip.b", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip4.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip2.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip.h", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip8.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip4.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip2.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip.w", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip16", 64, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip8", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip4", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip2", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
- +{"unzip", 0, INSN_CLASS_B, "d,s", 0, (int) M_PERM, match_never, INSN_MACRO },
-
- /* Single-precision floating-point instruction subset */
- {"frcsr", 0, INSN_CLASS_F, "d", MATCH_FRCSR, MASK_FRCSR, match_opcode, INSN_ALIAS },
- --
- 2.33.0
|