123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- From 9f3047973b9f80b2b95989c86762502e456e59cf Mon Sep 17 00:00:00 2001
- From: Nelson Chu <nelson.chu@sifive.com>
- Date: Thu, 3 Dec 2020 15:35:49 +0800
- Subject: [PATCH 39/48] RISC-V: Added/Removed/Updated instructions to the
- riscv-bitmanip-20201107.
- * Added xperm.[nbhw] instructions.
- * Regularized min vs. minu encoding to match slt vs. sltu (swap minu and max).
- * Removed add[i]wu, subwu and clmul[rh]w.
- ---
- include/opcode/riscv-opc.h | 34 ++++++++++++++--------------------
- opcodes/riscv-opc.c | 10 ++++------
- 2 files changed, 18 insertions(+), 26 deletions(-)
- diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
- index 426db0ca5f..500be26f0f 100644
- --- a/include/opcode/riscv-opc.h
- +++ b/include/opcode/riscv-opc.h
- @@ -279,9 +279,9 @@
- #define MASK_CLMULH 0xfe00707f
- #define MATCH_MIN 0xa004033
- #define MASK_MIN 0xfe00707f
- -#define MATCH_MAX 0xa005033
- +#define MATCH_MAX 0xa006033
- #define MASK_MAX 0xfe00707f
- -#define MATCH_MINU 0xa006033
- +#define MATCH_MINU 0xa005033
- #define MASK_MINU 0xfe00707f
- #define MATCH_MAXU 0xa007033
- #define MASK_MAXU 0xfe00707f
- @@ -289,6 +289,12 @@
- #define MASK_SHFL 0xfe00707f
- #define MATCH_UNSHFL 0x8005033
- #define MASK_UNSHFL 0xfe00707f
- +#define MATCH_XPERMN 0x28002033
- +#define MASK_XPERMN 0xfe00707f
- +#define MATCH_XPERMB 0x28004033
- +#define MASK_XPERMB 0xfe00707f
- +#define MATCH_XPERMH 0x28006033
- +#define MASK_XPERMH 0xfe00707f
- #define MATCH_BEXT 0x8006033
- #define MASK_BEXT 0xfe00707f
- #define MATCH_BDEP 0x48006033
- @@ -315,14 +321,8 @@
- #define MASK_BMATOR 0xfe00707f
- #define MATCH_BMATXOR 0x48003033
- #define MASK_BMATXOR 0xfe00707f
- -#define MATCH_ADDIWU 0x401b
- -#define MASK_ADDIWU 0x707f
- #define MATCH_SLLIU_W 0x800101b
- #define MASK_SLLIU_W 0xfc00707f
- -#define MATCH_ADDWU 0xa00003b
- -#define MASK_ADDWU 0xfe00707f
- -#define MATCH_SUBWU 0x4a00003b
- -#define MASK_SUBWU 0xfe00707f
- #define MATCH_ADDU_W 0x800003b
- #define MASK_ADDU_W 0xfe00707f
- #define MATCH_SUBU_W 0x4800003b
- @@ -381,16 +381,12 @@
- #define MASK_SH2ADDU_W 0xfe00707f
- #define MATCH_SH3ADDU_W 0x2000603b
- #define MASK_SH3ADDU_W 0xfe00707f
- -#define MATCH_CLMULW 0xa00103b
- -#define MASK_CLMULW 0xfe00707f
- -#define MATCH_CLMULRW 0xa00203b
- -#define MASK_CLMULRW 0xfe00707f
- -#define MATCH_CLMULHW 0xa00303b
- -#define MASK_CLMULHW 0xfe00707f
- #define MATCH_SHFLW 0x800103b
- #define MASK_SHFLW 0xfe00707f
- #define MATCH_UNSHFLW 0x800503b
- #define MASK_UNSHFLW 0xfe00707f
- +#define MATCH_XPERMW 0x28000033
- +#define MASK_XPERMW 0xfe00707f
- #define MATCH_BEXTW 0x800603b
- #define MASK_BEXTW 0xfe00707f
- #define MATCH_BDEPW 0x4800603b
- @@ -3706,6 +3702,9 @@ DECLARE_INSN(minu, MATCH_MINU, MASK_MINU)
- DECLARE_INSN(maxu, MATCH_MAXU, MASK_MAXU)
- DECLARE_INSN(shfl, MATCH_SHFL, MASK_SHFL)
- DECLARE_INSN(unshfl, MATCH_UNSHFL, MASK_UNSHFL)
- +DECLARE_INSN(xperm_n, MATCH_XPERMN, MASK_XPERMN)
- +DECLARE_INSN(xperm_b, MATCH_XPERMB, MASK_XPERMB)
- +DECLARE_INSN(xperm_h, MATCH_XPERMH, MASK_XPERMH)
- DECLARE_INSN(bext, MATCH_BEXT, MASK_BEXT)
- DECLARE_INSN(bdep, MATCH_BDEP, MASK_BDEP)
- DECLARE_INSN(pack, MATCH_PACK, MASK_PACK)
- @@ -3719,10 +3718,7 @@ DECLARE_INSN(crc32_d, MATCH_CRC32_D, MASK_CRC32_D)
- DECLARE_INSN(crc32c_d, MATCH_CRC32C_D, MASK_CRC32C_D)
- DECLARE_INSN(bmator, MATCH_BMATOR, MASK_BMATOR)
- DECLARE_INSN(bmatxor, MATCH_BMATXOR, MASK_BMATXOR)
- -DECLARE_INSN(addiwu, MATCH_ADDIWU, MASK_ADDIWU)
- DECLARE_INSN(slliu_w, MATCH_SLLIU_W, MASK_SLLIU_W)
- -DECLARE_INSN(addwu, MATCH_ADDWU, MASK_ADDWU)
- -DECLARE_INSN(subwu, MATCH_SUBWU, MASK_SUBWU)
- DECLARE_INSN(addu_w, MATCH_ADDU_W, MASK_ADDU_W)
- DECLARE_INSN(subu_w, MATCH_SUBU_W, MASK_SUBU_W)
- DECLARE_INSN(slow, MATCH_SLOW, MASK_SLOW)
- @@ -3752,11 +3748,9 @@ DECLARE_INSN(pcntw, MATCH_PCNTW, MASK_PCNTW)
- DECLARE_INSN(sh1addu_w, MATCH_SH1ADDU_W, MASK_SH1ADDU_W)
- DECLARE_INSN(sh2addu_w, MATCH_SH2ADDU_W, MASK_SH2ADDU_W)
- DECLARE_INSN(sh3addu_w, MATCH_SH3ADDU_W, MASK_SH3ADDU_W)
- -DECLARE_INSN(clmulw, MATCH_CLMULW, MASK_CLMULW)
- -DECLARE_INSN(clmulrw, MATCH_CLMULRW, MASK_CLMULRW)
- -DECLARE_INSN(clmulhw, MATCH_CLMULHW, MASK_CLMULHW)
- DECLARE_INSN(shflw, MATCH_SHFLW, MASK_SHFLW)
- DECLARE_INSN(unshflw, MATCH_UNSHFLW, MASK_UNSHFLW)
- +DECLARE_INSN(xperm_w, MATCH_XPERMW, MASK_XPERMW)
- DECLARE_INSN(bextw, MATCH_BEXTW, MASK_BEXTW)
- DECLARE_INSN(bdepw, MATCH_BDEPW, MASK_BDEPW)
- DECLARE_INSN(packw, MATCH_PACKW, MASK_PACKW)
- diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
- index bf36ada39c..f55e1281ed 100644
- --- a/opcodes/riscv-opc.c
- +++ b/opcodes/riscv-opc.c
- @@ -1056,6 +1056,9 @@ const struct riscv_opcode riscv_opcodes[] =
- {"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 },
- {"pack", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACK, MASK_PACK, match_opcode, 0 },
- @@ -1064,10 +1067,7 @@ const struct riscv_opcode riscv_opcodes[] =
- {"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 },
- -{"addiwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,j", MATCH_ADDIWU, MASK_ADDIWU, match_opcode, 0 },
- {"slliu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,>", MATCH_SLLIU_W, MASK_SLLIU_W, match_opcode, 0 },
- -{"addwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ADDWU, MASK_ADDWU, match_opcode, 0 },
- -{"subwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_SUBWU, MASK_SUBWU, match_opcode, 0 },
- {"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 },
- @@ -1110,11 +1110,9 @@ const struct riscv_opcode riscv_opcodes[] =
- {"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 },
- -{"clmulw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULW, MASK_CLMULW, match_opcode, 0 },
- -{"clmulhw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULHW, MASK_CLMULHW, match_opcode, 0 },
- -{"clmulrw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULRW, MASK_CLMULRW, 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 },
- --
- 2.33.0
|