From: Richard Henderson <[email protected]>
Generate separate objects for OP() instead of collecting in a table.
Return pointers to objects directly.
Reviewed-by: Alistair Francis <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
Message-ID: <[email protected]>
Signed-off-by: Alistair Francis <[email protected]>
---
disas/riscv.c | 1981 +++++++++++++++++++++---------------------
disas/riscv-op.c.inc | 94 +-
2 files changed, 1048 insertions(+), 1027 deletions(-)
diff --git a/disas/riscv.c b/disas/riscv.c
index 7ea65ba2e7..b8099cbdf8 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -28,12 +28,6 @@
#include "disas/riscv-xventana.h"
#include "disas/riscv-xlrbr.h"
-typedef enum {
-#define OP(N, ...) rv_op_##N,
-#include "riscv-op.c.inc"
-#undef OP
-} rv_op;
-
/* register names */
static const char rv_ireg_name_sym[32][5] = {
@@ -113,140 +107,143 @@ static const rvc_constraint rvcc_true[] = { rvc_end };
/* pseudo-instruction metadata */
-static const rv_opcode_data rvi_opcode_data[];
+/* Forward declare the all the opcodes so that we may link them. */
+#define OP(N, ...) static const rv_opcode_data op_##N;
+#include "riscv-op.c.inc"
+#undef OP
static const rv_comp_data rvcp_jal[] = {
- { &rvi_opcode_data[rv_op_j], rvcc_j },
- { &rvi_opcode_data[rv_op_jal_ra], rvcc_jal_ra },
+ { &op_j, rvcc_j },
+ { &op_jal_ra, rvcc_jal_ra },
{ },
};
static const rv_comp_data rvcp_jalr[] = {
- { &rvi_opcode_data[rv_op_jr], rvcc_jr },
- { &rvi_opcode_data[rv_op_jalr_ra], rvcc_jalr_ra },
+ { &op_jr, rvcc_jr },
+ { &op_jalr_ra, rvcc_jalr_ra },
{ },
};
static const rv_comp_data rvcp_jr[] = {
- { &rvi_opcode_data[rv_op_ret], rvcc_ret },
+ { &op_ret, rvcc_ret },
{ },
};
static const rv_comp_data rvcp_beq[] = {
- { &rvi_opcode_data[rv_op_beqz], rvcc_beqz },
+ { &op_beqz, rvcc_beqz },
{ },
};
static const rv_comp_data rvcp_bne[] = {
- { &rvi_opcode_data[rv_op_bnez], rvcc_bnez },
+ { &op_bnez, rvcc_bnez },
{ },
};
static const rv_comp_data rvcp_blt[] = {
- { &rvi_opcode_data[rv_op_bltz], rvcc_bltz },
- { &rvi_opcode_data[rv_op_bgtz], rvcc_bgtz },
+ { &op_bltz, rvcc_bltz },
+ { &op_bgtz, rvcc_bgtz },
{ },
};
static const rv_comp_data rvcp_bge[] = {
- { &rvi_opcode_data[rv_op_blez], rvcc_blez },
- { &rvi_opcode_data[rv_op_bgez], rvcc_bgez },
+ { &op_blez, rvcc_blez },
+ { &op_bgez, rvcc_bgez },
{ },
};
static const rv_comp_data rvcp_addi[] = {
- { &rvi_opcode_data[rv_op_mv], rvcc_mv },
+ { &op_mv, rvcc_mv },
{ },
};
static const rv_comp_data rvcp_mv[] = {
- { &rvi_opcode_data[rv_op_nop], rvcc_nop },
+ { &op_nop, rvcc_nop },
{ },
};
static const rv_comp_data rvcp_sltiu[] = {
- { &rvi_opcode_data[rv_op_seqz], rvcc_seqz },
+ { &op_seqz, rvcc_seqz },
{ },
};
static const rv_comp_data rvcp_xori[] = {
- { &rvi_opcode_data[rv_op_not], rvcc_not },
+ { &op_not, rvcc_not },
{ },
};
static const rv_comp_data rvcp_sub[] = {
- { &rvi_opcode_data[rv_op_neg], rvcc_neg },
+ { &op_neg, rvcc_neg },
{ },
};
static const rv_comp_data rvcp_slt[] = {
- { &rvi_opcode_data[rv_op_sltz], rvcc_sltz },
- { &rvi_opcode_data[rv_op_sgtz], rvcc_sgtz },
+ { &op_sltz, rvcc_sltz },
+ { &op_sgtz, rvcc_sgtz },
{ },
};
static const rv_comp_data rvcp_sltu[] = {
- { &rvi_opcode_data[rv_op_snez], rvcc_snez },
+ { &op_snez, rvcc_snez },
{ },
};
static const rv_comp_data rvcp_addiw[] = {
- { &rvi_opcode_data[rv_op_sext_w], rvcc_sext_w },
+ { &op_sext_w, rvcc_sext_w },
{ },
};
static const rv_comp_data rvcp_subw[] = {
- { &rvi_opcode_data[rv_op_negw], rvcc_negw },
+ { &op_negw, rvcc_negw },
{ },
};
static const rv_comp_data rvcp_fsgnj_s[] = {
- { &rvi_opcode_data[rv_op_fmv_s], rvcc_fmv_s },
+ { &op_fmv_s, rvcc_fmv_s },
{ },
};
static const rv_comp_data rvcp_fsgnjn_s[] = {
- { &rvi_opcode_data[rv_op_fneg_s], rvcc_fneg_s },
+ { &op_fneg_s, rvcc_fneg_s },
{ },
};
static const rv_comp_data rvcp_fsgnjx_s[] = {
- { &rvi_opcode_data[rv_op_fabs_s], rvcc_fabs_s },
+ { &op_fabs_s, rvcc_fabs_s },
{ },
};
static const rv_comp_data rvcp_fsgnj_d[] = {
- { &rvi_opcode_data[rv_op_fmv_d], rvcc_fmv_d },
+ { &op_fmv_d, rvcc_fmv_d },
{ },
};
static const rv_comp_data rvcp_fsgnjn_d[] = {
- { &rvi_opcode_data[rv_op_fneg_d], rvcc_fneg_d },
+ { &op_fneg_d, rvcc_fneg_d },
{ },
};
static const rv_comp_data rvcp_fsgnjx_d[] = {
- { &rvi_opcode_data[rv_op_fabs_d], rvcc_fabs_d },
+ { &op_fabs_d, rvcc_fabs_d },
{ },
};
static const rv_comp_data rvcp_fsgnj_q[] = {
- { &rvi_opcode_data[rv_op_fmv_q], rvcc_fmv_q },
+ { &op_fmv_q, rvcc_fmv_q },
{ },
};
static const rv_comp_data rvcp_fsgnjn_q[] = {
- { &rvi_opcode_data[rv_op_fneg_q], rvcc_fneg_q },
+ { &op_fneg_q, rvcc_fneg_q },
{ },
};
static const rv_comp_data rvcp_fsgnjx_q[] = {
- { &rvi_opcode_data[rv_op_fabs_q], rvcc_fabs_q },
+ { &op_fabs_q, rvcc_fabs_q },
{ },
};
/* Convert compressed insns into normal insns via pseudo expansion. */
-#define DECOMP(X) &(const rv_comp_data){ &rvi_opcode_data[X], rvcc_true }
+#define DECOMP(X) &(const rv_comp_data){ &X, rvcc_true }
/* operand extractors */
@@ -662,11 +659,9 @@ static uint32_t operand_mop_rr_imm(rv_inst inst)
/* instruction metadata */
-static const rv_opcode_data rvi_opcode_data[] = {
-#define OP(N, ...) { __VA_ARGS__ },
+#define OP(N, ...) static const rv_opcode_data op_##N = { __VA_ARGS__ };
#include "riscv-op.c.inc"
#undef OP
-};
/* CSR names */
@@ -953,79 +948,65 @@ static const char *csr_name(int csrno)
static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
{
rv_inst inst = dec->inst;
- rv_opcode op = rv_op_illegal;
switch ((inst >> 0) & 0b11) {
case 0:
switch ((inst >> 13) & 0b111) {
case 0:
if ((inst >> 5) & 0xff) {
- op = rv_op_c_addi4spn;
+ return &op_c_addi4spn;
}
break;
case 1:
if (isa == rv128) {
- op = rv_op_c_lq;
- } else {
- op = rv_op_c_fld;
+ return &op_c_lq;
}
- break;
- case 2: op = rv_op_c_lw; break;
+ return &op_c_fld;
+ case 2: return &op_c_lw;
case 3:
if (isa == rv32) {
- op = rv_op_c_flw;
- } else {
- op = rv_op_c_ld;
+ return &op_c_flw;
}
- break;
+ return &op_c_ld;
case 4:
switch ((inst >> 10) & 0b111) {
- case 0: op = rv_op_c_lbu; break;
+ case 0: return &op_c_lbu;
case 1:
if (((inst >> 6) & 1) == 0) {
- op = rv_op_c_lhu;
- } else {
- op = rv_op_c_lh;
+ return &op_c_lhu;
}
- break;
- case 2: op = rv_op_c_sb; break;
+ return &op_c_lh;
+ case 2: return &op_c_sb;
case 3:
if (((inst >> 6) & 1) == 0) {
- op = rv_op_c_sh;
+ return &op_c_sh;
}
break;
}
break;
case 5:
if (isa == rv128) {
- op = rv_op_c_sq;
- } else {
- op = rv_op_c_fsd;
+ return &op_c_sq;
}
- break;
- case 6: op = rv_op_c_sw; break;
+ return &op_c_fsd;
+ case 6: return &op_c_sw;
case 7:
if (isa == rv32) {
- op = rv_op_c_fsw;
- } else {
- op = rv_op_c_sd;
+ return &op_c_fsw;
}
- break;
+ return &op_c_sd;
}
break;
case 1:
switch ((inst >> 13) & 0b111) {
case 0:
- op = rv_op_c_addi; /* or unspecified HINT */
- break;
+ return &op_c_addi; /* or unspecified HINT */
case 1:
if (isa == rv32) {
- op = rv_op_c_jal;
- } else {
- op = rv_op_c_addiw;
+ return &op_c_jal;
}
- break;
- case 2: op = rv_op_c_li; break;
+ return &op_c_addiw;
+ case 2: return &op_c_li;
case 3:
if (dec->cfg
&& dec->cfg->ext_zcmop
@@ -1033,16 +1014,16 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
&& ((inst >> 11) & 0b11) == 0) {
if (dec->cfg->ext_zicfiss) {
switch (operand_cmop_imm(inst)) {
- case 1: return &rvi_opcode_data[rv_op_c_sspush];
- case 5: return &rvi_opcode_data[rv_op_c_sspopchk];
+ case 1: return &op_c_sspush;
+ case 5: return &op_c_sspopchk;
}
}
- return &rvi_opcode_data[rv_op_c_mop];
+ return &op_c_mop;
}
if (inst & ((1 << 12) | (0x1f << 2))) {
switch ((inst >> 7) & 0b11111) {
- case 2: op = rv_op_c_addi16sp; break;
- default: op = rv_op_c_lui; break;
+ case 2: return &op_c_addi16sp;
+ default: return &op_c_lui;
}
}
break;
@@ -1051,261 +1032,252 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
case 0:
/* For rv32, shamt[5]=1 is designated for custom extensions. */
if (isa != rv32 || (inst & 0x1000) == 0) {
- op = rv_op_c_srli; /* or unspecified HINT */
+ return &op_c_srli; /* or unspecified HINT */
}
break;
case 1:
/* For rv32, shamt[5]=1 is designated for custom extensions. */
if (isa != rv32 || (inst & 0x1000) == 0) {
- op = rv_op_c_srai; /* or unspecified HINT */
+ return &op_c_srai; /* or unspecified HINT */
}
break;
- case 2: op = rv_op_c_andi; break;
+ case 2: return &op_c_andi;
case 3:
switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) {
- case 0: op = rv_op_c_sub; break;
- case 1: op = rv_op_c_xor; break;
- case 2: op = rv_op_c_or; break;
- case 3: op = rv_op_c_and; break;
+ case 0: return &op_c_sub;
+ case 1: return &op_c_xor;
+ case 2: return &op_c_or;
+ case 3: return &op_c_and;
case 4:
if (isa != rv32) {
- op = rv_op_c_subw;
+ return &op_c_subw;
}
break;
case 5:
if (isa != rv32) {
- op = rv_op_c_addw;
+ return &op_c_addw;
}
break;
- case 6: op = rv_op_c_mul; break;
+ case 6: return &op_c_mul;
case 7:
switch ((inst >> 2) & 0b111) {
- case 0: op = rv_op_c_zext_b; break;
- case 1: op = rv_op_c_sext_b; break;
- case 2: op = rv_op_c_zext_h; break;
- case 3: op = rv_op_c_sext_h; break;
- case 4: op = rv_op_c_zext_w; break;
- case 5: op = rv_op_c_not; break;
+ case 0: return &op_c_zext_b;
+ case 1: return &op_c_sext_b;
+ case 2: return &op_c_zext_h;
+ case 3: return &op_c_sext_h;
+ case 4: return &op_c_zext_w;
+ case 5: return &op_c_not;
}
break;
}
break;
}
break;
- case 5: op = rv_op_c_j; break;
- case 6: op = rv_op_c_beqz; break;
- case 7: op = rv_op_c_bnez; break;
+ case 5: return &op_c_j;
+ case 6: return &op_c_beqz;
+ case 7: return &op_c_bnez;
}
break;
case 2:
switch ((inst >> 13) & 0b111) {
case 0:
if (isa != rv32 || (inst & 0x1000) == 0) {
- op = rv_op_c_slli; /* or unspecified HINT */
+ return &op_c_slli; /* or unspecified HINT */
}
break;
case 1:
if (isa == rv128) {
- op = rv_op_c_lqsp;
- } else {
- op = rv_op_c_fldsp;
+ return &op_c_lqsp;
}
- break;
- case 2: op = rv_op_c_lwsp; break;
+ return &op_c_fldsp;
+ case 2: return &op_c_lwsp;
case 3:
if (isa == rv32) {
- op = rv_op_c_flwsp;
- } else {
- op = rv_op_c_ldsp;
+ return &op_c_flwsp;
}
- break;
+ return &op_c_ldsp;
case 4:
switch ((inst >> 12) & 0b1) {
case 0:
switch ((inst >> 2) & 0b11111) {
- case 0: op = rv_op_c_jr; break;
- default: op = rv_op_c_mv; break;
+ case 0: return &op_c_jr;
+ default: return &op_c_mv;
}
break;
case 1:
switch ((inst >> 2) & 0b11111) {
case 0:
switch ((inst >> 7) & 0b11111) {
- case 0: op = rv_op_c_ebreak; break;
- default: op = rv_op_c_jalr; break;
+ case 0: return &op_c_ebreak;
+ default: return &op_c_jalr;
}
break;
- default: op = rv_op_c_add; break;
+ default: return &op_c_add;
}
break;
}
break;
case 5:
if (isa == rv128) {
- op = rv_op_c_sqsp;
- } else {
- op = rv_op_c_fsdsp;
- if (dec->cfg && dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) {
+ return &op_c_sqsp;
+ }
+ if (dec->cfg) {
+ if (dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) {
switch ((inst >> 8) & 0b01111) {
case 8:
if (((inst >> 4) & 0b01111) >= 4) {
- op = rv_op_cm_push;
+ return &op_cm_push;
}
break;
case 10:
if (((inst >> 4) & 0b01111) >= 4) {
- op = rv_op_cm_pop;
+ return &op_cm_pop;
}
break;
case 12:
if (((inst >> 4) & 0b01111) >= 4) {
- op = rv_op_cm_popretz;
+ return &op_cm_popretz;
}
break;
case 14:
if (((inst >> 4) & 0b01111) >= 4) {
- op = rv_op_cm_popret;
+ return &op_cm_popret;
}
break;
}
- } else {
- switch ((inst >> 10) & 0b011) {
- case 0:
- if (dec->cfg && !dec->cfg->ext_zcmt) {
- break;
- }
- if (((inst >> 2) & 0xFF) >= 32) {
- op = rv_op_cm_jalt;
- } else {
- op = rv_op_cm_jt;
- }
+ }
+ switch ((inst >> 10) & 0b011) {
+ case 0:
+ if (!dec->cfg->ext_zcmt) {
break;
- case 3:
- if (dec->cfg && !dec->cfg->ext_zcmp) {
- break;
- }
- switch ((inst >> 5) & 0b011) {
- case 1: op = rv_op_cm_mvsa01; break;
- case 3: op = rv_op_cm_mva01s; break;
- }
+ }
+ if (((inst >> 2) & 0xFF) >= 32) {
+ return &op_cm_jalt;
+ }
+ return &op_cm_jt;
+ case 3:
+ if (!dec->cfg->ext_zcmp) {
break;
}
+ switch ((inst >> 5) & 0b011) {
+ case 1: return &op_cm_mvsa01;
+ case 3: return &op_cm_mva01s;
+ }
+ break;
}
}
- break;
- case 6: op = rv_op_c_swsp; break;
+ return &op_c_fsdsp;
+ case 6: return &op_c_swsp;
case 7:
if (isa == rv32) {
- op = rv_op_c_fswsp;
- } else {
- op = rv_op_c_sdsp;
+ return &op_c_fswsp;
}
- break;
+ return &op_c_sdsp;
}
break;
case 3:
switch ((inst >> 2) & 0b11111) {
case 0:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_lb; break;
- case 1: op = rv_op_lh; break;
- case 2: op = rv_op_lw; break;
- case 3: op = rv_op_ld; break;
- case 4: op = rv_op_lbu; break;
- case 5: op = rv_op_lhu; break;
- case 6: op = rv_op_lwu; break;
- case 7: op = rv_op_ldu; break;
+ case 0: return &op_lb;
+ case 1: return &op_lh;
+ case 2: return &op_lw;
+ case 3: return &op_ld;
+ case 4: return &op_lbu;
+ case 5: return &op_lhu;
+ case 6: return &op_lwu;
+ case 7: return &op_ldu;
}
break;
case 1:
switch ((inst >> 12) & 0b111) {
case 0:
switch ((inst >> 20) & 0b111111111111) {
- case 40: op = rv_op_vl1re8_v; break;
- case 552: op = rv_op_vl2re8_v; break;
- case 1576: op = rv_op_vl4re8_v; break;
- case 3624: op = rv_op_vl8re8_v; break;
+ case 40: return &op_vl1re8_v;
+ case 552: return &op_vl2re8_v;
+ case 1576: return &op_vl4re8_v;
+ case 3624: return &op_vl8re8_v;
}
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vle8_v; break;
- case 11: op = rv_op_vlm_v; break;
- case 16: op = rv_op_vle8ff_v; break;
+ case 0: return &op_vle8_v;
+ case 11: return &op_vlm_v;
+ case 16: return &op_vle8ff_v;
}
break;
- case 1: op = rv_op_vluxei8_v; break;
- case 2: op = rv_op_vlse8_v; break;
- case 3: op = rv_op_vloxei8_v; break;
+ case 1: return &op_vluxei8_v;
+ case 2: return &op_vlse8_v;
+ case 3: return &op_vloxei8_v;
}
break;
- case 1: op = rv_op_flh; break;
- case 2: op = rv_op_flw; break;
- case 3: op = rv_op_fld; break;
- case 4: op = rv_op_flq; break;
+ case 1: return &op_flh;
+ case 2: return &op_flw;
+ case 3: return &op_fld;
+ case 4: return &op_flq;
case 5:
switch ((inst >> 20) & 0b111111111111) {
- case 40: op = rv_op_vl1re16_v; break;
- case 552: op = rv_op_vl2re16_v; break;
- case 1576: op = rv_op_vl4re16_v; break;
- case 3624: op = rv_op_vl8re16_v; break;
+ case 40: return &op_vl1re16_v;
+ case 552: return &op_vl2re16_v;
+ case 1576: return &op_vl4re16_v;
+ case 3624: return &op_vl8re16_v;
}
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vle16_v; break;
- case 16: op = rv_op_vle16ff_v; break;
+ case 0: return &op_vle16_v;
+ case 16: return &op_vle16ff_v;
}
break;
- case 1: op = rv_op_vluxei16_v; break;
- case 2: op = rv_op_vlse16_v; break;
- case 3: op = rv_op_vloxei16_v; break;
+ case 1: return &op_vluxei16_v;
+ case 2: return &op_vlse16_v;
+ case 3: return &op_vloxei16_v;
}
break;
case 6:
switch ((inst >> 20) & 0b111111111111) {
- case 40: op = rv_op_vl1re32_v; break;
- case 552: op = rv_op_vl2re32_v; break;
- case 1576: op = rv_op_vl4re32_v; break;
- case 3624: op = rv_op_vl8re32_v; break;
+ case 40: return &op_vl1re32_v;
+ case 552: return &op_vl2re32_v;
+ case 1576: return &op_vl4re32_v;
+ case 3624: return &op_vl8re32_v;
}
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vle32_v; break;
- case 16: op = rv_op_vle32ff_v; break;
+ case 0: return &op_vle32_v;
+ case 16: return &op_vle32ff_v;
}
break;
- case 1: op = rv_op_vluxei32_v; break;
- case 2: op = rv_op_vlse32_v; break;
- case 3: op = rv_op_vloxei32_v; break;
+ case 1: return &op_vluxei32_v;
+ case 2: return &op_vlse32_v;
+ case 3: return &op_vloxei32_v;
}
break;
case 7:
switch ((inst >> 20) & 0b111111111111) {
- case 40: op = rv_op_vl1re64_v; break;
- case 552: op = rv_op_vl2re64_v; break;
- case 1576: op = rv_op_vl4re64_v; break;
- case 3624: op = rv_op_vl8re64_v; break;
+ case 40: return &op_vl1re64_v;
+ case 552: return &op_vl2re64_v;
+ case 1576: return &op_vl4re64_v;
+ case 3624: return &op_vl8re64_v;
}
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vle64_v; break;
- case 16: op = rv_op_vle64ff_v; break;
+ case 0: return &op_vle64_v;
+ case 16: return &op_vle64ff_v;
}
break;
- case 1: op = rv_op_vluxei64_v; break;
- case 2: op = rv_op_vlse64_v; break;
- case 3: op = rv_op_vloxei64_v; break;
+ case 1: return &op_vluxei64_v;
+ case 2: return &op_vlse64_v;
+ case 3: return &op_vloxei64_v;
}
break;
}
break;
case 3:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fence; break;
- case 1: op = rv_op_fence_i; break;
+ case 0: return &op_fence;
+ case 1: return &op_fence_i;
case 2:
/*
* 'lq' shares the "(...) 010 ..... 0001111" opcode space
@@ -1320,204 +1292,203 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
* Anything that doesn't match these will default to 'lq'.
*/
switch ((inst >> 17) & 0b11111) {
- case 0: op = rv_op_cbo_inval; break;
- case 1: op = rv_op_cbo_clean; break;
- case 2: op = rv_op_cbo_flush; break;
- case 4: op = rv_op_cbo_zero; break;
- default: op = rv_op_lq; break;
+ case 0: return &op_cbo_inval;
+ case 1: return &op_cbo_clean;
+ case 2: return &op_cbo_flush;
+ case 4: return &op_cbo_zero;
+ default: return &op_lq;
}
}
break;
case 4:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_addi; break;
+ case 0: return &op_addi;
case 1:
switch ((inst >> 27) & 0b11111) {
- case 0b00000: op = rv_op_slli; break;
+ case 0b00000: return &op_slli;
case 0b00001:
switch ((inst >> 20) & 0b1111111) {
- case 0b0001111: op = rv_op_zip; break;
+ case 0b0001111: return &op_zip;
}
break;
case 0b00010:
switch ((inst >> 20) & 0b1111111) {
- case 0b0000000: op = rv_op_sha256sum0; break;
- case 0b0000001: op = rv_op_sha256sum1; break;
- case 0b0000010: op = rv_op_sha256sig0; break;
- case 0b0000011: op = rv_op_sha256sig1; break;
- case 0b0000100: op = rv_op_sha512sum0; break;
- case 0b0000101: op = rv_op_sha512sum1; break;
- case 0b0000110: op = rv_op_sha512sig0; break;
- case 0b0000111: op = rv_op_sha512sig1; break;
- case 0b0001000: op = rv_op_sm3p0; break;
- case 0b0001001: op = rv_op_sm3p1; break;
+ case 0b0000000: return &op_sha256sum0;
+ case 0b0000001: return &op_sha256sum1;
+ case 0b0000010: return &op_sha256sig0;
+ case 0b0000011: return &op_sha256sig1;
+ case 0b0000100: return &op_sha512sum0;
+ case 0b0000101: return &op_sha512sum1;
+ case 0b0000110: return &op_sha512sig0;
+ case 0b0000111: return &op_sha512sig1;
+ case 0b0001000: return &op_sm3p0;
+ case 0b0001001: return &op_sm3p1;
}
break;
- case 0b00101: op = rv_op_bseti; break;
+ case 0b00101: return &op_bseti;
case 0b00110:
switch ((inst >> 20) & 0b1111111) {
- case 0b0000000: op = rv_op_aes64im; break;
+ case 0b0000000: return &op_aes64im;
default:
if (((inst >> 24) & 0b0111) == 0b001) {
- op = rv_op_aes64ks1i;
+ return &op_aes64ks1i;
}
break;
}
break;
- case 0b01001: op = rv_op_bclri; break;
- case 0b01101: op = rv_op_binvi; break;
+ case 0b01001: return &op_bclri;
+ case 0b01101: return &op_binvi;
case 0b01100:
switch ((inst >> 20) & 0b1111111) {
- case 0b0000000: op = rv_op_clz; break;
- case 0b0000001: op = rv_op_ctz; break;
- case 0b0000010: op = rv_op_cpop; break;
+ case 0b0000000: return &op_clz;
+ case 0b0000001: return &op_ctz;
+ case 0b0000010: return &op_cpop;
/* 0b0000011 */
- case 0b0000100: op = rv_op_sext_b; break;
- case 0b0000101: op = rv_op_sext_h; break;
+ case 0b0000100: return &op_sext_b;
+ case 0b0000101: return &op_sext_h;
}
break;
}
break;
- case 2: op = rv_op_slti; break;
- case 3: op = rv_op_sltiu; break;
- case 4: op = rv_op_xori; break;
+ case 2: return &op_slti;
+ case 3: return &op_sltiu;
+ case 4: return &op_xori;
case 5:
switch ((inst >> 27) & 0b11111) {
- case 0b00000: op = rv_op_srli; break;
+ case 0b00000: return &op_srli;
case 0b00001:
switch ((inst >> 20) & 0b1111111) {
- case 0b0001111: op = rv_op_unzip; break;
+ case 0b0001111: return &op_unzip;
}
break;
- case 0b00101: op = rv_op_orc_b; break;
- case 0b01000: op = rv_op_srai; break;
- case 0b01001: op = rv_op_bexti; break;
- case 0b01100: op = rv_op_rori; break;
+ case 0b00101: return &op_orc_b;
+ case 0b01000: return &op_srai;
+ case 0b01001: return &op_bexti;
+ case 0b01100: return &op_rori;
case 0b01101:
switch ((inst >> 20) & 0b1111111) {
case 0b0011000:
if (isa == rv32) {
- op = rv_op_rev8;
+ return &op_rev8;
}
break;
case 0b0111000:
if (isa == rv64) {
- op = rv_op_rev8;
+ return &op_rev8;
}
break;
- case 0b0000111: op = rv_op_brev8; break;
+ case 0b0000111: return &op_brev8;
}
break;
}
break;
- case 6: op = rv_op_ori; break;
- case 7: op = rv_op_andi; break;
+ case 6: return &op_ori;
+ case 7: return &op_andi;
}
break;
case 5:
- op = rv_op_auipc;
if (dec->cfg && dec->cfg->ext_zicfilp &&
(((inst >> 7) & 0b11111) == 0b00000)) {
- op = rv_op_lpad;
+ return &op_lpad;
}
- break;
+ return &op_auipc;
case 6:
/* OP-IMM-32 */
if (isa == rv32) {
break;
}
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_addiw; break;
+ case 0: return &op_addiw;
case 1:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_slliw; break;
- case 2: op = rv_op_slli_uw; break;
+ case 0: return &op_slliw;
+ case 2: return &op_slli_uw;
case 24:
switch ((inst >> 20) & 0b11111) {
- case 0b00000: op = rv_op_clzw; break;
- case 0b00001: op = rv_op_ctzw; break;
- case 0b00010: op = rv_op_cpopw; break;
+ case 0b00000: return &op_clzw;
+ case 0b00001: return &op_ctzw;
+ case 0b00010: return &op_cpopw;
}
break;
}
break;
case 5:
switch ((inst >> 25) & 0b1111111) {
- case 0: op = rv_op_srliw; break;
- case 32: op = rv_op_sraiw; break;
- case 48: op = rv_op_roriw; break;
+ case 0: return &op_srliw;
+ case 32: return &op_sraiw;
+ case 48: return &op_roriw;
}
break;
}
break;
case 8:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_sb; break;
- case 1: op = rv_op_sh; break;
- case 2: op = rv_op_sw; break;
- case 3: op = rv_op_sd; break;
- case 4: op = rv_op_sq; break;
+ case 0: return &op_sb;
+ case 1: return &op_sh;
+ case 2: return &op_sw;
+ case 3: return &op_sd;
+ case 4: return &op_sq;
}
break;
case 9:
switch ((inst >> 12) & 0b111) {
case 0:
switch ((inst >> 20) & 0b111111111111) {
- case 40: op = rv_op_vs1r_v; break;
- case 552: op = rv_op_vs2r_v; break;
- case 1576: op = rv_op_vs4r_v; break;
- case 3624: op = rv_op_vs8r_v; break;
+ case 40: return &op_vs1r_v;
+ case 552: return &op_vs2r_v;
+ case 1576: return &op_vs4r_v;
+ case 3624: return &op_vs8r_v;
}
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vse8_v; break;
- case 11: op = rv_op_vsm_v; break;
+ case 0: return &op_vse8_v;
+ case 11: return &op_vsm_v;
}
break;
- case 1: op = rv_op_vsuxei8_v; break;
- case 2: op = rv_op_vsse8_v; break;
- case 3: op = rv_op_vsoxei8_v; break;
+ case 1: return &op_vsuxei8_v;
+ case 2: return &op_vsse8_v;
+ case 3: return &op_vsoxei8_v;
}
break;
- case 1: op = rv_op_fsh; break;
- case 2: op = rv_op_fsw; break;
- case 3: op = rv_op_fsd; break;
- case 4: op = rv_op_fsq; break;
+ case 1: return &op_fsh;
+ case 2: return &op_fsw;
+ case 3: return &op_fsd;
+ case 4: return &op_fsq;
case 5:
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vse16_v; break;
+ case 0: return &op_vse16_v;
}
break;
- case 1: op = rv_op_vsuxei16_v; break;
- case 2: op = rv_op_vsse16_v; break;
- case 3: op = rv_op_vsoxei16_v; break;
+ case 1: return &op_vsuxei16_v;
+ case 2: return &op_vsse16_v;
+ case 3: return &op_vsoxei16_v;
}
break;
case 6:
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vse32_v; break;
+ case 0: return &op_vse32_v;
}
break;
- case 1: op = rv_op_vsuxei32_v; break;
- case 2: op = rv_op_vsse32_v; break;
- case 3: op = rv_op_vsoxei32_v; break;
+ case 1: return &op_vsuxei32_v;
+ case 2: return &op_vsse32_v;
+ case 3: return &op_vsoxei32_v;
}
break;
case 7:
switch ((inst >> 26) & 0b111) {
case 0:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_vse64_v; break;
+ case 0: return &op_vse64_v;
}
break;
- case 1: op = rv_op_vsuxei64_v; break;
- case 2: op = rv_op_vsse64_v; break;
- case 3: op = rv_op_vsoxei64_v; break;
+ case 1: return &op_vsuxei64_v;
+ case 2: return &op_vsse64_v;
+ case 3: return &op_vsoxei64_v;
}
break;
}
@@ -1525,153 +1496,150 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
case 11:
switch (((inst >> 24) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_amoadd_b; break;
- case 1: op = rv_op_amoadd_h; break;
- case 2: op = rv_op_amoadd_w; break;
- case 3: op = rv_op_amoadd_d; break;
- case 4: op = rv_op_amoadd_q; break;
- case 8: op = rv_op_amoswap_b; break;
- case 9: op = rv_op_amoswap_h; break;
- case 10: op = rv_op_amoswap_w; break;
- case 11: op = rv_op_amoswap_d; break;
- case 12: op = rv_op_amoswap_q; break;
+ case 0: return &op_amoadd_b;
+ case 1: return &op_amoadd_h;
+ case 2: return &op_amoadd_w;
+ case 3: return &op_amoadd_d;
+ case 4: return &op_amoadd_q;
+ case 8: return &op_amoswap_b;
+ case 9: return &op_amoswap_h;
+ case 10: return &op_amoswap_w;
+ case 11: return &op_amoswap_d;
+ case 12: return &op_amoswap_q;
case 18:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_lr_w; break;
+ case 0: return &op_lr_w;
}
break;
case 19:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_lr_d; break;
+ case 0: return &op_lr_d;
}
break;
case 20:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_lr_q; break;
- }
- break;
- case 26: op = rv_op_sc_w; break;
- case 27: op = rv_op_sc_d; break;
- case 28: op = rv_op_sc_q; break;
- case 32: op = rv_op_amoxor_b; break;
- case 33: op = rv_op_amoxor_h; break;
- case 34: op = rv_op_amoxor_w; break;
- case 35: op = rv_op_amoxor_d; break;
- case 36: op = rv_op_amoxor_q; break;
- case 40: op = rv_op_amocas_b; break;
- case 41: op = rv_op_amocas_h; break;
- case 42: op = rv_op_amocas_w; break;
- case 43: op = rv_op_amocas_d; break;
- case 44: op = rv_op_amocas_q; break;
- case 64: op = rv_op_amoor_b; break;
- case 65: op = rv_op_amoor_h; break;
- case 66: op = rv_op_amoor_w; break;
- case 67: op = rv_op_amoor_d; break;
- case 68: op = rv_op_amoor_q; break;
- case 74: op = rv_op_ssamoswap_w; break;
- case 75: op = rv_op_ssamoswap_d; break;
- case 96: op = rv_op_amoand_b; break;
- case 97: op = rv_op_amoand_h; break;
- case 98: op = rv_op_amoand_w; break;
- case 99: op = rv_op_amoand_d; break;
- case 100: op = rv_op_amoand_q; break;
- case 128: op = rv_op_amomin_b; break;
- case 129: op = rv_op_amomin_h; break;
- case 130: op = rv_op_amomin_w; break;
- case 131: op = rv_op_amomin_d; break;
- case 132: op = rv_op_amomin_q; break;
- case 160: op = rv_op_amomax_b; break;
- case 161: op = rv_op_amomax_h; break;
- case 162: op = rv_op_amomax_w; break;
- case 163: op = rv_op_amomax_d; break;
- case 164: op = rv_op_amomax_q; break;
- case 192: op = rv_op_amominu_b; break;
- case 193: op = rv_op_amominu_h; break;
- case 194: op = rv_op_amominu_w; break;
- case 195: op = rv_op_amominu_d; break;
- case 196: op = rv_op_amominu_q; break;
- case 224: op = rv_op_amomaxu_b; break;
- case 225: op = rv_op_amomaxu_h; break;
- case 226: op = rv_op_amomaxu_w; break;
- case 227: op = rv_op_amomaxu_d; break;
- case 228: op = rv_op_amomaxu_q; break;
+ case 0: return &op_lr_q;
+ }
+ break;
+ case 26: return &op_sc_w;
+ case 27: return &op_sc_d;
+ case 28: return &op_sc_q;
+ case 32: return &op_amoxor_b;
+ case 33: return &op_amoxor_h;
+ case 34: return &op_amoxor_w;
+ case 35: return &op_amoxor_d;
+ case 36: return &op_amoxor_q;
+ case 40: return &op_amocas_b;
+ case 41: return &op_amocas_h;
+ case 42: return &op_amocas_w;
+ case 43: return &op_amocas_d;
+ case 44: return &op_amocas_q;
+ case 64: return &op_amoor_b;
+ case 65: return &op_amoor_h;
+ case 66: return &op_amoor_w;
+ case 67: return &op_amoor_d;
+ case 68: return &op_amoor_q;
+ case 74: return &op_ssamoswap_w;
+ case 75: return &op_ssamoswap_d;
+ case 96: return &op_amoand_b;
+ case 97: return &op_amoand_h;
+ case 98: return &op_amoand_w;
+ case 99: return &op_amoand_d;
+ case 100: return &op_amoand_q;
+ case 128: return &op_amomin_b;
+ case 129: return &op_amomin_h;
+ case 130: return &op_amomin_w;
+ case 131: return &op_amomin_d;
+ case 132: return &op_amomin_q;
+ case 160: return &op_amomax_b;
+ case 161: return &op_amomax_h;
+ case 162: return &op_amomax_w;
+ case 163: return &op_amomax_d;
+ case 164: return &op_amomax_q;
+ case 192: return &op_amominu_b;
+ case 193: return &op_amominu_h;
+ case 194: return &op_amominu_w;
+ case 195: return &op_amominu_d;
+ case 196: return &op_amominu_q;
+ case 224: return &op_amomaxu_b;
+ case 225: return &op_amomaxu_h;
+ case 226: return &op_amomaxu_w;
+ case 227: return &op_amomaxu_d;
+ case 228: return &op_amomaxu_q;
}
break;
case 12:
switch (((inst >> 22) & 0b1111111000) |
((inst >> 12) & 0b0000000111)) {
- case 0: op = rv_op_add; break;
- case 1: op = rv_op_sll; break;
- case 2: op = rv_op_slt; break;
- case 3: op = rv_op_sltu; break;
- case 4: op = rv_op_xor; break;
- case 5: op = rv_op_srl; break;
- case 6: op = rv_op_or; break;
- case 7: op = rv_op_and; break;
- case 8: op = rv_op_mul; break;
- case 9: op = rv_op_mulh; break;
- case 10: op = rv_op_mulhsu; break;
- case 11: op = rv_op_mulhu; break;
- case 12: op = rv_op_div; break;
- case 13: op = rv_op_divu; break;
- case 14: op = rv_op_rem; break;
- case 15: op = rv_op_remu; break;
+ case 0: return &op_add;
+ case 1: return &op_sll;
+ case 2: return &op_slt;
+ case 3: return &op_sltu;
+ case 4: return &op_xor;
+ case 5: return &op_srl;
+ case 6: return &op_or;
+ case 7: return &op_and;
+ case 8: return &op_mul;
+ case 9: return &op_mulh;
+ case 10: return &op_mulhsu;
+ case 11: return &op_mulhu;
+ case 12: return &op_div;
+ case 13: return &op_divu;
+ case 14: return &op_rem;
+ case 15: return &op_remu;
case 36:
if (isa == rv32 && !((inst >> 20) & 0b11111)) {
- op = rv_op_zext_h;
- } else {
- op = rv_op_pack;
- }
- break;
- case 39: op = rv_op_packh; break;
-
- case 41: op = rv_op_clmul; break;
- case 42: op = rv_op_clmulr; break;
- case 43: op = rv_op_clmulh; break;
- case 44: op = rv_op_min; break;
- case 45: op = rv_op_minu; break;
- case 46: op = rv_op_max; break;
- case 47: op = rv_op_maxu; break;
- case 075: op = rv_op_czero_eqz; break;
- case 077: op = rv_op_czero_nez; break;
- case 130: op = rv_op_sh1add; break;
- case 132: op = rv_op_sh2add; break;
- case 134: op = rv_op_sh3add; break;
- case 161: op = rv_op_bset; break;
- case 162: op = rv_op_xperm4; break;
- case 164: op = rv_op_xperm8; break;
- case 200: op = rv_op_aes64es; break;
- case 216: op = rv_op_aes64esm; break;
- case 232: op = rv_op_aes64ds; break;
- case 248: op = rv_op_aes64dsm; break;
- case 256: op = rv_op_sub; break;
- case 260: op = rv_op_xnor; break;
- case 261: op = rv_op_sra; break;
- case 262: op = rv_op_orn; break;
- case 263: op = rv_op_andn; break;
- case 289: op = rv_op_bclr; break;
- case 293: op = rv_op_bext; break;
- case 320: op = rv_op_sha512sum0r; break;
- case 328: op = rv_op_sha512sum1r; break;
- case 336: op = rv_op_sha512sig0l; break;
- case 344: op = rv_op_sha512sig1l; break;
- case 368: op = rv_op_sha512sig0h; break;
- case 376: op = rv_op_sha512sig1h; break;
- case 385: op = rv_op_rol; break;
- case 389: op = rv_op_ror; break;
- case 417: op = rv_op_binv; break;
- case 504: op = rv_op_aes64ks2; break;
+ return &op_zext_h;
+ }
+ return &op_pack;
+ case 39: return &op_packh;
+ case 41: return &op_clmul;
+ case 42: return &op_clmulr;
+ case 43: return &op_clmulh;
+ case 44: return &op_min;
+ case 45: return &op_minu;
+ case 46: return &op_max;
+ case 47: return &op_maxu;
+ case 075: return &op_czero_eqz;
+ case 077: return &op_czero_nez;
+ case 130: return &op_sh1add;
+ case 132: return &op_sh2add;
+ case 134: return &op_sh3add;
+ case 161: return &op_bset;
+ case 162: return &op_xperm4;
+ case 164: return &op_xperm8;
+ case 200: return &op_aes64es;
+ case 216: return &op_aes64esm;
+ case 232: return &op_aes64ds;
+ case 248: return &op_aes64dsm;
+ case 256: return &op_sub;
+ case 260: return &op_xnor;
+ case 261: return &op_sra;
+ case 262: return &op_orn;
+ case 263: return &op_andn;
+ case 289: return &op_bclr;
+ case 293: return &op_bext;
+ case 320: return &op_sha512sum0r;
+ case 328: return &op_sha512sum1r;
+ case 336: return &op_sha512sig0l;
+ case 344: return &op_sha512sig1l;
+ case 368: return &op_sha512sig0h;
+ case 376: return &op_sha512sig1h;
+ case 385: return &op_rol;
+ case 389: return &op_ror;
+ case 417: return &op_binv;
+ case 504: return &op_aes64ks2;
}
switch ((inst >> 25) & 0b0011111) {
- case 17: op = rv_op_aes32esi; break;
- case 19: op = rv_op_aes32esmi; break;
- case 21: op = rv_op_aes32dsi; break;
- case 23: op = rv_op_aes32dsmi; break;
- case 24: op = rv_op_sm4ed; break;
- case 26: op = rv_op_sm4ks; break;
+ case 17: return &op_aes32esi;
+ case 19: return &op_aes32esmi;
+ case 21: return &op_aes32dsi;
+ case 23: return &op_aes32dsmi;
+ case 24: return &op_sm4ed;
+ case 26: return &op_sm4ks;
}
break;
- case 13: op = rv_op_lui; break;
+ case 13: return &op_lui;
case 14:
/* OP-32 */
if (isa == rv32) {
@@ -1679,317 +1647,317 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
}
switch (((inst >> 22) & 0b1111111000) |
((inst >> 12) & 0b0000000111)) {
- case 0: op = rv_op_addw; break;
- case 1: op = rv_op_sllw; break;
- case 5: op = rv_op_srlw; break;
- case 8: op = rv_op_mulw; break;
- case 12: op = rv_op_divw; break;
- case 13: op = rv_op_divuw; break;
- case 14: op = rv_op_remw; break;
- case 15: op = rv_op_remuw; break;
- case 32: op = rv_op_add_uw; break;
+ case 0: return &op_addw;
+ case 1: return &op_sllw;
+ case 5: return &op_srlw;
+ case 8: return &op_mulw;
+ case 12: return &op_divw;
+ case 13: return &op_divuw;
+ case 14: return &op_remw;
+ case 15: return &op_remuw;
+ case 32: return &op_add_uw;
case 36:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_zext_h; break;
- default: op = rv_op_packw; break;
+ case 0: return &op_zext_h;
+ default: return &op_packw;
}
break;
- case 130: op = rv_op_sh1add_uw; break;
- case 132: op = rv_op_sh2add_uw; break;
- case 134: op = rv_op_sh3add_uw; break;
- case 256: op = rv_op_subw; break;
- case 261: op = rv_op_sraw; break;
- case 385: op = rv_op_rolw; break;
- case 389: op = rv_op_rorw; break;
+ case 130: return &op_sh1add_uw;
+ case 132: return &op_sh2add_uw;
+ case 134: return &op_sh3add_uw;
+ case 256: return &op_subw;
+ case 261: return &op_sraw;
+ case 385: return &op_rolw;
+ case 389: return &op_rorw;
}
break;
case 16:
switch ((inst >> 25) & 0b11) {
- case 0: op = rv_op_fmadd_s; break;
- case 1: op = rv_op_fmadd_d; break;
- case 3: op = rv_op_fmadd_q; break;
+ case 0: return &op_fmadd_s;
+ case 1: return &op_fmadd_d;
+ case 3: return &op_fmadd_q;
}
break;
case 17:
switch ((inst >> 25) & 0b11) {
- case 0: op = rv_op_fmsub_s; break;
- case 1: op = rv_op_fmsub_d; break;
- case 3: op = rv_op_fmsub_q; break;
+ case 0: return &op_fmsub_s;
+ case 1: return &op_fmsub_d;
+ case 3: return &op_fmsub_q;
}
break;
case 18:
switch ((inst >> 25) & 0b11) {
- case 0: op = rv_op_fnmsub_s; break;
- case 1: op = rv_op_fnmsub_d; break;
- case 3: op = rv_op_fnmsub_q; break;
+ case 0: return &op_fnmsub_s;
+ case 1: return &op_fnmsub_d;
+ case 3: return &op_fnmsub_q;
}
break;
case 19:
switch ((inst >> 25) & 0b11) {
- case 0: op = rv_op_fnmadd_s; break;
- case 1: op = rv_op_fnmadd_d; break;
- case 3: op = rv_op_fnmadd_q; break;
+ case 0: return &op_fnmadd_s;
+ case 1: return &op_fnmadd_d;
+ case 3: return &op_fnmadd_q;
}
break;
case 20:
switch ((inst >> 25) & 0b1111111) {
- case 0: op = rv_op_fadd_s; break;
- case 1: op = rv_op_fadd_d; break;
- case 3: op = rv_op_fadd_q; break;
- case 4: op = rv_op_fsub_s; break;
- case 5: op = rv_op_fsub_d; break;
- case 7: op = rv_op_fsub_q; break;
- case 8: op = rv_op_fmul_s; break;
- case 9: op = rv_op_fmul_d; break;
- case 11: op = rv_op_fmul_q; break;
- case 12: op = rv_op_fdiv_s; break;
- case 13: op = rv_op_fdiv_d; break;
- case 15: op = rv_op_fdiv_q; break;
+ case 0: return &op_fadd_s;
+ case 1: return &op_fadd_d;
+ case 3: return &op_fadd_q;
+ case 4: return &op_fsub_s;
+ case 5: return &op_fsub_d;
+ case 7: return &op_fsub_q;
+ case 8: return &op_fmul_s;
+ case 9: return &op_fmul_d;
+ case 11: return &op_fmul_q;
+ case 12: return &op_fdiv_s;
+ case 13: return &op_fdiv_d;
+ case 15: return &op_fdiv_q;
case 16:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fsgnj_s; break;
- case 1: op = rv_op_fsgnjn_s; break;
- case 2: op = rv_op_fsgnjx_s; break;
+ case 0: return &op_fsgnj_s;
+ case 1: return &op_fsgnjn_s;
+ case 2: return &op_fsgnjx_s;
}
break;
case 17:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fsgnj_d; break;
- case 1: op = rv_op_fsgnjn_d; break;
- case 2: op = rv_op_fsgnjx_d; break;
+ case 0: return &op_fsgnj_d;
+ case 1: return &op_fsgnjn_d;
+ case 2: return &op_fsgnjx_d;
}
break;
case 19:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fsgnj_q; break;
- case 1: op = rv_op_fsgnjn_q; break;
- case 2: op = rv_op_fsgnjx_q; break;
+ case 0: return &op_fsgnj_q;
+ case 1: return &op_fsgnjn_q;
+ case 2: return &op_fsgnjx_q;
}
break;
case 20:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fmin_s; break;
- case 1: op = rv_op_fmax_s; break;
- case 2: op = rv_op_fminm_s; break;
- case 3: op = rv_op_fmaxm_s; break;
+ case 0: return &op_fmin_s;
+ case 1: return &op_fmax_s;
+ case 2: return &op_fminm_s;
+ case 3: return &op_fmaxm_s;
}
break;
case 21:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fmin_d; break;
- case 1: op = rv_op_fmax_d; break;
- case 2: op = rv_op_fminm_d; break;
- case 3: op = rv_op_fmaxm_d; break;
+ case 0: return &op_fmin_d;
+ case 1: return &op_fmax_d;
+ case 2: return &op_fminm_d;
+ case 3: return &op_fmaxm_d;
}
break;
case 22:
switch (((inst >> 12) & 0b111)) {
- case 2: op = rv_op_fminm_h; break;
- case 3: op = rv_op_fmaxm_h; break;
+ case 2: return &op_fminm_h;
+ case 3: return &op_fmaxm_h;
}
break;
case 23:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fmin_q; break;
- case 1: op = rv_op_fmax_q; break;
- case 2: op = rv_op_fminm_q; break;
- case 3: op = rv_op_fmaxm_q; break;
+ case 0: return &op_fmin_q;
+ case 1: return &op_fmax_q;
+ case 2: return &op_fminm_q;
+ case 3: return &op_fmaxm_q;
}
break;
case 32:
switch ((inst >> 20) & 0b11111) {
- case 1: op = rv_op_fcvt_s_d; break;
- case 3: op = rv_op_fcvt_s_q; break;
- case 4: op = rv_op_fround_s; break;
- case 5: op = rv_op_froundnx_s; break;
- case 6: op = rv_op_fcvt_s_bf16; break;
+ case 1: return &op_fcvt_s_d;
+ case 3: return &op_fcvt_s_q;
+ case 4: return &op_fround_s;
+ case 5: return &op_froundnx_s;
+ case 6: return &op_fcvt_s_bf16;
}
break;
case 33:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_d_s; break;
- case 3: op = rv_op_fcvt_d_q; break;
- case 4: op = rv_op_fround_d; break;
- case 5: op = rv_op_froundnx_d; break;
+ case 0: return &op_fcvt_d_s;
+ case 3: return &op_fcvt_d_q;
+ case 4: return &op_fround_d;
+ case 5: return &op_froundnx_d;
}
break;
case 34:
switch (((inst >> 20) & 0b11111)) {
- case 4: op = rv_op_fround_h; break;
- case 5: op = rv_op_froundnx_h; break;
- case 8: op = rv_op_fcvt_bf16_s; break;
+ case 4: return &op_fround_h;
+ case 5: return &op_froundnx_h;
+ case 8: return &op_fcvt_bf16_s;
}
break;
case 35:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_q_s; break;
- case 1: op = rv_op_fcvt_q_d; break;
- case 4: op = rv_op_fround_q; break;
- case 5: op = rv_op_froundnx_q; break;
+ case 0: return &op_fcvt_q_s;
+ case 1: return &op_fcvt_q_d;
+ case 4: return &op_fround_q;
+ case 5: return &op_froundnx_q;
}
break;
case 44:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fsqrt_s; break;
+ case 0: return &op_fsqrt_s;
}
break;
case 45:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fsqrt_d; break;
+ case 0: return &op_fsqrt_d;
}
break;
case 47:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fsqrt_q; break;
+ case 0: return &op_fsqrt_q;
}
break;
case 80:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fle_s; break;
- case 1: op = rv_op_flt_s; break;
- case 2: op = rv_op_feq_s; break;
- case 4: op = rv_op_fleq_s; break;
- case 5: op = rv_op_fltq_s; break;
+ case 0: return &op_fle_s;
+ case 1: return &op_flt_s;
+ case 2: return &op_feq_s;
+ case 4: return &op_fleq_s;
+ case 5: return &op_fltq_s;
}
break;
case 81:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fle_d; break;
- case 1: op = rv_op_flt_d; break;
- case 2: op = rv_op_feq_d; break;
- case 4: op = rv_op_fleq_d; break;
- case 5: op = rv_op_fltq_d; break;
+ case 0: return &op_fle_d;
+ case 1: return &op_flt_d;
+ case 2: return &op_feq_d;
+ case 4: return &op_fleq_d;
+ case 5: return &op_fltq_d;
}
break;
case 82:
switch (((inst >> 12) & 0b111)) {
- case 4: op = rv_op_fleq_h; break;
- case 5: op = rv_op_fltq_h; break;
+ case 4: return &op_fleq_h;
+ case 5: return &op_fltq_h;
}
break;
case 83:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_fle_q; break;
- case 1: op = rv_op_flt_q; break;
- case 2: op = rv_op_feq_q; break;
- case 4: op = rv_op_fleq_q; break;
- case 5: op = rv_op_fltq_q; break;
+ case 0: return &op_fle_q;
+ case 1: return &op_flt_q;
+ case 2: return &op_feq_q;
+ case 4: return &op_fleq_q;
+ case 5: return &op_fltq_q;
}
break;
case 89:
switch (((inst >> 12) & 0b111)) {
- case 0: op = rv_op_fmvp_d_x; break;
+ case 0: return &op_fmvp_d_x;
}
break;
case 91:
switch (((inst >> 12) & 0b111)) {
- case 0: op = rv_op_fmvp_q_x; break;
+ case 0: return &op_fmvp_q_x;
}
break;
case 96:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_w_s; break;
- case 1: op = rv_op_fcvt_wu_s; break;
- case 2: op = rv_op_fcvt_l_s; break;
- case 3: op = rv_op_fcvt_lu_s; break;
+ case 0: return &op_fcvt_w_s;
+ case 1: return &op_fcvt_wu_s;
+ case 2: return &op_fcvt_l_s;
+ case 3: return &op_fcvt_lu_s;
}
break;
case 97:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_w_d; break;
- case 1: op = rv_op_fcvt_wu_d; break;
- case 2: op = rv_op_fcvt_l_d; break;
- case 3: op = rv_op_fcvt_lu_d; break;
- case 8: op = rv_op_fcvtmod_w_d; break;
+ case 0: return &op_fcvt_w_d;
+ case 1: return &op_fcvt_wu_d;
+ case 2: return &op_fcvt_l_d;
+ case 3: return &op_fcvt_lu_d;
+ case 8: return &op_fcvtmod_w_d;
}
break;
case 99:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_w_q; break;
- case 1: op = rv_op_fcvt_wu_q; break;
- case 2: op = rv_op_fcvt_l_q; break;
- case 3: op = rv_op_fcvt_lu_q; break;
+ case 0: return &op_fcvt_w_q;
+ case 1: return &op_fcvt_wu_q;
+ case 2: return &op_fcvt_l_q;
+ case 3: return &op_fcvt_lu_q;
}
break;
case 104:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_s_w; break;
- case 1: op = rv_op_fcvt_s_wu; break;
- case 2: op = rv_op_fcvt_s_l; break;
- case 3: op = rv_op_fcvt_s_lu; break;
+ case 0: return &op_fcvt_s_w;
+ case 1: return &op_fcvt_s_wu;
+ case 2: return &op_fcvt_s_l;
+ case 3: return &op_fcvt_s_lu;
}
break;
case 105:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_d_w; break;
- case 1: op = rv_op_fcvt_d_wu; break;
- case 2: op = rv_op_fcvt_d_l; break;
- case 3: op = rv_op_fcvt_d_lu; break;
+ case 0: return &op_fcvt_d_w;
+ case 1: return &op_fcvt_d_wu;
+ case 2: return &op_fcvt_d_l;
+ case 3: return &op_fcvt_d_lu;
}
break;
case 107:
switch ((inst >> 20) & 0b11111) {
- case 0: op = rv_op_fcvt_q_w; break;
- case 1: op = rv_op_fcvt_q_wu; break;
- case 2: op = rv_op_fcvt_q_l; break;
- case 3: op = rv_op_fcvt_q_lu; break;
+ case 0: return &op_fcvt_q_w;
+ case 1: return &op_fcvt_q_wu;
+ case 2: return &op_fcvt_q_l;
+ case 3: return &op_fcvt_q_lu;
}
break;
case 112:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_x_s; break;
- case 1: op = rv_op_fclass_s; break;
+ case 0: return &op_fmv_x_s;
+ case 1: return &op_fclass_s;
}
break;
case 113:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_x_d; break;
- case 1: op = rv_op_fclass_d; break;
- case 8: op = rv_op_fmvh_x_d; break;
+ case 0: return &op_fmv_x_d;
+ case 1: return &op_fclass_d;
+ case 8: return &op_fmvh_x_d;
}
break;
case 114:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_x_h; break;
+ case 0: return &op_fmv_x_h;
}
break;
case 115:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_x_q; break;
- case 1: op = rv_op_fclass_q; break;
- case 8: op = rv_op_fmvh_x_q; break;
+ case 0: return &op_fmv_x_q;
+ case 1: return &op_fclass_q;
+ case 8: return &op_fmvh_x_q;
}
break;
case 120:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_s_x; break;
- case 8: op = rv_op_fli_s; break;
+ case 0: return &op_fmv_s_x;
+ case 8: return &op_fli_s;
}
break;
case 121:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_d_x; break;
- case 8: op = rv_op_fli_d; break;
+ case 0: return &op_fmv_d_x;
+ case 8: return &op_fli_d;
}
break;
case 122:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_h_x; break;
- case 8: op = rv_op_fli_h; break;
+ case 0: return &op_fmv_h_x;
+ case 8: return &op_fli_h;
}
break;
case 123:
switch (((inst >> 17) & 0b11111000) |
((inst >> 12) & 0b00000111)) {
- case 0: op = rv_op_fmv_q_x; break;
- case 8: op = rv_op_fli_q; break;
+ case 0: return &op_fmv_q_x;
+ case 8: return &op_fli_q;
}
break;
}
@@ -1998,484 +1966,537 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
switch ((inst >> 12) & 0b111) {
case 0:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vadd_vv; break;
- case 1: op = rv_op_vandn_vv; break;
- case 2: op = rv_op_vsub_vv; break;
- case 4: op = rv_op_vminu_vv; break;
- case 5: op = rv_op_vmin_vv; break;
- case 6: op = rv_op_vmaxu_vv; break;
- case 7: op = rv_op_vmax_vv; break;
- case 9: op = rv_op_vand_vv; break;
- case 10: op = rv_op_vor_vv; break;
- case 11: op = rv_op_vxor_vv; break;
- case 12: op = rv_op_vrgather_vv; break;
- case 14: op = rv_op_vrgatherei16_vv; break;
+ case 0: return &op_vadd_vv;
+ case 1: return &op_vandn_vv;
+ case 2: return &op_vsub_vv;
+ case 4: return &op_vminu_vv;
+ case 5: return &op_vmin_vv;
+ case 6: return &op_vmaxu_vv;
+ case 7: return &op_vmax_vv;
+ case 9: return &op_vand_vv;
+ case 10: return &op_vor_vv;
+ case 11: return &op_vxor_vv;
+ case 12: return &op_vrgather_vv;
+ case 14: return &op_vrgatherei16_vv;
case 16:
if (((inst >> 25) & 1) == 0) {
- op = rv_op_vadc_vvm;
+ return &op_vadc_vvm;
}
break;
- case 17: op = rv_op_vmadc_vvm; break;
+ case 17: return &op_vmadc_vvm;
case 18:
if (((inst >> 25) & 1) == 0) {
- op = rv_op_vsbc_vvm;
+ return &op_vsbc_vvm;
}
break;
- case 19: op = rv_op_vmsbc_vvm; break;
- case 20: op = rv_op_vror_vv; break;
- case 21: op = rv_op_vrol_vv; break;
+ case 19: return &op_vmsbc_vvm;
+ case 20: return &op_vror_vv;
+ case 21: return &op_vrol_vv;
case 23:
- if (((inst >> 20) & 0b111111) == 32)
- op = rv_op_vmv_v_v;
- else if (((inst >> 25) & 1) == 0)
- op = rv_op_vmerge_vvm;
+ if (((inst >> 20) & 0b111111) == 32) {
+ return &op_vmv_v_v;
+ } else if (((inst >> 25) & 1) == 0) {
+ return &op_vmerge_vvm;
+ }
break;
- case 24: op = rv_op_vmseq_vv; break;
- case 25: op = rv_op_vmsne_vv; break;
- case 26: op = rv_op_vmsltu_vv; break;
- case 27: op = rv_op_vmslt_vv; break;
- case 28: op = rv_op_vmsleu_vv; break;
- case 29: op = rv_op_vmsle_vv; break;
- case 32: op = rv_op_vsaddu_vv; break;
- case 33: op = rv_op_vsadd_vv; break;
- case 34: op = rv_op_vssubu_vv; break;
- case 35: op = rv_op_vssub_vv; break;
- case 37: op = rv_op_vsll_vv; break;
- case 39: op = rv_op_vsmul_vv; break;
- case 40: op = rv_op_vsrl_vv; break;
- case 41: op = rv_op_vsra_vv; break;
- case 42: op = rv_op_vssrl_vv; break;
- case 43: op = rv_op_vssra_vv; break;
- case 44: op = rv_op_vnsrl_wv; break;
- case 45: op = rv_op_vnsra_wv; break;
- case 46: op = rv_op_vnclipu_wv; break;
- case 47: op = rv_op_vnclip_wv; break;
- case 48: op = rv_op_vwredsumu_vs; break;
- case 49: op = rv_op_vwredsum_vs; break;
- case 53: op = rv_op_vwsll_vv; break;
+ case 24: return &op_vmseq_vv;
+ case 25: return &op_vmsne_vv;
+ case 26: return &op_vmsltu_vv;
+ case 27: return &op_vmslt_vv;
+ case 28: return &op_vmsleu_vv;
+ case 29: return &op_vmsle_vv;
+ case 32: return &op_vsaddu_vv;
+ case 33: return &op_vsadd_vv;
+ case 34: return &op_vssubu_vv;
+ case 35: return &op_vssub_vv;
+ case 37: return &op_vsll_vv;
+ case 39: return &op_vsmul_vv;
+ case 40: return &op_vsrl_vv;
+ case 41: return &op_vsra_vv;
+ case 42: return &op_vssrl_vv;
+ case 43: return &op_vssra_vv;
+ case 44: return &op_vnsrl_wv;
+ case 45: return &op_vnsra_wv;
+ case 46: return &op_vnclipu_wv;
+ case 47: return &op_vnclip_wv;
+ case 48: return &op_vwredsumu_vs;
+ case 49: return &op_vwredsum_vs;
+ case 53: return &op_vwsll_vv;
}
break;
case 1:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vfadd_vv; break;
- case 1: op = rv_op_vfredusum_vs; break;
- case 2: op = rv_op_vfsub_vv; break;
- case 3: op = rv_op_vfredosum_vs; break;
- case 4: op = rv_op_vfmin_vv; break;
- case 5: op = rv_op_vfredmin_vs; break;
- case 6: op = rv_op_vfmax_vv; break;
- case 7: op = rv_op_vfredmax_vs; break;
- case 8: op = rv_op_vfsgnj_vv; break;
- case 9: op = rv_op_vfsgnjn_vv; break;
- case 10: op = rv_op_vfsgnjx_vv; break;
+ case 0: return &op_vfadd_vv;
+ case 1: return &op_vfredusum_vs;
+ case 2: return &op_vfsub_vv;
+ case 3: return &op_vfredosum_vs;
+ case 4: return &op_vfmin_vv;
+ case 5: return &op_vfredmin_vs;
+ case 6: return &op_vfmax_vv;
+ case 7: return &op_vfredmax_vs;
+ case 8: return &op_vfsgnj_vv;
+ case 9: return &op_vfsgnjn_vv;
+ case 10: return &op_vfsgnjx_vv;
case 16:
switch ((inst >> 15) & 0b11111) {
- case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break;
+ case 0:
+ if ((inst >> 25) & 1) {
+ return &op_vfmv_f_s;
+ }
}
break;
case 18:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_vfcvt_xu_f_v; break;
- case 1: op = rv_op_vfcvt_x_f_v; break;
- case 2: op = rv_op_vfcvt_f_xu_v; break;
- case 3: op = rv_op_vfcvt_f_x_v; break;
- case 6: op = rv_op_vfcvt_rtz_xu_f_v; break;
- case 7: op = rv_op_vfcvt_rtz_x_f_v; break;
- case 8: op = rv_op_vfwcvt_xu_f_v; break;
- case 9: op = rv_op_vfwcvt_x_f_v; break;
- case 10: op = rv_op_vfwcvt_f_xu_v; break;
- case 11: op = rv_op_vfwcvt_f_x_v; break;
- case 12: op = rv_op_vfwcvt_f_f_v; break;
- case 13: op = rv_op_vfwcvtbf16_f_f_v; break;
- case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break;
- case 15: op = rv_op_vfwcvt_rtz_x_f_v; break;
- case 16: op = rv_op_vfncvt_xu_f_w; break;
- case 17: op = rv_op_vfncvt_x_f_w; break;
- case 18: op = rv_op_vfncvt_f_xu_w; break;
- case 19: op = rv_op_vfncvt_f_x_w; break;
- case 20: op = rv_op_vfncvt_f_f_w; break;
- case 21: op = rv_op_vfncvt_rod_f_f_w; break;
- case 22: op = rv_op_vfncvt_rtz_xu_f_w; break;
- case 23: op = rv_op_vfncvt_rtz_x_f_w; break;
- case 29: op = rv_op_vfncvtbf16_f_f_w; break;
+ case 0: return &op_vfcvt_xu_f_v;
+ case 1: return &op_vfcvt_x_f_v;
+ case 2: return &op_vfcvt_f_xu_v;
+ case 3: return &op_vfcvt_f_x_v;
+ case 6: return &op_vfcvt_rtz_xu_f_v;
+ case 7: return &op_vfcvt_rtz_x_f_v;
+ case 8: return &op_vfwcvt_xu_f_v;
+ case 9: return &op_vfwcvt_x_f_v;
+ case 10: return &op_vfwcvt_f_xu_v;
+ case 11: return &op_vfwcvt_f_x_v;
+ case 12: return &op_vfwcvt_f_f_v;
+ case 13: return &op_vfwcvtbf16_f_f_v;
+ case 14: return &op_vfwcvt_rtz_xu_f_v;
+ case 15: return &op_vfwcvt_rtz_x_f_v;
+ case 16: return &op_vfncvt_xu_f_w;
+ case 17: return &op_vfncvt_x_f_w;
+ case 18: return &op_vfncvt_f_xu_w;
+ case 19: return &op_vfncvt_f_x_w;
+ case 20: return &op_vfncvt_f_f_w;
+ case 21: return &op_vfncvt_rod_f_f_w;
+ case 22: return &op_vfncvt_rtz_xu_f_w;
+ case 23: return &op_vfncvt_rtz_x_f_w;
+ case 29: return &op_vfncvtbf16_f_f_w;
}
break;
case 19:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_vfsqrt_v; break;
- case 4: op = rv_op_vfrsqrt7_v; break;
- case 5: op = rv_op_vfrec7_v; break;
- case 16: op = rv_op_vfclass_v; break;
+ case 0: return &op_vfsqrt_v;
+ case 4: return &op_vfrsqrt7_v;
+ case 5: return &op_vfrec7_v;
+ case 16: return &op_vfclass_v;
}
break;
- case 24: op = rv_op_vmfeq_vv; break;
- case 25: op = rv_op_vmfle_vv; break;
- case 27: op = rv_op_vmflt_vv; break;
- case 28: op = rv_op_vmfne_vv; break;
- case 32: op = rv_op_vfdiv_vv; break;
- case 36: op = rv_op_vfmul_vv; break;
- case 40: op = rv_op_vfmadd_vv; break;
- case 41: op = rv_op_vfnmadd_vv; break;
- case 42: op = rv_op_vfmsub_vv; break;
- case 43: op = rv_op_vfnmsub_vv; break;
- case 44: op = rv_op_vfmacc_vv; break;
- case 45: op = rv_op_vfnmacc_vv; break;
- case 46: op = rv_op_vfmsac_vv; break;
- case 47: op = rv_op_vfnmsac_vv; break;
- case 48: op = rv_op_vfwadd_vv; break;
- case 49: op = rv_op_vfwredusum_vs; break;
- case 50: op = rv_op_vfwsub_vv; break;
- case 51: op = rv_op_vfwredosum_vs; break;
- case 52: op = rv_op_vfwadd_wv; break;
- case 54: op = rv_op_vfwsub_wv; break;
- case 56: op = rv_op_vfwmul_vv; break;
- case 59: op = rv_op_vfwmaccbf16_vv; break;
- case 60: op = rv_op_vfwmacc_vv; break;
- case 61: op = rv_op_vfwnmacc_vv; break;
- case 62: op = rv_op_vfwmsac_vv; break;
- case 63: op = rv_op_vfwnmsac_vv; break;
+ case 24: return &op_vmfeq_vv;
+ case 25: return &op_vmfle_vv;
+ case 27: return &op_vmflt_vv;
+ case 28: return &op_vmfne_vv;
+ case 32: return &op_vfdiv_vv;
+ case 36: return &op_vfmul_vv;
+ case 40: return &op_vfmadd_vv;
+ case 41: return &op_vfnmadd_vv;
+ case 42: return &op_vfmsub_vv;
+ case 43: return &op_vfnmsub_vv;
+ case 44: return &op_vfmacc_vv;
+ case 45: return &op_vfnmacc_vv;
+ case 46: return &op_vfmsac_vv;
+ case 47: return &op_vfnmsac_vv;
+ case 48: return &op_vfwadd_vv;
+ case 49: return &op_vfwredusum_vs;
+ case 50: return &op_vfwsub_vv;
+ case 51: return &op_vfwredosum_vs;
+ case 52: return &op_vfwadd_wv;
+ case 54: return &op_vfwsub_wv;
+ case 56: return &op_vfwmul_vv;
+ case 59: return &op_vfwmaccbf16_vv;
+ case 60: return &op_vfwmacc_vv;
+ case 61: return &op_vfwnmacc_vv;
+ case 62: return &op_vfwmsac_vv;
+ case 63: return &op_vfwnmsac_vv;
}
break;
case 2:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vredsum_vs; break;
- case 1: op = rv_op_vredand_vs; break;
- case 2: op = rv_op_vredor_vs; break;
- case 3: op = rv_op_vredxor_vs; break;
- case 4: op = rv_op_vredminu_vs; break;
- case 5: op = rv_op_vredmin_vs; break;
- case 6: op = rv_op_vredmaxu_vs; break;
- case 7: op = rv_op_vredmax_vs; break;
- case 8: op = rv_op_vaaddu_vv; break;
- case 9: op = rv_op_vaadd_vv; break;
- case 10: op = rv_op_vasubu_vv; break;
- case 11: op = rv_op_vasub_vv; break;
- case 12: op = rv_op_vclmul_vv; break;
- case 13: op = rv_op_vclmulh_vv; break;
+ case 0: return &op_vredsum_vs;
+ case 1: return &op_vredand_vs;
+ case 2: return &op_vredor_vs;
+ case 3: return &op_vredxor_vs;
+ case 4: return &op_vredminu_vs;
+ case 5: return &op_vredmin_vs;
+ case 6: return &op_vredmaxu_vs;
+ case 7: return &op_vredmax_vs;
+ case 8: return &op_vaaddu_vv;
+ case 9: return &op_vaadd_vv;
+ case 10: return &op_vasubu_vv;
+ case 11: return &op_vasub_vv;
+ case 12: return &op_vclmul_vv;
+ case 13: return &op_vclmulh_vv;
case 16:
switch ((inst >> 15) & 0b11111) {
- case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break;
- case 16: op = rv_op_vcpop_m; break;
- case 17: op = rv_op_vfirst_m; break;
+ case 0:
+ if ((inst >> 25) & 1) {
+ return &op_vmv_x_s;
+ }
+ break;
+ case 16: return &op_vcpop_m;
+ case 17: return &op_vfirst_m;
}
break;
case 18:
switch ((inst >> 15) & 0b11111) {
- case 2: op = rv_op_vzext_vf8; break;
- case 3: op = rv_op_vsext_vf8; break;
- case 4: op = rv_op_vzext_vf4; break;
- case 5: op = rv_op_vsext_vf4; break;
- case 6: op = rv_op_vzext_vf2; break;
- case 7: op = rv_op_vsext_vf2; break;
- case 8: op = rv_op_vbrev8_v; break;
- case 9: op = rv_op_vrev8_v; break;
- case 10: op = rv_op_vbrev_v; break;
- case 12: op = rv_op_vclz_v; break;
- case 13: op = rv_op_vctz_v; break;
- case 14: op = rv_op_vcpop_v; break;
+ case 2: return &op_vzext_vf8;
+ case 3: return &op_vsext_vf8;
+ case 4: return &op_vzext_vf4;
+ case 5: return &op_vsext_vf4;
+ case 6: return &op_vzext_vf2;
+ case 7: return &op_vsext_vf2;
+ case 8: return &op_vbrev8_v;
+ case 9: return &op_vrev8_v;
+ case 10: return &op_vbrev_v;
+ case 12: return &op_vclz_v;
+ case 13: return &op_vctz_v;
+ case 14: return &op_vcpop_v;
}
break;
case 20:
switch ((inst >> 15) & 0b11111) {
- case 1: op = rv_op_vmsbf_m; break;
- case 2: op = rv_op_vmsof_m; break;
- case 3: op = rv_op_vmsif_m; break;
- case 16: op = rv_op_viota_m; break;
+ case 1: return &op_vmsbf_m; break;
+ case 2: return &op_vmsof_m;
+ case 3: return &op_vmsif_m;
+ case 16: return &op_viota_m;
case 17:
if (((inst >> 20) & 0b11111) == 0) {
- op = rv_op_vid_v;
+ return &op_vid_v;
}
break;
}
break;
- case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break;
- case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break;
- case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break;
- case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break;
- case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break;
- case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break;
- case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break;
- case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break;
- case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break;
- case 32: op = rv_op_vdivu_vv; break;
- case 33: op = rv_op_vdiv_vv; break;
- case 34: op = rv_op_vremu_vv; break;
- case 35: op = rv_op_vrem_vv; break;
- case 36: op = rv_op_vmulhu_vv; break;
- case 37: op = rv_op_vmul_vv; break;
- case 38: op = rv_op_vmulhsu_vv; break;
- case 39: op = rv_op_vmulh_vv; break;
- case 41: op = rv_op_vmadd_vv; break;
- case 43: op = rv_op_vnmsub_vv; break;
- case 45: op = rv_op_vmacc_vv; break;
- case 47: op = rv_op_vnmsac_vv; break;
- case 48: op = rv_op_vwaddu_vv; break;
- case 49: op = rv_op_vwadd_vv; break;
- case 50: op = rv_op_vwsubu_vv; break;
- case 51: op = rv_op_vwsub_vv; break;
- case 52: op = rv_op_vwaddu_wv; break;
- case 53: op = rv_op_vwadd_wv; break;
- case 54: op = rv_op_vwsubu_wv; break;
- case 55: op = rv_op_vwsub_wv; break;
- case 56: op = rv_op_vwmulu_vv; break;
- case 58: op = rv_op_vwmulsu_vv; break;
- case 59: op = rv_op_vwmul_vv; break;
- case 60: op = rv_op_vwmaccu_vv; break;
- case 61: op = rv_op_vwmacc_vv; break;
- case 63: op = rv_op_vwmaccsu_vv; break;
+ case 23:
+ if ((inst >> 25) & 1) {
+ return &op_vcompress_vm;
+ }
+ break;
+ case 24:
+ if ((inst >> 25) & 1) {
+ return &op_vmandn_mm;
+ }
+ break;
+ case 25:
+ if ((inst >> 25) & 1) {
+ return &op_vmand_mm;
+ }
+ break;
+ case 26:
+ if ((inst >> 25) & 1) {
+ return &op_vmor_mm;
+ }
+ break;
+ case 27:
+ if ((inst >> 25) & 1) {
+ return &op_vmxor_mm;
+ }
+ break;
+ case 28:
+ if ((inst >> 25) & 1) {
+ return &op_vmorn_mm;
+ }
+ break;
+ case 29:
+ if ((inst >> 25) & 1) {
+ return &op_vmnand_mm;
+ }
+ break;
+ case 30:
+ if ((inst >> 25) & 1) {
+ return &op_vmnor_mm;
+ }
+ break;
+ case 31:
+ if ((inst >> 25) & 1) {
+ return &op_vmxnor_mm;
+ }
+ break;
+ case 32: return &op_vdivu_vv;
+ case 33: return &op_vdiv_vv;
+ case 34: return &op_vremu_vv;
+ case 35: return &op_vrem_vv;
+ case 36: return &op_vmulhu_vv;
+ case 37: return &op_vmul_vv;
+ case 38: return &op_vmulhsu_vv;
+ case 39: return &op_vmulh_vv;
+ case 41: return &op_vmadd_vv;
+ case 43: return &op_vnmsub_vv;
+ case 45: return &op_vmacc_vv;
+ case 47: return &op_vnmsac_vv;
+ case 48: return &op_vwaddu_vv;
+ case 49: return &op_vwadd_vv;
+ case 50: return &op_vwsubu_vv;
+ case 51: return &op_vwsub_vv;
+ case 52: return &op_vwaddu_wv;
+ case 53: return &op_vwadd_wv;
+ case 54: return &op_vwsubu_wv;
+ case 55: return &op_vwsub_wv;
+ case 56: return &op_vwmulu_vv;
+ case 58: return &op_vwmulsu_vv;
+ case 59: return &op_vwmul_vv;
+ case 60: return &op_vwmaccu_vv;
+ case 61: return &op_vwmacc_vv;
+ case 63: return &op_vwmaccsu_vv;
}
break;
case 3:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vadd_vi; break;
- case 3: op = rv_op_vrsub_vi; break;
- case 9: op = rv_op_vand_vi; break;
- case 10: op = rv_op_vor_vi; break;
- case 11: op = rv_op_vxor_vi; break;
- case 12: op = rv_op_vrgather_vi; break;
- case 14: op = rv_op_vslideup_vi; break;
- case 15: op = rv_op_vslidedown_vi; break;
+ case 0: return &op_vadd_vi;
+ case 3: return &op_vrsub_vi;
+ case 9: return &op_vand_vi;
+ case 10: return &op_vor_vi;
+ case 11: return &op_vxor_vi;
+ case 12: return &op_vrgather_vi;
+ case 14: return &op_vslideup_vi;
+ case 15: return &op_vslidedown_vi;
case 16:
if (((inst >> 25) & 1) == 0) {
- op = rv_op_vadc_vim;
+ return &op_vadc_vim;
}
break;
- case 17: op = rv_op_vmadc_vim; break;
- case 20: case 21: op = rv_op_vror_vi; break;
+ case 17: return &op_vmadc_vim;
+ case 20: case 21: return &op_vror_vi;
case 23:
- if (((inst >> 20) & 0b111111) == 32)
- op = rv_op_vmv_v_i;
- else if (((inst >> 25) & 1) == 0)
- op = rv_op_vmerge_vim;
+ if (((inst >> 20) & 0b111111) == 32) {
+ return &op_vmv_v_i;
+ } else if (((inst >> 25) & 1) == 0) {
+ return &op_vmerge_vim;
+ }
break;
- case 24: op = rv_op_vmseq_vi; break;
- case 25: op = rv_op_vmsne_vi; break;
- case 28: op = rv_op_vmsleu_vi; break;
- case 29: op = rv_op_vmsle_vi; break;
- case 30: op = rv_op_vmsgtu_vi; break;
- case 31: op = rv_op_vmsgt_vi; break;
- case 32: op = rv_op_vsaddu_vi; break;
- case 33: op = rv_op_vsadd_vi; break;
- case 37: op = rv_op_vsll_vi; break;
+ case 24: return &op_vmseq_vi;
+ case 25: return &op_vmsne_vi;
+ case 28: return &op_vmsleu_vi;
+ case 29: return &op_vmsle_vi;
+ case 30: return &op_vmsgtu_vi;
+ case 31: return &op_vmsgt_vi;
+ case 32: return &op_vsaddu_vi;
+ case 33: return &op_vsadd_vi;
+ case 37: return &op_vsll_vi;
case 39:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_vmv1r_v; break;
- case 1: op = rv_op_vmv2r_v; break;
- case 3: op = rv_op_vmv4r_v; break;
- case 7: op = rv_op_vmv8r_v; break;
+ case 0: return &op_vmv1r_v;
+ case 1: return &op_vmv2r_v;
+ case 3: return &op_vmv4r_v;
+ case 7: return &op_vmv8r_v;
}
break;
- case 40: op = rv_op_vsrl_vi; break;
- case 41: op = rv_op_vsra_vi; break;
- case 42: op = rv_op_vssrl_vi; break;
- case 43: op = rv_op_vssra_vi; break;
- case 44: op = rv_op_vnsrl_wi; break;
- case 45: op = rv_op_vnsra_wi; break;
- case 46: op = rv_op_vnclipu_wi; break;
- case 47: op = rv_op_vnclip_wi; break;
- case 53: op = rv_op_vwsll_vi; break;
+ case 40: return &op_vsrl_vi;
+ case 41: return &op_vsra_vi;
+ case 42: return &op_vssrl_vi;
+ case 43: return &op_vssra_vi;
+ case 44: return &op_vnsrl_wi;
+ case 45: return &op_vnsra_wi;
+ case 46: return &op_vnclipu_wi;
+ case 47: return &op_vnclip_wi;
+ case 53: return &op_vwsll_vi;
}
break;
case 4:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vadd_vx; break;
- case 1: op = rv_op_vandn_vx; break;
- case 2: op = rv_op_vsub_vx; break;
- case 3: op = rv_op_vrsub_vx; break;
- case 4: op = rv_op_vminu_vx; break;
- case 5: op = rv_op_vmin_vx; break;
- case 6: op = rv_op_vmaxu_vx; break;
- case 7: op = rv_op_vmax_vx; break;
- case 9: op = rv_op_vand_vx; break;
- case 10: op = rv_op_vor_vx; break;
- case 11: op = rv_op_vxor_vx; break;
- case 12: op = rv_op_vrgather_vx; break;
- case 14: op = rv_op_vslideup_vx; break;
- case 15: op = rv_op_vslidedown_vx; break;
+ case 0: return &op_vadd_vx;
+ case 1: return &op_vandn_vx;
+ case 2: return &op_vsub_vx;
+ case 3: return &op_vrsub_vx;
+ case 4: return &op_vminu_vx;
+ case 5: return &op_vmin_vx;
+ case 6: return &op_vmaxu_vx;
+ case 7: return &op_vmax_vx;
+ case 9: return &op_vand_vx;
+ case 10: return &op_vor_vx;
+ case 11: return &op_vxor_vx;
+ case 12: return &op_vrgather_vx;
+ case 14: return &op_vslideup_vx;
+ case 15: return &op_vslidedown_vx;
case 16:
if (((inst >> 25) & 1) == 0) {
- op = rv_op_vadc_vxm;
+ return &op_vadc_vxm;
}
break;
- case 17: op = rv_op_vmadc_vxm; break;
+ case 17: return &op_vmadc_vxm;
case 18:
if (((inst >> 25) & 1) == 0) {
- op = rv_op_vsbc_vxm;
+ return &op_vsbc_vxm;
}
break;
- case 19: op = rv_op_vmsbc_vxm; break;
- case 20: op = rv_op_vror_vx; break;
- case 21: op = rv_op_vrol_vx; break;
+ case 19: return &op_vmsbc_vxm;
+ case 20: return &op_vror_vx;
+ case 21: return &op_vrol_vx;
case 23:
- if (((inst >> 20) & 0b111111) == 32)
- op = rv_op_vmv_v_x;
- else if (((inst >> 25) & 1) == 0)
- op = rv_op_vmerge_vxm;
+ if (((inst >> 20) & 0b111111) == 32) {
+ return &op_vmv_v_x;
+ } else if (((inst >> 25) & 1) == 0) {
+ return &op_vmerge_vxm;
+ }
break;
- case 24: op = rv_op_vmseq_vx; break;
- case 25: op = rv_op_vmsne_vx; break;
- case 26: op = rv_op_vmsltu_vx; break;
- case 27: op = rv_op_vmslt_vx; break;
- case 28: op = rv_op_vmsleu_vx; break;
- case 29: op = rv_op_vmsle_vx; break;
- case 30: op = rv_op_vmsgtu_vx; break;
- case 31: op = rv_op_vmsgt_vx; break;
- case 32: op = rv_op_vsaddu_vx; break;
- case 33: op = rv_op_vsadd_vx; break;
- case 34: op = rv_op_vssubu_vx; break;
- case 35: op = rv_op_vssub_vx; break;
- case 37: op = rv_op_vsll_vx; break;
- case 39: op = rv_op_vsmul_vx; break;
- case 40: op = rv_op_vsrl_vx; break;
- case 41: op = rv_op_vsra_vx; break;
- case 42: op = rv_op_vssrl_vx; break;
- case 43: op = rv_op_vssra_vx; break;
- case 44: op = rv_op_vnsrl_wx; break;
- case 45: op = rv_op_vnsra_wx; break;
- case 46: op = rv_op_vnclipu_wx; break;
- case 47: op = rv_op_vnclip_wx; break;
- case 53: op = rv_op_vwsll_vx; break;
+ case 24: return &op_vmseq_vx;
+ case 25: return &op_vmsne_vx;
+ case 26: return &op_vmsltu_vx;
+ case 27: return &op_vmslt_vx;
+ case 28: return &op_vmsleu_vx;
+ case 29: return &op_vmsle_vx;
+ case 30: return &op_vmsgtu_vx;
+ case 31: return &op_vmsgt_vx;
+ case 32: return &op_vsaddu_vx;
+ case 33: return &op_vsadd_vx;
+ case 34: return &op_vssubu_vx;
+ case 35: return &op_vssub_vx;
+ case 37: return &op_vsll_vx;
+ case 39: return &op_vsmul_vx;
+ case 40: return &op_vsrl_vx;
+ case 41: return &op_vsra_vx;
+ case 42: return &op_vssrl_vx;
+ case 43: return &op_vssra_vx;
+ case 44: return &op_vnsrl_wx;
+ case 45: return &op_vnsra_wx;
+ case 46: return &op_vnclipu_wx;
+ case 47: return &op_vnclip_wx;
+ case 53: return &op_vwsll_vx;
}
break;
case 5:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_vfadd_vf; break;
- case 2: op = rv_op_vfsub_vf; break;
- case 4: op = rv_op_vfmin_vf; break;
- case 6: op = rv_op_vfmax_vf; break;
- case 8: op = rv_op_vfsgnj_vf; break;
- case 9: op = rv_op_vfsgnjn_vf; break;
- case 10: op = rv_op_vfsgnjx_vf; break;
- case 14: op = rv_op_vfslide1up_vf; break;
- case 15: op = rv_op_vfslide1down_vf; break;
+ case 0: return &op_vfadd_vf;
+ case 2: return &op_vfsub_vf;
+ case 4: return &op_vfmin_vf;
+ case 6: return &op_vfmax_vf;
+ case 8: return &op_vfsgnj_vf;
+ case 9: return &op_vfsgnjn_vf;
+ case 10: return &op_vfsgnjx_vf;
+ case 14: return &op_vfslide1up_vf;
+ case 15: return &op_vfslide1down_vf;
case 16:
switch ((inst >> 20) & 0b11111) {
- case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break;
+ case 0:
+ if ((inst >> 25) & 1) {
+ return &op_vfmv_s_f;
+ }
}
break;
case 23:
- if (((inst >> 25) & 1) == 0)
- op = rv_op_vfmerge_vfm;
- else if (((inst >> 20) & 0b111111) == 32)
- op = rv_op_vfmv_v_f;
+ if (((inst >> 25) & 1) == 0) {
+ return &op_vfmerge_vfm;
+ } else if (((inst >> 20) & 0b111111) == 32) {
+ return &op_vfmv_v_f;
+ }
break;
- case 24: op = rv_op_vmfeq_vf; break;
- case 25: op = rv_op_vmfle_vf; break;
- case 27: op = rv_op_vmflt_vf; break;
- case 28: op = rv_op_vmfne_vf; break;
- case 29: op = rv_op_vmfgt_vf; break;
- case 31: op = rv_op_vmfge_vf; break;
- case 32: op = rv_op_vfdiv_vf; break;
- case 33: op = rv_op_vfrdiv_vf; break;
- case 36: op = rv_op_vfmul_vf; break;
- case 39: op = rv_op_vfrsub_vf; break;
- case 40: op = rv_op_vfmadd_vf; break;
- case 41: op = rv_op_vfnmadd_vf; break;
- case 42: op = rv_op_vfmsub_vf; break;
- case 43: op = rv_op_vfnmsub_vf; break;
- case 44: op = rv_op_vfmacc_vf; break;
- case 45: op = rv_op_vfnmacc_vf; break;
- case 46: op = rv_op_vfmsac_vf; break;
- case 47: op = rv_op_vfnmsac_vf; break;
- case 48: op = rv_op_vfwadd_vf; break;
- case 50: op = rv_op_vfwsub_vf; break;
- case 52: op = rv_op_vfwadd_wf; break;
- case 54: op = rv_op_vfwsub_wf; break;
- case 56: op = rv_op_vfwmul_vf; break;
- case 59: op = rv_op_vfwmaccbf16_vf; break;
- case 60: op = rv_op_vfwmacc_vf; break;
- case 61: op = rv_op_vfwnmacc_vf; break;
- case 62: op = rv_op_vfwmsac_vf; break;
- case 63: op = rv_op_vfwnmsac_vf; break;
+ case 24: return &op_vmfeq_vf;
+ case 25: return &op_vmfle_vf;
+ case 27: return &op_vmflt_vf;
+ case 28: return &op_vmfne_vf;
+ case 29: return &op_vmfgt_vf;
+ case 31: return &op_vmfge_vf;
+ case 32: return &op_vfdiv_vf;
+ case 33: return &op_vfrdiv_vf;
+ case 36: return &op_vfmul_vf;
+ case 39: return &op_vfrsub_vf;
+ case 40: return &op_vfmadd_vf;
+ case 41: return &op_vfnmadd_vf;
+ case 42: return &op_vfmsub_vf;
+ case 43: return &op_vfnmsub_vf;
+ case 44: return &op_vfmacc_vf;
+ case 45: return &op_vfnmacc_vf;
+ case 46: return &op_vfmsac_vf;
+ case 47: return &op_vfnmsac_vf;
+ case 48: return &op_vfwadd_vf;
+ case 50: return &op_vfwsub_vf;
+ case 52: return &op_vfwadd_wf;
+ case 54: return &op_vfwsub_wf;
+ case 56: return &op_vfwmul_vf;
+ case 59: return &op_vfwmaccbf16_vf;
+ case 60: return &op_vfwmacc_vf;
+ case 61: return &op_vfwnmacc_vf;
+ case 62: return &op_vfwmsac_vf;
+ case 63: return &op_vfwnmsac_vf;
}
break;
case 6:
switch ((inst >> 26) & 0b111111) {
- case 8: op = rv_op_vaaddu_vx; break;
- case 9: op = rv_op_vaadd_vx; break;
- case 10: op = rv_op_vasubu_vx; break;
- case 11: op = rv_op_vasub_vx; break;
- case 12: op = rv_op_vclmul_vx; break;
- case 13: op = rv_op_vclmulh_vx; break;
- case 14: op = rv_op_vslide1up_vx; break;
- case 15: op = rv_op_vslide1down_vx; break;
+ case 8: return &op_vaaddu_vx;
+ case 9: return &op_vaadd_vx;
+ case 10: return &op_vasubu_vx;
+ case 11: return &op_vasub_vx;
+ case 12: return &op_vclmul_vx;
+ case 13: return &op_vclmulh_vx;
+ case 14: return &op_vslide1up_vx;
+ case 15: return &op_vslide1down_vx;
case 16:
switch ((inst >> 20) & 0b11111) {
- case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break;
+ case 0:
+ if ((inst >> 25) & 1) {
+ return &op_vmv_s_x;
+ }
}
break;
- case 32: op = rv_op_vdivu_vx; break;
- case 33: op = rv_op_vdiv_vx; break;
- case 34: op = rv_op_vremu_vx; break;
- case 35: op = rv_op_vrem_vx; break;
- case 36: op = rv_op_vmulhu_vx; break;
- case 37: op = rv_op_vmul_vx; break;
- case 38: op = rv_op_vmulhsu_vx; break;
- case 39: op = rv_op_vmulh_vx; break;
- case 41: op = rv_op_vmadd_vx; break;
- case 43: op = rv_op_vnmsub_vx; break;
- case 45: op = rv_op_vmacc_vx; break;
- case 47: op = rv_op_vnmsac_vx; break;
- case 48: op = rv_op_vwaddu_vx; break;
- case 49: op = rv_op_vwadd_vx; break;
- case 50: op = rv_op_vwsubu_vx; break;
- case 51: op = rv_op_vwsub_vx; break;
- case 52: op = rv_op_vwaddu_wx; break;
- case 53: op = rv_op_vwadd_wx; break;
- case 54: op = rv_op_vwsubu_wx; break;
- case 55: op = rv_op_vwsub_wx; break;
- case 56: op = rv_op_vwmulu_vx; break;
- case 58: op = rv_op_vwmulsu_vx; break;
- case 59: op = rv_op_vwmul_vx; break;
- case 60: op = rv_op_vwmaccu_vx; break;
- case 61: op = rv_op_vwmacc_vx; break;
- case 62: op = rv_op_vwmaccus_vx; break;
- case 63: op = rv_op_vwmaccsu_vx; break;
+ case 32: return &op_vdivu_vx;
+ case 33: return &op_vdiv_vx;
+ case 34: return &op_vremu_vx;
+ case 35: return &op_vrem_vx;
+ case 36: return &op_vmulhu_vx;
+ case 37: return &op_vmul_vx;
+ case 38: return &op_vmulhsu_vx;
+ case 39: return &op_vmulh_vx;
+ case 41: return &op_vmadd_vx;
+ case 43: return &op_vnmsub_vx;
+ case 45: return &op_vmacc_vx;
+ case 47: return &op_vnmsac_vx;
+ case 48: return &op_vwaddu_vx;
+ case 49: return &op_vwadd_vx;
+ case 50: return &op_vwsubu_vx;
+ case 51: return &op_vwsub_vx;
+ case 52: return &op_vwaddu_wx;
+ case 53: return &op_vwadd_wx;
+ case 54: return &op_vwsubu_wx;
+ case 55: return &op_vwsub_wx;
+ case 56: return &op_vwmulu_vx;
+ case 58: return &op_vwmulsu_vx;
+ case 59: return &op_vwmul_vx;
+ case 60: return &op_vwmaccu_vx;
+ case 61: return &op_vwmacc_vx;
+ case 62: return &op_vwmaccus_vx;
+ case 63: return &op_vwmaccsu_vx;
}
break;
case 7:
if (((inst >> 31) & 1) == 0) {
- op = rv_op_vsetvli;
+ return &op_vsetvli;
} else if ((inst >> 30) & 1) {
- op = rv_op_vsetivli;
+ return &op_vsetivli;
} else if (((inst >> 25) & 0b11111) == 0) {
- op = rv_op_vsetvl;
+ return &op_vsetvl;
}
break;
}
break;
case 22:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_addid; break;
+ case 0: return &op_addid;
case 1:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_sllid; break;
+ case 0: return &op_sllid;
}
break;
case 5:
switch ((inst >> 26) & 0b111111) {
- case 0: op = rv_op_srlid; break;
- case 16: op = rv_op_sraid; break;
+ case 0: return &op_srlid;
+ case 16: return &op_sraid;
}
break;
}
break;
case 24:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_beq; break;
- case 1: op = rv_op_bne; break;
- case 4: op = rv_op_blt; break;
- case 5: op = rv_op_bge; break;
- case 6: op = rv_op_bltu; break;
- case 7: op = rv_op_bgeu; break;
+ case 0: return &op_beq;
+ case 1: return &op_bne;
+ case 4: return &op_blt;
+ case 5: return &op_bge;
+ case 6: return &op_bltu;
+ case 7: return &op_bgeu;
}
break;
case 25:
switch ((inst >> 12) & 0b111) {
- case 0: op = rv_op_jalr; break;
+ case 0: return &op_jalr;
}
break;
- case 27: op = rv_op_jal; break;
+ case 27: return &op_jal;
case 28:
switch ((inst >> 12) & 0b111) {
case 0:
@@ -2483,76 +2504,76 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
((inst >> 7) & 0b000000011111)) {
case 0:
switch ((inst >> 15) & 0b1111111111) {
- case 0: op = rv_op_ecall; break;
- case 32: op = rv_op_ebreak; break;
- case 64: op = rv_op_uret; break;
- case 416: op = rv_op_wrs_nto; break;
- case 928: op = rv_op_wrs_sto; break;
+ case 0: return &op_ecall;
+ case 32: return &op_ebreak;
+ case 64: return &op_uret;
+ case 416: return &op_wrs_nto;
+ case 928: return &op_wrs_sto;
}
break;
case 256:
switch ((inst >> 20) & 0b11111) {
case 2:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_sret; break;
+ case 0: return &op_sret;
}
break;
- case 4: op = rv_op_sfence_vm; break;
+ case 4: return &op_sfence_vm;
case 5:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_wfi; break;
+ case 0: return &op_wfi;
}
break;
}
break;
- case 288: op = rv_op_sfence_vma; break;
+ case 288: return &op_sfence_vma;
case 512:
switch ((inst >> 15) & 0b1111111111) {
- case 64: op = rv_op_hret; break;
+ case 64: return &op_hret;
}
break;
case 768:
switch ((inst >> 15) & 0b1111111111) {
- case 64: op = rv_op_mret; break;
+ case 64: return &op_mret;
}
break;
case 1792:
switch ((inst >> 15) & 0b1111111111) {
- case 64: op = rv_op_mnret; break;
+ case 64: return &op_mnret;
}
break;
case 1952:
switch ((inst >> 15) & 0b1111111111) {
- case 576: op = rv_op_dret; break;
+ case 576: return &op_dret;
}
break;
}
break;
case 1:
switch (operand_csr12(inst)) {
- case 1: op = rv_op_fsflags; break;
- case 2: op = rv_op_fsrm; break;
- case 3: op = rv_op_fscsr; break;
- default: op = rv_op_csrrw; break;
+ case 1: return &op_fsflags;
+ case 2: return &op_fsrm;
+ case 3: return &op_fscsr;
+ default: return &op_csrrw;
}
break;
case 2:
- op = rv_op_csrrs;
+ return &op_csrrs;
if (operand_rs1(inst) == 0) {
switch (operand_csr12(inst)) {
- case 0x001: op = rv_op_frflags; break;
- case 0x002: op = rv_op_frrm; break;
- case 0x003: op = rv_op_frcsr; break;
- case 0xc00: op = rv_op_rdcycle; break;
- case 0xc01: op = rv_op_rdtime; break;
- case 0xc02: op = rv_op_rdinstret; break;
- case 0xc80: op = rv_op_rdcycleh; break;
- case 0xc81: op = rv_op_rdtimeh; break;
- case 0xc82: op = rv_op_rdinstreth; break;
+ case 0x001: return &op_frflags;
+ case 0x002: return &op_frrm;
+ case 0x003: return &op_frcsr;
+ case 0xc00: return &op_rdcycle;
+ case 0xc01: return &op_rdtime;
+ case 0xc02: return &op_rdinstret;
+ case 0xc80: return &op_rdcycleh;
+ case 0xc81: return &op_rdtimeh;
+ case 0xc82: return &op_rdinstreth;
}
}
break;
- case 3: op = rv_op_csrrc; break;
+ case 3: return &op_csrrc;
case 4:
if (dec->cfg && dec->cfg->ext_zimop) {
if (((inst >> 22) & 0b1011001111) == 0b1000000111) {
@@ -2560,15 +2581,15 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
&& operand_mop_r_imm(inst) == 28) {
switch (operand_rs1(inst)) {
case 0:
- return &rvi_opcode_data[rv_op_ssrdp];
+ return &op_ssrdp;
case 1:
case 5:
if (operand_rd(inst) == 0) {
- return &rvi_opcode_data[rv_op_sspopchk];
+ return &op_sspopchk;
}
}
}
- return &rvi_opcode_data[rv_op_mop_r];
+ return &op_mop_r;
}
if (((inst >> 25) & 0b1011001) == 0b1000001) {
if (dec->cfg->ext_zicfiss
@@ -2578,79 +2599,79 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
switch (operand_rs2(inst)) {
case 1:
case 5:
- return &rvi_opcode_data[rv_op_sspush];
+ return &op_sspush;
}
}
- return &rvi_opcode_data[rv_op_mop_rr];
+ return &op_mop_rr;
}
}
break;
case 5:
switch (operand_csr12(inst)) {
- case 1: op = rv_op_fsflagsi; break;
- case 2: op = rv_op_fsrmi; break;
- default: op = rv_op_csrrwi; break;
+ case 1: return &op_fsflagsi;
+ case 2: return &op_fsrmi;
+ default: return &op_csrrwi;
}
break;
- case 6: op = rv_op_csrrsi; break;
- case 7: op = rv_op_csrrci; break;
+ case 6: return &op_csrrsi;
+ case 7: return &op_csrrci;
}
break;
case 29:
if (((inst >> 25) & 1) == 1 && ((inst >> 12) & 0b111) == 2) {
switch ((inst >> 26) & 0b111111) {
- case 32: op = rv_op_vsm3me_vv; break;
- case 33: op = rv_op_vsm4k_vi; break;
- case 34: op = rv_op_vaeskf1_vi; break;
+ case 32: return &op_vsm3me_vv;
+ case 33: return &op_vsm4k_vi;
+ case 34: return &op_vaeskf1_vi;
case 40:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_vaesdm_vv; break;
- case 1: op = rv_op_vaesdf_vv; break;
- case 2: op = rv_op_vaesem_vv; break;
- case 3: op = rv_op_vaesef_vv; break;
- case 16: op = rv_op_vsm4r_vv; break;
- case 17: op = rv_op_vgmul_vv; break;
+ case 0: return &op_vaesdm_vv;
+ case 1: return &op_vaesdf_vv;
+ case 2: return &op_vaesem_vv;
+ case 3: return &op_vaesef_vv;
+ case 16: return &op_vsm4r_vv;
+ case 17: return &op_vgmul_vv;
}
break;
case 41:
switch ((inst >> 15) & 0b11111) {
- case 0: op = rv_op_vaesdm_vs; break;
- case 1: op = rv_op_vaesdf_vs; break;
- case 2: op = rv_op_vaesem_vs; break;
- case 3: op = rv_op_vaesef_vs; break;
- case 7: op = rv_op_vaesz_vs; break;
- case 16: op = rv_op_vsm4r_vs; break;
+ case 0: return &op_vaesdm_vs;
+ case 1: return &op_vaesdf_vs;
+ case 2: return &op_vaesem_vs;
+ case 3: return &op_vaesef_vs;
+ case 7: return &op_vaesz_vs;
+ case 16: return &op_vsm4r_vs;
}
break;
- case 42: op = rv_op_vaeskf2_vi; break;
- case 43: op = rv_op_vsm3c_vi; break;
- case 44: op = rv_op_vghsh_vv; break;
- case 45: op = rv_op_vsha2ms_vv; break;
- case 46: op = rv_op_vsha2ch_vv; break;
- case 47: op = rv_op_vsha2cl_vv; break;
+ case 42: return &op_vaeskf2_vi;
+ case 43: return &op_vsm3c_vi;
+ case 44: return &op_vghsh_vv;
+ case 45: return &op_vsha2ms_vv;
+ case 46: return &op_vsha2ch_vv;
+ case 47: return &op_vsha2cl_vv;
}
}
break;
case 30:
switch (((inst >> 22) & 0b1111111000) |
((inst >> 12) & 0b0000000111)) {
- case 0: op = rv_op_addd; break;
- case 1: op = rv_op_slld; break;
- case 5: op = rv_op_srld; break;
- case 8: op = rv_op_muld; break;
- case 12: op = rv_op_divd; break;
- case 13: op = rv_op_divud; break;
- case 14: op = rv_op_remd; break;
- case 15: op = rv_op_remud; break;
- case 256: op = rv_op_subd; break;
- case 261: op = rv_op_srad; break;
+ case 0: return &op_addd;
+ case 1: return &op_slld;
+ case 5: return &op_srld;
+ case 8: return &op_muld;
+ case 12: return &op_divd;
+ case 13: return &op_divud;
+ case 14: return &op_remd;
+ case 15: return &op_remud;
+ case 256: return &op_subd;
+ case 261: return &op_srad;
}
break;
}
break;
}
- return op == rv_op_illegal ? NULL : &rvi_opcode_data[op];
+ return NULL;
}
/* decode operands */
@@ -3450,7 +3471,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, rv_inst inst,
decode_inst_operands(&dec, isa, op);
op = decode_inst_lift_pseudo(&dec, op);
} else {
- op = &rvi_opcode_data[rv_op_illegal];
+ op = &op_illegal;
}
return format_inst(24, &dec, op);
diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc
index 802a521bca..cc939f557f 100644
--- a/disas/riscv-op.c.inc
+++ b/disas/riscv-op.c.inc
@@ -225,51 +225,51 @@ OP(fcvt_q_l, "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1)
OP(fcvt_q_lu, "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1)
OP(fmv_x_q, "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1)
OP(fmv_q_x, "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1)
-OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(rv_op_addi))
-OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(rv_op_fld))
-OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(rv_op_lw))
-OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(rv_op_flw))
-OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(rv_op_fsd))
-OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(rv_op_sw))
-OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(rv_op_fsw))
-OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(rv_op_addi))
-OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(rv_op_jal))
-OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(rv_op_addi))
-OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(rv_op_addi))
-OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(rv_op_lui))
-OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srli))
-OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srai))
-OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(rv_op_andi))
-OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(rv_op_sub))
-OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(rv_op_xor))
-OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(rv_op_or))
-OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and))
-OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw))
-OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw))
-OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(rv_op_j))
-OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beqz))
-OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bnez))
-OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli))
-OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld))
-OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw))
-OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw))
-OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jr))
-OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_mv))
-OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak))
-OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr))
-OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add))
-OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_fsd))
-OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_sw))
-OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_fsw))
-OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(rv_op_ld))
-OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(rv_op_sd))
-OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(rv_op_addiw))
-OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_ld))
-OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_sd))
-OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(rv_op_lq))
-OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq))
-OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq))
-OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq))
+OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(op_addi))
+OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(op_fld))
+OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(op_lw))
+OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(op_flw))
+OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(op_fsd))
+OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(op_sw))
+OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(op_fsw))
+OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(op_addi))
+OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(op_jal))
+OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(op_addi))
+OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(op_addi))
+OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(op_lui))
+OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(op_srli))
+OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(op_srai))
+OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(op_andi))
+OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(op_sub))
+OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(op_xor))
+OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(op_or))
+OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(op_and))
+OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(op_subw))
+OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(op_addw))
+OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(op_j))
+OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(op_beqz))
+OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(op_bnez))
+OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(op_slli))
+OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_fld))
+OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_lw))
+OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_flw))
+OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(op_jr))
+OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(op_mv))
+OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(op_ebreak))
+OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(op_jalr))
+OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(op_add))
+OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(op_fsd))
+OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(op_sw))
+OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(op_fsw))
+OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(op_ld))
+OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(op_sd))
+OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(op_addiw))
+OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_ld))
+OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(op_sd))
+OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(op_lq))
+OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(op_sq))
+OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(op_lq))
+OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(op_sq))
OP(nop, "nop", rv_codec_illegal, rv_fmt_none)
OP(mv, "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv)
OP(not, "not", rv_codec_illegal, rv_fmt_rd_rs1)
@@ -904,8 +904,8 @@ OP(sspopchk, "sspopchk", rv_codec_r, rv_fmt_rs1)
OP(ssrdp, "ssrdp", rv_codec_r, rv_fmt_rd)
OP(ssamoswap_w, "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1)
OP(ssamoswap_d, "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1)
-OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspush))
-OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspopchk))
+OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(op_sspush))
+OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(op_sspopchk))
OP(cbo_inval, "cbo.inval", rv_codec_r, rv_fmt_rs1)
OP(cbo_clean, "cbo.clean", rv_codec_r, rv_fmt_rs1)
OP(cbo_flush, "cbo.flush", rv_codec_r, rv_fmt_rs1)
--
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.