aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMary Bennett <mary.bennett682@gmail.com>2024-08-30 04:46:58 +0100
committerNelson Chu <nelson@rivosinc.com>2024-09-03 12:02:28 +0800
commita6ecb18b796b2a7342ab72d14c6bd440b718030f (patch)
tree20e4c5d6e37710ccdd16d74428be66f4e3e612f4 /include
parentcf525621820060a5c77efa153e6d2ec6a5ad47c9 (diff)
downloadgdb-a6ecb18b796b2a7342ab72d14c6bd440b718030f.zip
gdb-a6ecb18b796b2a7342ab72d14c6bd440b718030f.tar.gz
gdb-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.h443
-rw-r--r--include/opcode/riscv.h9
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,