diff options
author | Mary Bennett <mary.bennett682@gmail.com> | 2024-08-30 04:46:58 +0100 |
---|---|---|
committer | Nelson Chu <nelson@rivosinc.com> | 2024-09-03 12:02:28 +0800 |
commit | a6ecb18b796b2a7342ab72d14c6bd440b718030f (patch) | |
tree | 20e4c5d6e37710ccdd16d74428be66f4e3e612f4 /include | |
parent | cf525621820060a5c77efa153e6d2ec6a5ad47c9 (diff) | |
download | binutils-a6ecb18b796b2a7342ab72d14c6bd440b718030f.zip binutils-a6ecb18b796b2a7342ab72d14c6bd440b718030f.tar.gz binutils-a6ecb18b796b2a7342ab72d14c6bd440b718030f.tar.bz2 |
RISC-V: Add support for XCVsimd extension in CV32E40P
Spec: https://docs.openhwgroup.org/projects/cv32e40p-user-manual/en/latest/instruction_set_extensions.html
Contributors:
Mary Bennett <mary.bennett682@gmail.com>
Nandni Jamnadas <nandni.jamnadas@embecosm.com>
Pietra Ferreira <pietra.ferreira@embecosm.com>
Charlie Keaney
Jessica Mills
Craig Blackmore <craig.blackmore@embecosm.com>
Simon Cook <simon.cook@embecosm.com>
Jeremy Bennett <jeremy.bennett@embecosm.com>
Helene Chelin <helene.chelin@embecosm.com>
bfd/ChangeLog:
* elfxx-riscv.c (riscv_multi_subset_supports): Add `xcvsimd`
instruction class.
(riscv_multi_subset_supports_ext): Likewise.
gas/ChangeLog:
* NEWS: Updated.
* config/tc-riscv.c (validate_riscv_insn): Add custom operands.
(riscv_ip): Likewise.
* doc/c-riscv.texi: Note XCVsimd as an additional ISA extension
for CORE-V.
* testsuite/gas/riscv/march-help.l: Add xcvsimd.
* testsuite/gas/riscv/x-cv-simd.d: New test.
* testsuite/gas/riscv/x-cv-simd.s: New test.
* testsuite/gas/riscv/x-cv-simd-fail.d: New test.
* testsuite/gas/riscv/x-cv-simd-fail.l: New test.
* testsuite/gas/riscv/x-cv-simd-fail.s: New test.
include/ChangeLog:
* opcode/riscv-opc.h: Add corresponding MATCH and MASK macros
for XCVsimd.
* opcode/riscv.h: Add corresponding EXTRACT and ENCODE macros
for XCVsimd.
(enum riscv_insn_class): Add the XCVsimd instruction class.
opcodes/ChangeLog:
* riscv-dis.c (print_insn_args): Add custom operands.
* riscv-opc.c: Add XCVsimd instructions.
Diffstat (limited to 'include')
-rw-r--r-- | include/opcode/riscv-opc.h | 443 | ||||
-rw-r--r-- | include/opcode/riscv.h | 9 |
2 files changed, 452 insertions, 0 deletions
diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index b10f3e2..73ee811 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -2687,6 +2687,449 @@ #define MASK_CV_BCLR 0xc000707f #define MASK_CV_BSET 0xc000707f #define MASK_CV_BITREV 0xf800707f +/* Vendor-specific (CORE-V) Xcvsimd instructions. */ +#define MATCH_CV_ADD_H 0x7b +#define MATCH_CV_ADD_B 0x107b +#define MATCH_CV_ADD_SC_H 0x407b +#define MATCH_CV_ADD_SC_B 0x507b +#define MATCH_CV_ADD_SCI_H 0x607b +#define MATCH_CV_ADD_SCI_B 0x707b +#define MATCH_CV_SUB_H 0x800007b +#define MATCH_CV_SUB_B 0x800107b +#define MATCH_CV_SUB_SC_H 0x800407b +#define MATCH_CV_SUB_SC_B 0x800507b +#define MATCH_CV_SUB_SCI_H 0x800607b +#define MATCH_CV_SUB_SCI_B 0x800707b +#define MATCH_CV_AVG_H 0x1000007b +#define MATCH_CV_AVG_B 0x1000107b +#define MATCH_CV_AVG_SC_H 0x1000407b +#define MATCH_CV_AVG_SC_B 0x1000507b +#define MATCH_CV_AVG_SCI_H 0x1000607b +#define MATCH_CV_AVG_SCI_B 0x1000707b +#define MATCH_CV_AVGU_H 0x1800007b +#define MATCH_CV_AVGU_B 0x1800107b +#define MATCH_CV_AVGU_SC_H 0x1800407b +#define MATCH_CV_AVGU_SC_B 0x1800507b +#define MATCH_CV_AVGU_SCI_H 0x1800607b +#define MATCH_CV_AVGU_SCI_B 0x1800707b +#define MATCH_CV_MIN_H 0x2000007b +#define MATCH_CV_MIN_B 0x2000107b +#define MATCH_CV_MIN_SC_H 0x2000407b +#define MATCH_CV_MIN_SC_B 0x2000507b +#define MATCH_CV_MIN_SCI_H 0x2000607b +#define MATCH_CV_MIN_SCI_B 0x2000707b +#define MATCH_CV_MINU_H 0x2800007b +#define MATCH_CV_MINU_B 0x2800107b +#define MATCH_CV_MINU_SC_H 0x2800407b +#define MATCH_CV_MINU_SC_B 0x2800507b +#define MATCH_CV_MINU_SCI_H 0x2800607b +#define MATCH_CV_MINU_SCI_B 0x2800707b +#define MATCH_CV_MAX_H 0x3000007b +#define MATCH_CV_MAX_B 0x3000107b +#define MATCH_CV_MAX_SC_H 0x3000407b +#define MATCH_CV_MAX_SC_B 0x3000507b +#define MATCH_CV_MAX_SCI_H 0x3000607b +#define MATCH_CV_MAX_SCI_B 0x3000707b +#define MATCH_CV_MAXU_H 0x3800007b +#define MATCH_CV_MAXU_B 0x3800107b +#define MATCH_CV_MAXU_SC_H 0x3800407b +#define MATCH_CV_MAXU_SC_B 0x3800507b +#define MATCH_CV_MAXU_SCI_H 0x3800607b +#define MATCH_CV_MAXU_SCI_B 0x3800707b +#define MATCH_CV_SRL_H 0x4000007b +#define MATCH_CV_SRL_B 0x4000107b +#define MATCH_CV_SRL_SC_H 0x4000407b +#define MATCH_CV_SRL_SC_B 0x4000507b +#define MATCH_CV_SRL_SCI_H 0x4000607b +#define MATCH_CV_SRL_SCI_B 0x4000707b +#define MATCH_CV_SRA_H 0x4800007b +#define MATCH_CV_SRA_B 0x4800107b +#define MATCH_CV_SRA_SC_H 0x4800407b +#define MATCH_CV_SRA_SC_B 0x4800507b +#define MATCH_CV_SRA_SCI_H 0x4800607b +#define MATCH_CV_SRA_SCI_B 0x4800707b +#define MATCH_CV_SLL_H 0x5000007b +#define MATCH_CV_SLL_B 0x5000107b +#define MATCH_CV_SLL_SC_H 0x5000407b +#define MATCH_CV_SLL_SC_B 0x5000507b +#define MATCH_CV_SLL_SCI_H 0x5000607b +#define MATCH_CV_SLL_SCI_B 0x5000707b +#define MATCH_CV_OR_H 0x5800007b +#define MATCH_CV_OR_B 0x5800107b +#define MATCH_CV_OR_SC_H 0x5800407b +#define MATCH_CV_OR_SC_B 0x5800507b +#define MATCH_CV_OR_SCI_H 0x5800607b +#define MATCH_CV_OR_SCI_B 0x5800707b +#define MATCH_CV_XOR_H 0x6000007b +#define MATCH_CV_XOR_B 0x6000107b +#define MATCH_CV_XOR_SC_H 0x6000407b +#define MATCH_CV_XOR_SC_B 0x6000507b +#define MATCH_CV_XOR_SCI_H 0x6000607b +#define MATCH_CV_XOR_SCI_B 0x6000707b +#define MATCH_CV_AND_H 0x6800007b +#define MATCH_CV_AND_B 0x6800107b +#define MATCH_CV_AND_SC_H 0x6800407b +#define MATCH_CV_AND_SC_B 0x6800507b +#define MATCH_CV_AND_SCI_H 0x6800607b +#define MATCH_CV_AND_SCI_B 0x6800707b +#define MATCH_CV_ABS_H 0x7000007b +#define MATCH_CV_ABS_B 0x7000107b +#define MATCH_CV_DOTUP_H 0x8000007b +#define MATCH_CV_DOTUP_B 0x8000107b +#define MATCH_CV_DOTUP_SC_H 0x8000407b +#define MATCH_CV_DOTUP_SC_B 0x8000507b +#define MATCH_CV_DOTUP_SCI_H 0x8000607b +#define MATCH_CV_DOTUP_SCI_B 0x8000707b +#define MATCH_CV_DOTUSP_H 0x8800007b +#define MATCH_CV_DOTUSP_B 0x8800107b +#define MATCH_CV_DOTUSP_SC_H 0x8800407b +#define MATCH_CV_DOTUSP_SC_B 0x8800507b +#define MATCH_CV_DOTUSP_SCI_H 0x8800607b +#define MATCH_CV_DOTUSP_SCI_B 0x8800707b +#define MATCH_CV_DOTSP_H 0x9000007b +#define MATCH_CV_DOTSP_B 0x9000107b +#define MATCH_CV_DOTSP_SC_H 0x9000407b +#define MATCH_CV_DOTSP_SC_B 0x9000507b +#define MATCH_CV_DOTSP_SCI_H 0x9000607b +#define MATCH_CV_DOTSP_SCI_B 0x9000707b +#define MATCH_CV_SDOTUP_H 0x9800007b +#define MATCH_CV_SDOTUP_B 0x9800107b +#define MATCH_CV_SDOTUP_SC_H 0x9800407b +#define MATCH_CV_SDOTUP_SC_B 0x9800507b +#define MATCH_CV_SDOTUP_SCI_H 0x9800607b +#define MATCH_CV_SDOTUP_SCI_B 0x9800707b +#define MATCH_CV_SDOTUSP_H 0xa000007b +#define MATCH_CV_SDOTUSP_B 0xa000107b +#define MATCH_CV_SDOTUSP_SC_H 0xa000407b +#define MATCH_CV_SDOTUSP_SC_B 0xa000507b +#define MATCH_CV_SDOTUSP_SCI_H 0xa000607b +#define MATCH_CV_SDOTUSP_SCI_B 0xa000707b +#define MATCH_CV_SDOTSP_H 0xa800007b +#define MATCH_CV_SDOTSP_B 0xa800107b +#define MATCH_CV_SDOTSP_SC_H 0xa800407b +#define MATCH_CV_SDOTSP_SC_B 0xa800507b +#define MATCH_CV_SDOTSP_SCI_H 0xa800607b +#define MATCH_CV_SDOTSP_SCI_B 0xa800707b +#define MATCH_CV_EXTRACT_H 0xb800007b +#define MATCH_CV_EXTRACT_B 0xb800107b +#define MATCH_CV_EXTRACTU_H 0xb800207b +#define MATCH_CV_EXTRACTU_B 0xb800307b +#define MATCH_CV_INSERT_H 0xb800407b +#define MATCH_CV_INSERT_B 0xb800507b +#define MATCH_CV_SHUFFLE_H 0xc000007b +#define MATCH_CV_SHUFFLE_B 0xc000107b +#define MATCH_CV_SHUFFLE_SCI_H 0xc000607b +#define MATCH_CV_SHUFFLEI0_SCI_B 0xc000707b +#define MATCH_CV_SHUFFLEI1_SCI_B 0xc800707b +#define MATCH_CV_SHUFFLEI2_SCI_B 0xd000707b +#define MATCH_CV_SHUFFLEI3_SCI_B 0xd800707b +#define MATCH_CV_SHUFFLE2_H 0xe000007b +#define MATCH_CV_SHUFFLE2_B 0xe000107b +#define MATCH_CV_PACK 0xf000007b +#define MATCH_CV_PACK_H 0xf200007b +#define MATCH_CV_PACKHI_B 0xfa00107b +#define MATCH_CV_PACKLO_B 0xf800107b +#define MATCH_CV_CMPEQ_H 0x400007b +#define MATCH_CV_CMPEQ_B 0x400107b +#define MATCH_CV_CMPEQ_SC_H 0x400407b +#define MATCH_CV_CMPEQ_SC_B 0x400507b +#define MATCH_CV_CMPEQ_SCI_H 0x400607b +#define MATCH_CV_CMPEQ_SCI_B 0x400707b +#define MATCH_CV_CMPNE_H 0xc00007b +#define MATCH_CV_CMPNE_B 0xc00107b +#define MATCH_CV_CMPNE_SC_H 0xc00407b +#define MATCH_CV_CMPNE_SC_B 0xc00507b +#define MATCH_CV_CMPNE_SCI_H 0xc00607b +#define MATCH_CV_CMPNE_SCI_B 0xc00707b +#define MATCH_CV_CMPGT_H 0x1400007b +#define MATCH_CV_CMPGT_B 0x1400107b +#define MATCH_CV_CMPGT_SC_H 0x1400407b +#define MATCH_CV_CMPGT_SC_B 0x1400507b +#define MATCH_CV_CMPGT_SCI_H 0x1400607b +#define MATCH_CV_CMPGT_SCI_B 0x1400707b +#define MATCH_CV_CMPGE_H 0x1c00007b +#define MATCH_CV_CMPGE_B 0x1c00107b +#define MATCH_CV_CMPGE_SC_H 0x1c00407b +#define MATCH_CV_CMPGE_SC_B 0x1c00507b +#define MATCH_CV_CMPGE_SCI_H 0x1c00607b +#define MATCH_CV_CMPGE_SCI_B 0x1c00707b +#define MATCH_CV_CMPLT_H 0x2400007b +#define MATCH_CV_CMPLT_B 0x2400107b +#define MATCH_CV_CMPLT_SC_H 0x2400407b +#define MATCH_CV_CMPLT_SC_B 0x2400507b +#define MATCH_CV_CMPLT_SCI_H 0x2400607b +#define MATCH_CV_CMPLT_SCI_B 0x2400707b +#define MATCH_CV_CMPLE_H 0x2c00007b +#define MATCH_CV_CMPLE_B 0x2c00107b +#define MATCH_CV_CMPLE_SC_H 0x2c00407b +#define MATCH_CV_CMPLE_SC_B 0x2c00507b +#define MATCH_CV_CMPLE_SCI_H 0x2c00607b +#define MATCH_CV_CMPLE_SCI_B 0x2c00707b +#define MATCH_CV_CMPGTU_H 0x3400007b +#define MATCH_CV_CMPGTU_B 0x3400107b +#define MATCH_CV_CMPGTU_SC_H 0x3400407b +#define MATCH_CV_CMPGTU_SC_B 0x3400507b +#define MATCH_CV_CMPGTU_SCI_H 0x3400607b +#define MATCH_CV_CMPGTU_SCI_B 0x3400707b +#define MATCH_CV_CMPGEU_H 0x3c00007b +#define MATCH_CV_CMPGEU_B 0x3c00107b +#define MATCH_CV_CMPGEU_SC_H 0x3c00407b +#define MATCH_CV_CMPGEU_SC_B 0x3c00507b +#define MATCH_CV_CMPGEU_SCI_H 0x3c00607b +#define MATCH_CV_CMPGEU_SCI_B 0x3c00707b +#define MATCH_CV_CMPLTU_H 0x4400007b +#define MATCH_CV_CMPLTU_B 0x4400107b +#define MATCH_CV_CMPLTU_SC_H 0x4400407b +#define MATCH_CV_CMPLTU_SC_B 0x4400507b +#define MATCH_CV_CMPLTU_SCI_H 0x4400607b +#define MATCH_CV_CMPLTU_SCI_B 0x4400707b +#define MATCH_CV_CMPLEU_H 0x4c00007b +#define MATCH_CV_CMPLEU_B 0x4c00107b +#define MATCH_CV_CMPLEU_SC_H 0x4c00407b +#define MATCH_CV_CMPLEU_SC_B 0x4c00507b +#define MATCH_CV_CMPLEU_SCI_H 0x4c00607b +#define MATCH_CV_CMPLEU_SCI_B 0x4c00707b +#define MATCH_CV_CPLXMUL_R 0x5400007b +#define MATCH_CV_CPLXMUL_I 0x5600007b +#define MATCH_CV_CPLXMUL_R_DIV2 0x5400207b +#define MATCH_CV_CPLXMUL_I_DIV2 0x5600207b +#define MATCH_CV_CPLXMUL_R_DIV4 0x5400407b +#define MATCH_CV_CPLXMUL_I_DIV4 0x5600407b +#define MATCH_CV_CPLXMUL_R_DIV8 0x5400607b +#define MATCH_CV_CPLXMUL_I_DIV8 0x5600607b +#define MATCH_CV_CPLXCONJ 0x5c00007b +#define MATCH_CV_SUBROTMJ 0x6400007b +#define MATCH_CV_SUBROTMJ_DIV2 0x6400207b +#define MATCH_CV_SUBROTMJ_DIV4 0x6400407b +#define MATCH_CV_SUBROTMJ_DIV8 0x6400607b +#define MATCH_CV_ADD_DIV2 0x6c00207b +#define MATCH_CV_ADD_DIV4 0x6c00407b +#define MATCH_CV_ADD_DIV8 0x6c00607b +#define MATCH_CV_SUB_DIV2 0x7400207b +#define MATCH_CV_SUB_DIV4 0x7400407b +#define MATCH_CV_SUB_DIV8 0x7400607b +#define MASK_CV_ADD_H 0xfe00707f +#define MASK_CV_ADD_B 0xfe00707f +#define MASK_CV_ADD_SC_H 0xfe00707f +#define MASK_CV_ADD_SC_B 0xfe00707f +#define MASK_CV_ADD_SCI_H 0xfc00707f +#define MASK_CV_ADD_SCI_B 0xfc00707f +#define MASK_CV_SUB_H 0xfe00707f +#define MASK_CV_SUB_B 0xfe00707f +#define MASK_CV_SUB_SC_H 0xfe00707f +#define MASK_CV_SUB_SC_B 0xfe00707f +#define MASK_CV_SUB_SCI_H 0xfc00707f +#define MASK_CV_SUB_SCI_B 0xfc00707f +#define MASK_CV_AVG_H 0xfe00707f +#define MASK_CV_AVG_B 0xfe00707f +#define MASK_CV_AVG_SC_H 0xfe00707f +#define MASK_CV_AVG_SC_B 0xfe00707f +#define MASK_CV_AVG_SCI_H 0xfc00707f +#define MASK_CV_AVG_SCI_B 0xfc00707f +#define MASK_CV_AVGU_H 0xfe00707f +#define MASK_CV_AVGU_B 0xfe00707f +#define MASK_CV_AVGU_SC_H 0xfe00707f +#define MASK_CV_AVGU_SC_B 0xfe00707f +#define MASK_CV_AVGU_SCI_H 0xfc00707f +#define MASK_CV_AVGU_SCI_B 0xfc00707f +#define MASK_CV_MIN_H 0xfe00707f +#define MASK_CV_MIN_B 0xfe00707f +#define MASK_CV_MIN_SC_H 0xfe00707f +#define MASK_CV_MIN_SC_B 0xfe00707f +#define MASK_CV_MIN_SCI_H 0xfc00707f +#define MASK_CV_MIN_SCI_B 0xfc00707f +#define MASK_CV_MINU_H 0xfe00707f +#define MASK_CV_MINU_B 0xfe00707f +#define MASK_CV_MINU_SC_H 0xfe00707f +#define MASK_CV_MINU_SC_B 0xfe00707f +#define MASK_CV_MINU_SCI_H 0xfc00707f +#define MASK_CV_MINU_SCI_B 0xfc00707f +#define MASK_CV_MAX_H 0xfe00707f +#define MASK_CV_MAX_B 0xfe00707f +#define MASK_CV_MAX_SC_H 0xfe00707f +#define MASK_CV_MAX_SC_B 0xfe00707f +#define MASK_CV_MAX_SCI_H 0xfc00707f +#define MASK_CV_MAX_SCI_B 0xfc00707f +#define MASK_CV_MAXU_H 0xfe00707f +#define MASK_CV_MAXU_B 0xfe00707f +#define MASK_CV_MAXU_SC_H 0xfe00707f +#define MASK_CV_MAXU_SC_B 0xfe00707f +#define MASK_CV_MAXU_SCI_H 0xfc00707f +#define MASK_CV_MAXU_SCI_B 0xfc00707f +#define MASK_CV_SRL_H 0xfe00707f +#define MASK_CV_SRL_B 0xfe00707f +#define MASK_CV_SRL_SC_H 0xfe00707f +#define MASK_CV_SRL_SC_B 0xfe00707f +#define MASK_CV_SRL_SCI_H 0xfc00707f +#define MASK_CV_SRL_SCI_B 0xfc00707f +#define MASK_CV_SRA_H 0xfe00707f +#define MASK_CV_SRA_B 0xfe00707f +#define MASK_CV_SRA_SC_H 0xfe00707f +#define MASK_CV_SRA_SC_B 0xfe00707f +#define MASK_CV_SRA_SCI_H 0xfc00707f +#define MASK_CV_SRA_SCI_B 0xfc00707f +#define MASK_CV_SLL_H 0xfe00707f +#define MASK_CV_SLL_B 0xfe00707f +#define MASK_CV_SLL_SC_H 0xfe00707f +#define MASK_CV_SLL_SC_B 0xfe00707f +#define MASK_CV_SLL_SCI_H 0xfc00707f +#define MASK_CV_SLL_SCI_B 0xfc00707f +#define MASK_CV_OR_H 0xfe00707f +#define MASK_CV_OR_B 0xfe00707f +#define MASK_CV_OR_SC_H 0xfe00707f +#define MASK_CV_OR_SC_B 0xfe00707f +#define MASK_CV_OR_SCI_H 0xfc00707f +#define MASK_CV_OR_SCI_B 0xfc00707f +#define MASK_CV_XOR_H 0xfe00707f +#define MASK_CV_XOR_B 0xfe00707f +#define MASK_CV_XOR_SC_H 0xfe00707f +#define MASK_CV_XOR_SC_B 0xfe00707f +#define MASK_CV_XOR_SCI_H 0xfc00707f +#define MASK_CV_XOR_SCI_B 0xfc00707f +#define MASK_CV_AND_H 0xfe00707f +#define MASK_CV_AND_B 0xfe00707f +#define MASK_CV_AND_SC_H 0xfe00707f +#define MASK_CV_AND_SC_B 0xfe00707f +#define MASK_CV_AND_SCI_H 0xfc00707f +#define MASK_CV_AND_SCI_B 0xfc00707f +#define MASK_CV_ABS_H 0xfff0707f +#define MASK_CV_ABS_B 0xfff0707f +#define MASK_CV_DOTUP_H 0xfe00707f +#define MASK_CV_DOTUP_B 0xfe00707f +#define MASK_CV_DOTUP_SC_H 0xfe00707f +#define MASK_CV_DOTUP_SC_B 0xfe00707f +#define MASK_CV_DOTUP_SCI_H 0xfc00707f +#define MASK_CV_DOTUP_SCI_B 0xfc00707f +#define MASK_CV_DOTUSP_H 0xfe00707f +#define MASK_CV_DOTUSP_B 0xfe00707f +#define MASK_CV_DOTUSP_SC_H 0xfe00707f +#define MASK_CV_DOTUSP_SC_B 0xfe00707f +#define MASK_CV_DOTUSP_SCI_H 0xfc00707f +#define MASK_CV_DOTUSP_SCI_B 0xfc00707f +#define MASK_CV_DOTSP_H 0xfe00707f +#define MASK_CV_DOTSP_B 0xfe00707f +#define MASK_CV_DOTSP_SC_H 0xfe00707f +#define MASK_CV_DOTSP_SC_B 0xfe00707f +#define MASK_CV_DOTSP_SCI_H 0xfc00707f +#define MASK_CV_DOTSP_SCI_B 0xfc00707f +#define MASK_CV_SDOTUP_H 0xfe00707f +#define MASK_CV_SDOTUP_B 0xfe00707f +#define MASK_CV_SDOTUP_SC_H 0xfe00707f +#define MASK_CV_SDOTUP_SC_B 0xfe00707f +#define MASK_CV_SDOTUP_SCI_H 0xfc00707f +#define MASK_CV_SDOTUP_SCI_B 0xfc00707f +#define MASK_CV_SDOTUSP_H 0xfe00707f +#define MASK_CV_SDOTUSP_B 0xfe00707f +#define MASK_CV_SDOTUSP_SC_H 0xfe00707f +#define MASK_CV_SDOTUSP_SC_B 0xfe00707f +#define MASK_CV_SDOTUSP_SCI_H 0xfc00707f +#define MASK_CV_SDOTUSP_SCI_B 0xfc00707f +#define MASK_CV_SDOTSP_H 0xfe00707f +#define MASK_CV_SDOTSP_B 0xfe00707f +#define MASK_CV_SDOTSP_SC_H 0xfe00707f +#define MASK_CV_SDOTSP_SC_B 0xfe00707f +#define MASK_CV_SDOTSP_SCI_H 0xfc00707f +#define MASK_CV_SDOTSP_SCI_B 0xfc00707f +#define MASK_CV_EXTRACT_H 0xfc00707f +#define MASK_CV_EXTRACT_B 0xfc00707f +#define MASK_CV_EXTRACTU_H 0xfc00707f +#define MASK_CV_EXTRACTU_B 0xfc00707f +#define MASK_CV_INSERT_H 0xfc00707f +#define MASK_CV_INSERT_B 0xfc00707f +#define MASK_CV_SHUFFLE_H 0xfe00707f +#define MASK_CV_SHUFFLE_B 0xfe00707f +#define MASK_CV_SHUFFLE_SCI_H 0xfc00707f +#define MASK_CV_SHUFFLEI0_SCI_B 0xfc00707f +#define MASK_CV_SHUFFLEI1_SCI_B 0xfc00707f +#define MASK_CV_SHUFFLEI2_SCI_B 0xfc00707f +#define MASK_CV_SHUFFLEI3_SCI_B 0xfc00707f +#define MASK_CV_SHUFFLE2_H 0xfe00707f +#define MASK_CV_SHUFFLE2_B 0xfe00707f +#define MASK_CV_PACK 0xfe00707f +#define MASK_CV_PACK_H 0xfe00707f +#define MASK_CV_PACKHI_B 0xfe00707f +#define MASK_CV_PACKLO_B 0xfe00707f +#define MASK_CV_CMPEQ_H 0xfe00707f +#define MASK_CV_CMPEQ_B 0xfe00707f +#define MASK_CV_CMPEQ_SC_H 0xfe00707f +#define MASK_CV_CMPEQ_SC_B 0xfe00707f +#define MASK_CV_CMPEQ_SCI_H 0xfc00707f +#define MASK_CV_CMPEQ_SCI_B 0xfc00707f +#define MASK_CV_CMPNE_H 0xfe00707f +#define MASK_CV_CMPNE_B 0xfe00707f +#define MASK_CV_CMPNE_SC_H 0xfe00707f +#define MASK_CV_CMPNE_SC_B 0xfe00707f +#define MASK_CV_CMPNE_SCI_H 0xfc00707f +#define MASK_CV_CMPNE_SCI_B 0xfc00707f +#define MASK_CV_CMPGT_H 0xfe00707f +#define MASK_CV_CMPGT_B 0xfe00707f +#define MASK_CV_CMPGT_SC_H 0xfe00707f +#define MASK_CV_CMPGT_SC_B 0xfe00707f +#define MASK_CV_CMPGT_SCI_H 0xfc00707f +#define MASK_CV_CMPGT_SCI_B 0xfc00707f +#define MASK_CV_CMPGE_H 0xfe00707f +#define MASK_CV_CMPGE_B 0xfe00707f +#define MASK_CV_CMPGE_SC_H 0xfe00707f +#define MASK_CV_CMPGE_SC_B 0xfe00707f +#define MASK_CV_CMPGE_SCI_H 0xfc00707f +#define MASK_CV_CMPGE_SCI_B 0xfc00707f +#define MASK_CV_CMPLT_H 0xfe00707f +#define MASK_CV_CMPLT_B 0xfe00707f +#define MASK_CV_CMPLT_SC_H 0xfe00707f +#define MASK_CV_CMPLT_SC_B 0xfe00707f +#define MASK_CV_CMPLT_SCI_H 0xfc00707f +#define MASK_CV_CMPLT_SCI_B 0xfc00707f +#define MASK_CV_CMPLE_H 0xfe00707f +#define MASK_CV_CMPLE_B 0xfe00707f +#define MASK_CV_CMPLE_SC_H 0xfe00707f +#define MASK_CV_CMPLE_SC_B 0xfe00707f +#define MASK_CV_CMPLE_SCI_H 0xfc00707f +#define MASK_CV_CMPLE_SCI_B 0xfc00707f +#define MASK_CV_CMPGTU_H 0xfe00707f +#define MASK_CV_CMPGTU_B 0xfe00707f +#define MASK_CV_CMPGTU_SC_H 0xfe00707f +#define MASK_CV_CMPGTU_SC_B 0xfe00707f +#define MASK_CV_CMPGTU_SCI_H 0xfc00707f +#define MASK_CV_CMPGTU_SCI_B 0xfc00707f +#define MASK_CV_CMPGEU_H 0xfe00707f +#define MASK_CV_CMPGEU_B 0xfe00707f +#define MASK_CV_CMPGEU_SC_H 0xfe00707f +#define MASK_CV_CMPGEU_SC_B 0xfe00707f +#define MASK_CV_CMPGEU_SCI_H 0xfc00707f +#define MASK_CV_CMPGEU_SC_B 0xfe00707f +#define MASK_CV_CMPGEU_SCI_H 0xfc00707f +#define MASK_CV_CMPGEU_SCI_B 0xfc00707f +#define MASK_CV_CMPLTU_H 0xfe00707f +#define MASK_CV_CMPLTU_B 0xfe00707f +#define MASK_CV_CMPLTU_SC_H 0xfe00707f +#define MASK_CV_CMPLTU_SC_B 0xfe00707f +#define MASK_CV_CMPLTU_SCI_H 0xfc00707f +#define MASK_CV_CMPLTU_SCI_B 0xfc00707f +#define MASK_CV_CMPLEU_H 0xfe00707f +#define MASK_CV_CMPLEU_B 0xfe00707f +#define MASK_CV_CMPLEU_SC_H 0xfe00707f +#define MASK_CV_CMPLEU_SC_B 0xfe00707f +#define MASK_CV_CMPLEU_SCI_H 0xfc00707f +#define MASK_CV_CMPLEU_SCI_B 0xfc00707f +#define MASK_CV_CPLXMUL_R 0xfe00707f +#define MASK_CV_CPLXMUL_I 0xfe00707f +#define MASK_CV_CPLXMUL_R_DIV2 0xfe00707f +#define MASK_CV_CPLXMUL_I_DIV2 0xfe00707f +#define MASK_CV_CPLXMUL_R_DIV4 0xfe00707f +#define MASK_CV_CPLXMUL_I_DIV4 0xfe00707f +#define MASK_CV_CPLXMUL_R_DIV8 0xfe00707f +#define MASK_CV_CPLXMUL_I_DIV8 0xfe00707f +#define MASK_CV_CPLXCONJ 0xfff0707f +#define MASK_CV_SUBROTMJ 0xfe00707f +#define MASK_CV_SUBROTMJ_DIV2 0xfe00707f +#define MASK_CV_SUBROTMJ_DIV4 0xfe00707f +#define MASK_CV_SUBROTMJ_DIV8 0xfe00707f +#define MASK_CV_ADD_DIV2 0xfe00707f +#define MASK_CV_ADD_DIV4 0xfe00707f +#define MASK_CV_ADD_DIV8 0xfe00707f +#define MASK_CV_SUB_DIV2 0xfe00707f +#define MASK_CV_SUB_DIV4 0xfe00707f +#define MASK_CV_SUB_DIV8 0xfe00707f /* Vendor-specific (T-Head) XTheadBa instructions. */ #define MATCH_TH_ADDSL 0x0000100b #define MASK_TH_ADDSL 0xf800707f diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index 7a66c7f..7df1517 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -126,6 +126,10 @@ static inline unsigned int riscv_insn_length (insn_t insn) (RV_X(x, 25, 5)) #define EXTRACT_CV_BITMANIP_UIMM2(x) \ (RV_X(x, 25, 2)) +#define EXTRACT_CV_SIMD_IMM6(x) \ + ((RV_X(x, 25, 1)) | (RV_X(x, 20, 5) << 1) | (RV_IMM_SIGN_N(x, 20, 5) << 5)) +#define EXTRACT_CV_SIMD_UIMM6(x) \ + ((RV_X(x, 25, 1)) | (RV_X(x, 20, 5) << 1)) #define ENCODE_ITYPE_IMM(x) \ (RV_X(x, 0, 12) << 20) @@ -188,6 +192,10 @@ static inline unsigned int riscv_insn_length (insn_t insn) (RV_X(x, 0, 5) << 25) #define ENCODE_CV_BITMANIP_UIMM2(x) \ (RV_X(x, 0, 2) << 25) +#define ENCODE_CV_SIMD_IMM6(x) \ + ((RV_X(x, 0, 1) << 25) | (RV_X(x, 1, 5) << 20)) +#define ENCODE_CV_SIMD_UIMM6(x) \ + ((RV_X(x, 0, 1) << 25) | (RV_X(x, 1, 5) << 20)) #define VALID_ITYPE_IMM(x) (EXTRACT_ITYPE_IMM(ENCODE_ITYPE_IMM(x)) == (x)) #define VALID_STYPE_IMM(x) (EXTRACT_STYPE_IMM(ENCODE_STYPE_IMM(x)) == (x)) @@ -523,6 +531,7 @@ enum riscv_insn_class INSN_CLASS_XCVELW, INSN_CLASS_XCVMAC, INSN_CLASS_XCVMEM, + INSN_CLASS_XCVSIMD, INSN_CLASS_XTHEADBA, INSN_CLASS_XTHEADBB, INSN_CLASS_XTHEADBS, |