diff options
author | Palmer Dabbelt <palmer@dabbelt.com> | 2015-09-17 14:32:57 -0700 |
---|---|---|
committer | Palmer Dabbelt <palmer@dabbelt.com> | 2015-09-17 14:32:57 -0700 |
commit | 562a0c1d17ae1bb183f5bd16e48ed6c17c185892 (patch) | |
tree | 2d4d7058913320529a23ade6f5f653c6778dd935 /binutils | |
parent | df81277a591ee8baa6ee26f09761851cd5e2287e (diff) | |
download | riscv-gnu-toolchain-562a0c1d17ae1bb183f5bd16e48ed6c17c185892.zip riscv-gnu-toolchain-562a0c1d17ae1bb183f5bd16e48ed6c17c185892.tar.gz riscv-gnu-toolchain-562a0c1d17ae1bb183f5bd16e48ed6c17c185892.tar.bz2 |
Remove Hwacha from binutils
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/gas/config/tc-riscv.c | 120 | ||||
-rw-r--r-- | binutils/include/elf/riscv.h | 2 | ||||
-rw-r--r-- | binutils/include/opcode/riscv.h | 4 | ||||
-rw-r--r-- | binutils/opcodes/riscv-dis.c | 66 | ||||
-rw-r--r-- | binutils/opcodes/riscv-opc.c | 201 |
5 files changed, 8 insertions, 385 deletions
diff --git a/binutils/gas/config/tc-riscv.c b/binutils/gas/config/tc-riscv.c index cde9e10..f45a4a1 100644 --- a/binutils/gas/config/tc-riscv.c +++ b/binutils/gas/config/tc-riscv.c @@ -417,8 +417,6 @@ enum reg_class { RCLASS_GPR, RCLASS_FPR, RCLASS_CSR, - RCLASS_VEC_GPR, - RCLASS_VEC_FPR, RCLASS_MAX }; @@ -525,37 +523,14 @@ validate_riscv_insn (const struct riscv_opcode *opc) { /* Xcustom */ case '^': - switch (c = *p++) - { - case 'd': USE_BITS (OP_MASK_RD, OP_SH_RD); break; - case 's': USE_BITS (OP_MASK_RS1, OP_SH_RS1); break; - case 't': USE_BITS (OP_MASK_RS2, OP_SH_RS2); break; - case 'j': USE_BITS (OP_MASK_CUSTOM_IMM, OP_SH_CUSTOM_IMM); break; - } - break; - /* Xhwacha */ - case '#': - switch (c = *p++) - { - case 'g': USE_BITS (OP_MASK_IMMNGPR, OP_SH_IMMNGPR); break; - case 'f': USE_BITS (OP_MASK_IMMNFPR, OP_SH_IMMNFPR); break; - case 'n': USE_BITS (OP_MASK_IMMSEGNELM, OP_SH_IMMSEGNELM); break; - case 'd': USE_BITS (OP_MASK_VRD, OP_SH_VRD); break; - case 's': USE_BITS (OP_MASK_VRS, OP_SH_VRS); break; - case 't': USE_BITS (OP_MASK_VRT, OP_SH_VRT); break; - case 'r': USE_BITS (OP_MASK_VRR, OP_SH_VRR); break; - case 'D': USE_BITS (OP_MASK_VFD, OP_SH_VFD); break; - case 'S': USE_BITS (OP_MASK_VFS, OP_SH_VFS); break; - case 'T': USE_BITS (OP_MASK_VFT, OP_SH_VFT); break; - case 'R': USE_BITS (OP_MASK_VFR, OP_SH_VFR); break; - - default: - as_bad (_("internal: bad RISC-V opcode (unknown extension operand " - "type `#%c'): %s %s"), - c, opc->name, opc->args); - return 0; - } - break; + switch (c = *p++) + { + case 'd': USE_BITS (OP_MASK_RD, OP_SH_RD); break; + case 's': USE_BITS (OP_MASK_RS1, OP_SH_RS1); break; + case 't': USE_BITS (OP_MASK_RS2, OP_SH_RS2); break; + case 'j': USE_BITS (OP_MASK_CUSTOM_IMM, OP_SH_CUSTOM_IMM); break; + } + break; case 'C': /* RVC */ switch (c = *p++) { @@ -696,8 +671,6 @@ md_begin (void) hash_reg_names (RCLASS_GPR, riscv_gpr_names_abi, NGPR); hash_reg_names (RCLASS_FPR, riscv_fpr_names_numeric, NFPR); hash_reg_names (RCLASS_FPR, riscv_fpr_names_abi, NFPR); - hash_reg_names (RCLASS_VEC_GPR, riscv_vec_gpr_names, NVGPR); - hash_reg_names (RCLASS_VEC_FPR, riscv_vec_fpr_names, NVFPR); #define DECLARE_CSR(name, num) hash_reg_name (RCLASS_CSR, #name, num); #include "opcode/riscv-opc.h" @@ -1329,83 +1302,6 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr, continue; } - /* Xhwacha */ - case '#': - switch (*++args) - { - case 'g': - my_getExpression (imm_expr, s); - /* check_absolute_expr (ip, &imm_expr); */ - if ((unsigned long) imm_expr->X_add_number > 32) - as_warn (_("Improper ngpr amount (%lu)"), - (unsigned long) imm_expr->X_add_number); - INSERT_OPERAND (IMMNGPR, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - s = expr_end; - continue; - case 'f': - my_getExpression (imm_expr, s); - /* check_absolute_expr (ip, &imm_expr); */ - if ((unsigned long) imm_expr->X_add_number > 32) - as_warn (_("Improper nfpr amount (%lu)"), - (unsigned long) imm_expr->X_add_number); - INSERT_OPERAND (IMMNFPR, *ip, imm_expr->X_add_number); - imm_expr->X_op = O_absent; - s = expr_end; - continue; - case 'n': - my_getExpression (imm_expr, s); - /* check_absolute_expr (ip, &imm_expr); */ - if ((unsigned long) imm_expr->X_add_number > 8) - as_warn (_("Improper nelm amount (%lu)"), - (unsigned long) imm_expr->X_add_number); - INSERT_OPERAND (IMMSEGNELM, *ip, imm_expr->X_add_number - 1); - imm_expr->X_op = O_absent; - s = expr_end; - continue; - case 'd': - if (!reg_lookup (&s, RCLASS_VEC_GPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VRD, *ip, regno); - continue; - case 's': - if (!reg_lookup (&s, RCLASS_VEC_GPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VRS, *ip, regno); - continue; - case 't': - if (!reg_lookup (&s, RCLASS_VEC_GPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VRT, *ip, regno); - continue; - case 'r': - if (!reg_lookup (&s, RCLASS_VEC_GPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VRR, *ip, regno); - continue; - case 'D': - if (!reg_lookup (&s, RCLASS_VEC_FPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VFD, *ip, regno); - continue; - case 'S': - if (!reg_lookup (&s, RCLASS_VEC_FPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VFS, *ip, regno); - continue; - case 'T': - if (!reg_lookup (&s, RCLASS_VEC_FPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VFT, *ip, regno); - continue; - case 'R': - if (!reg_lookup (&s, RCLASS_VEC_FPR, ®no)) - as_bad (_("Invalid vector register")); - INSERT_OPERAND (VFR, *ip, regno); - continue; - } - break; - case 'C': /* RVC */ switch (*++args) { diff --git a/binutils/include/elf/riscv.h b/binutils/include/elf/riscv.h index cb9ebea..dd72740 100644 --- a/binutils/include/elf/riscv.h +++ b/binutils/include/elf/riscv.h @@ -88,7 +88,6 @@ END_RELOC_NUMBERS (R_RISCV_max) #define EF_RISCV_EXT_MASK 0xffff #define EF_RISCV_EXT_SH 16 #define E_RISCV_EXT_Xcustom 0x0000 -#define E_RISCV_EXT_Xhwacha 0x0001 #define E_RISCV_EXT_RESERVED 0xffff #define EF_GET_RISCV_EXT(x) \ @@ -111,7 +110,6 @@ struct riscv_extension_entry static const struct riscv_extension_entry riscv_extension_map[] = { {"Xcustom", E_RISCV_EXT_Xcustom}, - {"Xhwacha", E_RISCV_EXT_Xhwacha}, }; /* Given an extension name, return an elf flag. */ diff --git a/binutils/include/opcode/riscv.h b/binutils/include/opcode/riscv.h index d19745e..cf5afe7 100644 --- a/binutils/include/opcode/riscv.h +++ b/binutils/include/opcode/riscv.h @@ -250,8 +250,6 @@ static const char * const riscv_pred_succ[16] = { #define NGPR 32 #define NFPR 32 -#define NVGPR 32 -#define NVFPR 32 #define RISCV_JUMP_BITS RISCV_BIGIMM_BITS #define RISCV_JUMP_ALIGN_BITS 1 @@ -352,8 +350,6 @@ extern const char * const riscv_gpr_names_numeric[NGPR]; extern const char * const riscv_gpr_names_abi[NGPR]; extern const char * const riscv_fpr_names_numeric[NFPR]; extern const char * const riscv_fpr_names_abi[NFPR]; -extern const char * const riscv_vec_gpr_names[NVGPR]; -extern const char * const riscv_vec_fpr_names[NVFPR]; extern const struct riscv_opcode riscv_builtin_opcodes[]; extern const int bfd_riscv_num_builtin_opcodes; diff --git a/binutils/opcodes/riscv-dis.c b/binutils/opcodes/riscv-dis.c index 581e4f9..f145b67 100644 --- a/binutils/opcodes/riscv-dis.c +++ b/binutils/opcodes/riscv-dis.c @@ -148,72 +148,6 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info) } break; - /* Xhwacha */ - case '#': - switch ( *++d ) { - case 'g': - (*info->fprintf_func) - ( info->stream, "%d", - (int)((l >> OP_SH_IMMNGPR) & OP_MASK_IMMNGPR)); - break; - case 'f': - (*info->fprintf_func) - ( info->stream, "%d", - (int)((l >> OP_SH_IMMNFPR) & OP_MASK_IMMNFPR)); - break; - case 'p': - (*info->fprintf_func) - ( info->stream, "%d", - (int)((l >> OP_SH_CUSTOM_IMM) & OP_MASK_CUSTOM_IMM)); - break; - case 'n': - (*info->fprintf_func) - ( info->stream, "%d", - (int)(((l >> OP_SH_IMMSEGNELM) & OP_MASK_IMMSEGNELM) + 1)); - break; - case 'd': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_gpr_names[(l >> OP_SH_VRD) & OP_MASK_VRD]); - break; - case 's': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_gpr_names[(l >> OP_SH_VRS) & OP_MASK_VRS]); - break; - case 't': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_gpr_names[(l >> OP_SH_VRT) & OP_MASK_VRT]); - break; - case 'r': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_gpr_names[(l >> OP_SH_VRR) & OP_MASK_VRR]); - break; - case 'D': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_fpr_names[(l >> OP_SH_VFD) & OP_MASK_VFD]); - break; - case 'S': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_fpr_names[(l >> OP_SH_VFS) & OP_MASK_VFS]); - break; - case 'T': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_fpr_names[(l >> OP_SH_VFT) & OP_MASK_VFT]); - break; - case 'R': - (*info->fprintf_func) - ( info->stream, "%s", - riscv_vec_fpr_names[(l >> OP_SH_VFR) & OP_MASK_VFR]); - break; - } - break; - case 'C': /* RVC */ switch (*++d) { diff --git a/binutils/opcodes/riscv-opc.c b/binutils/opcodes/riscv-opc.c index 83b84a2..faab646 100644 --- a/binutils/opcodes/riscv-opc.c +++ b/binutils/opcodes/riscv-opc.c @@ -56,22 +56,6 @@ const char * const riscv_fpr_names_abi[32] = { "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11" }; -const char * const riscv_vec_gpr_names[32] = -{ - "vx0", "vx1", "vx2", "vx3", "vx4", "vx5", "vx6", "vx7", - "vx8", "vx9", "vx10", "vx11", "vx12", "vx13", "vx14", "vx15", - "vx16", "vx17", "vx18", "vx19", "vx20", "vx21", "vx22", "vx23", - "vx24", "vx25", "vx26", "vx27", "vx28", "vx29", "vx30", "vx31" -}; - -const char * const riscv_vec_fpr_names[32] = -{ - "vf0", "vf1", "vf2", "vf3", "vf4", "vf5", "vf6", "vf7", - "vf8", "vf9", "vf10", "vf11", "vf12", "vf13", "vf14", "vf15", - "vf16", "vf17", "vf18", "vf19", "vf20", "vf21", "vf22", "vf23", - "vf24", "vf25", "vf26", "vf27", "vf28", "vf29", "vf30", "vf31" -}; - /* The order of overloaded instructions matters. Label arguments and register arguments look the same. Instructions that can have either for arguments must apear in the correct order in this table for the @@ -599,60 +583,6 @@ const struct riscv_opcode riscv_builtin_opcodes[] = {"sfence.vm", "I", "s", MATCH_SFENCE_VM, MASK_SFENCE_VM, match_opcode, RD_xs1 }, {"wfi", "I", "", MATCH_WFI, MASK_WFI, match_opcode, 0 }, -/* Half-precision floating-point instruction subset */ -{"flh", "Xhwacha", "D,o(s)", MATCH_FLH, MASK_FLH, match_opcode, WR_fd|RD_xs1 }, -{"fsh", "Xhwacha", "T,q(s)", MATCH_FSH, MASK_FSH, match_opcode, RD_xs1|RD_fs2 }, -{"fsgnj.h", "Xhwacha", "D,S,T", MATCH_FSGNJ_H, MASK_FSGNJ_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fsgnjn.h", "Xhwacha", "D,S,T", MATCH_FSGNJN_H, MASK_FSGNJN_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fsgnjx.h", "Xhwacha", "D,S,T", MATCH_FSGNJX_H, MASK_FSGNJX_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fadd.h", "Xhwacha", "D,S,T", MATCH_FADD_H | MASK_RM, MASK_FADD_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fadd.h", "Xhwacha", "D,S,T,m", MATCH_FADD_H, MASK_FADD_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fsub.h", "Xhwacha", "D,S,T", MATCH_FSUB_H | MASK_RM, MASK_FSUB_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fsub.h", "Xhwacha", "D,S,T,m", MATCH_FSUB_H, MASK_FSUB_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fmul.h", "Xhwacha", "D,S,T", MATCH_FMUL_H | MASK_RM, MASK_FMUL_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fmul.h", "Xhwacha", "D,S,T,m", MATCH_FMUL_H, MASK_FMUL_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fdiv.h", "Xhwacha", "D,S,T", MATCH_FDIV_H | MASK_RM, MASK_FDIV_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fdiv.h", "Xhwacha", "D,S,T,m", MATCH_FDIV_H, MASK_FDIV_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fsqrt.h", "Xhwacha", "D,S", MATCH_FSQRT_H | MASK_RM, MASK_FSQRT_H | MASK_RM, match_opcode, WR_fd|RD_fs1 }, -{"fsqrt.h", "Xhwacha", "D,S,m", MATCH_FSQRT_H, MASK_FSQRT_H, match_opcode, WR_fd|RD_fs1 }, -{"fmin.h", "Xhwacha", "D,S,T", MATCH_FMIN_H, MASK_FMIN_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fmax.h", "Xhwacha", "D,S,T", MATCH_FMAX_H, MASK_FMAX_H, match_opcode, WR_fd|RD_fs1|RD_fs2 }, -{"fmadd.h", "Xhwacha", "D,S,T,R", MATCH_FMADD_H | MASK_RM, MASK_FMADD_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fmadd.h", "Xhwacha", "D,S,T,R,m", MATCH_FMADD_H, MASK_FMADD_H, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fnmadd.h", "Xhwacha", "D,S,T,R", MATCH_FNMADD_H | MASK_RM, MASK_FNMADD_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fnmadd.h", "Xhwacha", "D,S,T,R,m", MATCH_FNMADD_H, MASK_FNMADD_H, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fmsub.h", "Xhwacha", "D,S,T,R", MATCH_FMSUB_H | MASK_RM, MASK_FMSUB_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fmsub.h", "Xhwacha", "D,S,T,R,m", MATCH_FMSUB_H, MASK_FMSUB_H, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fnmsub.h", "Xhwacha", "D,S,T,R", MATCH_FNMSUB_H | MASK_RM, MASK_FNMSUB_H | MASK_RM, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fnmsub.h", "Xhwacha", "D,S,T,R,m", MATCH_FNMSUB_H, MASK_FNMSUB_H, match_opcode, WR_fd|RD_fs1|RD_fs2|RD_fs3 }, -{"fcvt.s.h", "Xhwacha", "D,S", MATCH_FCVT_S_H, MASK_FCVT_S_H | MASK_RM, match_opcode, WR_fd|RD_fs1 }, -{"fcvt.h.s", "Xhwacha", "D,S", MATCH_FCVT_H_S | MASK_RM, MASK_FCVT_H_S | MASK_RM, match_opcode, WR_fd|RD_fs1 }, -{"fcvt.h.s", "Xhwacha", "D,S,m", MATCH_FCVT_H_S, MASK_FCVT_H_S, match_opcode, WR_fd|RD_fs1 }, -{"fcvt.d.h", "Xhwacha", "D,S", MATCH_FCVT_D_H, MASK_FCVT_D_H | MASK_RM, match_opcode, WR_fd|RD_fs1 }, -{"fcvt.h.d", "Xhwacha", "D,S", MATCH_FCVT_H_D | MASK_RM, MASK_FCVT_H_D | MASK_RM, match_opcode, WR_fd|RD_fs1 }, -{"fcvt.h.d", "Xhwacha", "D,S,m", MATCH_FCVT_H_D, MASK_FCVT_H_D, match_opcode, WR_fd|RD_fs1 }, -{"feq.h", "Xhwacha", "d,S,T", MATCH_FEQ_H, MASK_FEQ_H, match_opcode, WR_xd|RD_fs1|RD_fs2 }, -{"flt.h", "Xhwacha", "d,S,T", MATCH_FLT_H, MASK_FLT_H, match_opcode, WR_xd|RD_fs1|RD_fs2 }, -{"fle.h", "Xhwacha", "d,S,T", MATCH_FLE_H, MASK_FLE_H, match_opcode, WR_xd|RD_fs1|RD_fs2 }, -{"fgt.h", "Xhwacha", "d,T,S", MATCH_FLT_H, MASK_FLT_H, match_opcode, WR_xd|RD_fs1|RD_fs2 }, -{"fge.h", "Xhwacha", "d,T,S", MATCH_FLE_H, MASK_FLE_H, match_opcode, WR_xd|RD_fs1|RD_fs2 }, -{"fmv.x.h", "Xhwacha", "d,S", MATCH_FMV_X_H, MASK_FMV_X_H, match_opcode, WR_xd|RD_fs1 }, -{"fmv.h.x", "Xhwacha", "D,s", MATCH_FMV_H_X, MASK_FMV_H_X, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.w.h", "Xhwacha", "d,S", MATCH_FCVT_W_H | MASK_RM, MASK_FCVT_W_H | MASK_RM, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.w.h", "Xhwacha", "d,S,m", MATCH_FCVT_W_H, MASK_FCVT_W_H, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.wu.h", "Xhwacha", "d,S", MATCH_FCVT_WU_H | MASK_RM, MASK_FCVT_WU_H | MASK_RM, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.wu.h", "Xhwacha", "d,S,m", MATCH_FCVT_WU_H, MASK_FCVT_WU_H, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.h.w", "Xhwacha", "D,s", MATCH_FCVT_H_W, MASK_FCVT_H_W | MASK_RM, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.h.wu", "Xhwacha", "D,s", MATCH_FCVT_H_WU, MASK_FCVT_H_WU | MASK_RM, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.l.h", "Xhwacha", "d,S", MATCH_FCVT_L_H | MASK_RM, MASK_FCVT_L_H | MASK_RM, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.l.h", "Xhwacha", "d,S,m", MATCH_FCVT_L_H, MASK_FCVT_L_H, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.lu.h", "Xhwacha", "d,S", MATCH_FCVT_LU_H | MASK_RM, MASK_FCVT_LU_H | MASK_RM, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.lu.h", "Xhwacha", "d,S,m", MATCH_FCVT_LU_H, MASK_FCVT_LU_H, match_opcode, WR_xd|RD_fs1 }, -{"fcvt.h.l", "Xhwacha", "D,s", MATCH_FCVT_H_L | MASK_RM, MASK_FCVT_H_L | MASK_RM, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.h.l", "Xhwacha", "D,s,m", MATCH_FCVT_H_L, MASK_FCVT_H_L, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.h.lu", "Xhwacha", "D,s", MATCH_FCVT_H_LU | MASK_RM, MASK_FCVT_H_L | MASK_RM, match_opcode, WR_fd|RD_xs1 }, -{"fcvt.h.lu", "Xhwacha", "D,s,m", MATCH_FCVT_H_LU, MASK_FCVT_H_LU, match_opcode, WR_fd|RD_xs1 }, - /* Rocket Custom Coprocessor extension */ {"custom0", "Xcustom", "d,s,t,^j", MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2, match_opcode, 0}, {"custom0", "Xcustom", "d,s,^t,^j", MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1, match_opcode, 0}, @@ -678,137 +608,6 @@ const struct riscv_opcode riscv_builtin_opcodes[] = {"custom3", "Xcustom", "^d,s,t,^j", MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2, match_opcode, 0}, {"custom3", "Xcustom", "^d,s,^t,^j", MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1, match_opcode, 0}, {"custom3", "Xcustom", "^d,^s,^t,^j", MATCH_CUSTOM3, MASK_CUSTOM3, match_opcode, 0}, - -/* Xhwacha extension */ -{"stop", "Xhwacha", "", MATCH_STOP, MASK_STOP, match_opcode, 0}, -{"utidx", "Xhwacha", "d", MATCH_UTIDX, MASK_UTIDX, match_opcode, WR_xd}, -{"movz", "Xhwacha", "d,s,t", MATCH_MOVZ, MASK_MOVZ, match_opcode, WR_xd|RD_xs1|RD_xs2}, -{"movn", "Xhwacha", "d,s,t", MATCH_MOVN, MASK_MOVN, match_opcode, WR_xd|RD_xs1|RD_xs2}, -{"fmovz", "Xhwacha", "D,s,T", MATCH_FMOVZ, MASK_FMOVZ, match_opcode, WR_fd|RD_xs1|RD_fs2}, -{"fmovn", "Xhwacha", "D,s,T", MATCH_FMOVN, MASK_FMOVN, match_opcode, WR_fd|RD_xs1|RD_fs2}, - -/* unit stride */ -/* xloads */ -{"vld", "Xhwacha", "#d,s", MATCH_VLD, MASK_VLD, match_opcode, 0}, -{"vlw", "Xhwacha", "#d,s", MATCH_VLW, MASK_VLW, match_opcode, 0}, -{"vlwu", "Xhwacha", "#d,s", MATCH_VLWU, MASK_VLWU, match_opcode, 0}, -{"vlh", "Xhwacha", "#d,s", MATCH_VLH, MASK_VLH, match_opcode, 0}, -{"vlhu", "Xhwacha", "#d,s", MATCH_VLHU, MASK_VLHU, match_opcode, 0}, -{"vlb", "Xhwacha", "#d,s", MATCH_VLB, MASK_VLB, match_opcode, 0}, -{"vlbu", "Xhwacha", "#d,s", MATCH_VLBU, MASK_VLBU, match_opcode, 0}, -/* floads */ -{"vfld", "Xhwacha", "#D,s", MATCH_VFLD, MASK_VFLD, match_opcode, 0}, -{"vflw", "Xhwacha", "#D,s", MATCH_VFLW, MASK_VFLW, match_opcode, 0}, - -/* stride */ -/* xloads */ -{"vlstd", "Xhwacha", "#d,s,t", MATCH_VLSTD, MASK_VLSTD, match_opcode, 0}, -{"vlstw", "Xhwacha", "#d,s,t", MATCH_VLSTW, MASK_VLSTW, match_opcode, 0}, -{"vlstwu", "Xhwacha", "#d,s,t", MATCH_VLSTWU, MASK_VLSTWU, match_opcode, 0}, -{"vlsth", "Xhwacha", "#d,s,t", MATCH_VLSTH, MASK_VLSTH, match_opcode, 0}, -{"vlsthu", "Xhwacha", "#d,s,t", MATCH_VLSTHU, MASK_VLSTHU, match_opcode, 0}, -{"vlstb", "Xhwacha", "#d,s,t", MATCH_VLSTB, MASK_VLSTB, match_opcode, 0}, -{"vlstbu", "Xhwacha", "#d,s,t", MATCH_VLSTBU, MASK_VLSTBU, match_opcode, 0}, -/* floads */ -{"vflstd", "Xhwacha", "#D,s,t", MATCH_VFLSTD, MASK_VFLSTD, match_opcode, 0}, -{"vflstw", "Xhwacha", "#D,s,t", MATCH_VFLSTW, MASK_VFLSTW, match_opcode, 0}, - -/* segment */ -/* xloads */ -{"vlsegd", "Xhwacha", "#d,s,#n", MATCH_VLSEGD, MASK_VLSEGD, match_opcode, 0}, -{"vlsegw", "Xhwacha", "#d,s,#n", MATCH_VLSEGW, MASK_VLSEGW, match_opcode, 0}, -{"vlsegwu", "Xhwacha", "#d,s,#n", MATCH_VLSEGWU, MASK_VLSEGWU, match_opcode, 0}, -{"vlsegh", "Xhwacha", "#d,s,#n", MATCH_VLSEGH, MASK_VLSEGH, match_opcode, 0}, -{"vlseghu", "Xhwacha", "#d,s,#n", MATCH_VLSEGHU, MASK_VLSEGHU, match_opcode, 0}, -{"vlsegb", "Xhwacha", "#d,s,#n", MATCH_VLSEGB, MASK_VLSEGB, match_opcode, 0}, -{"vlsegbu", "Xhwacha", "#d,s,#n", MATCH_VLSEGBU, MASK_VLSEGBU, match_opcode, 0}, -/* floads */ -{"vflsegd", "Xhwacha", "#D,s,#n", MATCH_VFLSEGD, MASK_VFLSEGD, match_opcode, 0}, -{"vflsegw", "Xhwacha", "#D,s,#n", MATCH_VFLSEGW, MASK_VFLSEGW, match_opcode, 0}, - -/* stride segment */ -/* xloads */ -{"vlsegstd", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTD, MASK_VLSEGSTD, match_opcode, 0}, -{"vlsegstw", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTW, MASK_VLSEGSTW, match_opcode, 0}, -{"vlsegstwu", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTWU, MASK_VLSEGSTWU, match_opcode, 0}, -{"vlsegsth", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTH, MASK_VLSEGSTH, match_opcode, 0}, -{"vlsegsthu", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTHU, MASK_VLSEGSTHU, match_opcode, 0}, -{"vlsegstb", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTB, MASK_VLSEGSTB, match_opcode, 0}, -{"vlsegstbu", "Xhwacha", "#d,s,t,#n", MATCH_VLSEGSTBU, MASK_VLSEGSTBU, match_opcode, 0}, -/* floads */ -{"vflsegstd", "Xhwacha", "#D,s,t,#n", MATCH_VFLSEGSTD, MASK_VFLSEGSTD, match_opcode, 0}, -{"vflsegstw", "Xhwacha", "#D,s,t,#n", MATCH_VFLSEGSTW, MASK_VFLSEGSTW, match_opcode, 0}, - -/* unit stride */ -/* xstores */ -{"vsd", "Xhwacha", "#d,s", MATCH_VSD, MASK_VSD, match_opcode, 0}, -{"vsw", "Xhwacha", "#d,s", MATCH_VSW, MASK_VSW, match_opcode, 0}, -{"vsh", "Xhwacha", "#d,s", MATCH_VSH, MASK_VSH, match_opcode, 0}, -{"vsb", "Xhwacha", "#d,s", MATCH_VSB, MASK_VSB, match_opcode, 0}, -/* fstores */ -{"vfsd", "Xhwacha", "#D,s", MATCH_VFSD, MASK_VFSD, match_opcode, 0}, -{"vfsw", "Xhwacha", "#D,s", MATCH_VFSW, MASK_VFSW, match_opcode, 0}, - -/* stride */ -/* xstores */ -{"vsstd", "Xhwacha", "#d,s,t", MATCH_VSSTD, MASK_VSSTD, match_opcode, 0}, -{"vsstw", "Xhwacha", "#d,s,t", MATCH_VSSTW, MASK_VSSTW, match_opcode, 0}, -{"vssth", "Xhwacha", "#d,s,t", MATCH_VSSTH, MASK_VSSTH, match_opcode, 0}, -{"vsstb", "Xhwacha", "#d,s,t", MATCH_VSSTB, MASK_VSSTB, match_opcode, 0}, -/* fstores */ -{"vfsstd", "Xhwacha", "#D,s,t", MATCH_VFSSTD, MASK_VFSSTD, match_opcode, 0}, -{"vfsstw", "Xhwacha", "#D,s,t", MATCH_VFSSTW, MASK_VFSSTW, match_opcode, 0}, - -/* segment */ -/* xstores */ -{"vssegd", "Xhwacha", "#d,s,#n", MATCH_VSSEGD, MASK_VSSEGD, match_opcode, 0}, -{"vssegw", "Xhwacha", "#d,s,#n", MATCH_VSSEGW, MASK_VSSEGW, match_opcode, 0}, -{"vssegh", "Xhwacha", "#d,s,#n", MATCH_VSSEGH, MASK_VSSEGH, match_opcode, 0}, -{"vssegb", "Xhwacha", "#d,s,#n", MATCH_VSSEGB, MASK_VSSEGB, match_opcode, 0}, -/* fstores */ -{"vfssegd", "Xhwacha", "#D,s,#n", MATCH_VFSSEGD, MASK_VFSSEGD, match_opcode, 0}, -{"vfssegw", "Xhwacha", "#D,s,#n", MATCH_VFSSEGW, MASK_VFSSEGW, match_opcode, 0}, - -/* stride segment */ -/* xsegstores */ -{"vssegstd", "Xhwacha", "#d,s,t,#n", MATCH_VSSEGSTD, MASK_VSSEGSTD, match_opcode, 0}, -{"vssegstw", "Xhwacha", "#d,s,t,#n", MATCH_VSSEGSTW, MASK_VSSEGSTW, match_opcode, 0}, -{"vssegsth", "Xhwacha", "#d,s,t,#n", MATCH_VSSEGSTH, MASK_VSSEGSTH, match_opcode, 0}, -{"vssegstb", "Xhwacha", "#d,s,t,#n", MATCH_VSSEGSTB, MASK_VSSEGSTB, match_opcode, 0}, -/* fsegstores */ -{"vfssegstd", "Xhwacha", "#D,s,t,#n", MATCH_VFSSEGSTD, MASK_VFSSEGSTD, match_opcode, 0}, -{"vfssegstw", "Xhwacha", "#D,s,t,#n", MATCH_VFSSEGSTW, MASK_VFSSEGSTW, match_opcode, 0}, - -{"vsetcfg", "Xhwacha", "s", MATCH_VSETCFG, MASK_VSETCFG | MASK_IMM, match_opcode, 0}, -{"vsetcfg", "Xhwacha", "#g,#f", MATCH_VSETCFG, MASK_VSETCFG | MASK_RS1, match_opcode, 0}, -{"vsetcfg", "Xhwacha", "s,#g,#f", MATCH_VSETCFG, MASK_VSETCFG, match_opcode, 0}, -{"vsetucfg", "Xhwacha", "d,u", MATCH_LUI, MASK_LUI, match_opcode, INSN_ALIAS | WR_xd}, -{"vsetvl", "Xhwacha", "d,s", MATCH_VSETVL, MASK_VSETVL, match_opcode, 0}, -{"vgetcfg", "Xhwacha", "d", MATCH_VGETCFG, MASK_VGETCFG, match_opcode, 0}, -{"vgetvl", "Xhwacha", "d", MATCH_VGETVL, MASK_VGETVL, match_opcode, 0}, - -{"vmvv", "Xhwacha", "#d,#s", MATCH_VMVV, MASK_VMVV, match_opcode, 0}, -{"vmsv", "Xhwacha", "#d,s", MATCH_VMSV, MASK_VMSV, match_opcode, 0}, -{"vfmvv", "Xhwacha", "#D,#S", MATCH_VFMVV, MASK_VFMVV, match_opcode, 0}, -{"vfmsv.d", "Xhwacha", "#D,s", MATCH_VFMSV_D, MASK_VFMSV_D, match_opcode, 0}, -{"vfmsv.s", "Xhwacha", "#D,s", MATCH_VFMSV_S, MASK_VFMSV_S, match_opcode, 0}, - -{"vf", "Xhwacha", "q(s)", MATCH_VF, MASK_VF, match_opcode, 0}, -{"vf", "Xhwacha", "A,s", 0, (int) M_VF, match_never, INSN_MACRO }, - -{"vxcptcause", "Xhwacha", "d", MATCH_VXCPTCAUSE, MASK_VXCPTCAUSE, match_opcode, 0}, -{"vxcptaux", "Xhwacha", "d", MATCH_VXCPTAUX, MASK_VXCPTAUX, match_opcode, 0}, - -{"vxcptsave", "Xhwacha", "s", MATCH_VXCPTSAVE, MASK_VXCPTSAVE, match_opcode, 0}, -{"vxcptrestore", "Xhwacha", "s", MATCH_VXCPTRESTORE, MASK_VXCPTRESTORE, match_opcode, 0}, -{"vxcptkill", "Xhwacha", "", MATCH_VXCPTKILL, MASK_VXCPTKILL, match_opcode, 0}, - -{"vxcptevac", "Xhwacha", "s", MATCH_VXCPTEVAC, MASK_VXCPTEVAC, match_opcode, 0}, -{"vxcpthold", "Xhwacha", "s", MATCH_VXCPTHOLD, MASK_VXCPTHOLD, match_opcode, 0}, -{"venqcmd", "Xhwacha", "s,t", MATCH_VENQCMD, MASK_VENQCMD, match_opcode, 0}, -{"venqimm1", "Xhwacha", "s,t", MATCH_VENQIMM1, MASK_VENQIMM1, match_opcode, 0}, -{"venqimm2", "Xhwacha", "s,t", MATCH_VENQIMM2, MASK_VENQIMM2, match_opcode, 0}, -{"venqcnt", "Xhwacha", "s,t", MATCH_VENQCNT, MASK_VENQCNT, match_opcode, 0}, }; #define RISCV_NUM_OPCODES \ |