Re: [PATCH 06/56] disas/riscv: Move operand extractors earlier in file

Alistair <[email protected]>
Newsgroups org.nongnu.qemu-riscv,org.nongnu.qemu-devel
Message-ID <[email protected]>
On Sun, 2026-08-09 at 15:34 -0700, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <[email protected]>

Reviewed-by: Alistair Francis <[email protected]>

Alistair

> ---
>  disas/riscv.c | 790 +++++++++++++++++++++++++-----------------------
> --
>  1 file changed, 395 insertions(+), 395 deletions(-)
> 
> diff --git a/disas/riscv.c b/disas/riscv.c
> index 2ba0a6a73a..e3fbc26626 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -1259,6 +1259,401 @@ static const rv_comp_data rvcp_fsgnjx_q[] = {
>      { rv_op_illegal, NULL }
>  };
>  
> +/* operand extractors */
> +
> +static uint32_t operand_rd(rv_inst inst)
> +{
> +    return extract32(inst, 7, 5);
> +}
> +
> +static uint32_t operand_rs1(rv_inst inst)
> +{
> +    return extract32(inst, 15, 5);
> +}
> +
> +static uint32_t operand_rs2(rv_inst inst)
> +{
> +    return extract32(inst, 20, 5);
> +}
> +
> +static uint32_t operand_rs3(rv_inst inst)
> +{
> +    return extract32(inst, 27, 5);
> +}
> +
> +static uint32_t operand_aq(rv_inst inst)
> +{
> +    return extract32(inst, 26, 1);
> +}
> +
> +static uint32_t operand_rl(rv_inst inst)
> +{
> +    return extract32(inst, 25, 1);
> +}
> +
> +static uint32_t operand_pred(rv_inst inst)
> +{
> +    return extract32(inst, 24, 4);
> +}
> +
> +static uint32_t operand_succ(rv_inst inst)
> +{
> +    return extract32(inst, 20, 4);
> +}
> +
> +static uint32_t operand_rm(rv_inst inst)
> +{
> +    return extract32(inst, 12, 3);
> +}
> +
> +static uint32_t operand_shamt5(rv_inst inst)
> +{
> +    return extract32(inst, 20, 5);
> +}
> +
> +static uint32_t operand_shamt6(rv_inst inst)
> +{
> +    return extract32(inst, 20, 6);
> +}
> +
> +static uint32_t operand_shamt7(rv_inst inst)
> +{
> +    return extract32(inst, 20, 7);
> +}
> +
> +static uint32_t operand_crdq(rv_inst inst)
> +{
> +    return extract32(inst, 2, 3);
> +}
> +
> +static uint32_t operand_crs1q(rv_inst inst)
> +{
> +    return extract32(inst, 7, 3);
> +}
> +
> +static uint32_t operand_crs1rdq(rv_inst inst)
> +{
> +    return extract32(inst, 7, 3);
> +}
> +
> +static uint32_t operand_crs2q(rv_inst inst)
> +{
> +    return extract32(inst, 2, 3);
> +}
> +
> +static uint32_t calculate_xreg(uint32_t sreg)
> +{
> +    return sreg < 2 ? sreg + 8 : sreg + 16;
> +}
> +
> +static uint32_t operand_sreg1(rv_inst inst)
> +{
> +    return calculate_xreg(extract32(inst, 7, 3));
> +}
> +
> +static uint32_t operand_sreg2(rv_inst inst)
> +{
> +    return calculate_xreg(extract32(inst, 2, 3));
> +}
> +
> +static uint32_t operand_crd(rv_inst inst)
> +{
> +    return extract32(inst, 7, 5);
> +}
> +
> +static uint32_t operand_crs1(rv_inst inst)
> +{
> +    return extract32(inst, 7, 5);
> +}
> +
> +static uint32_t operand_crs1rd(rv_inst inst)
> +{
> +    return extract32(inst, 7, 5);
> +}
> +
> +static uint32_t operand_crs2(rv_inst inst)
> +{
> +    return extract32(inst, 2, 5);
> +}
> +
> +static uint32_t operand_cimmsh5(rv_inst inst)
> +{
> +    return extract32(inst, 2, 5);
> +}
> +
> +static uint32_t operand_csr12(rv_inst inst)
> +{
> +    return extract32(inst, 20, 12);
> +}
> +
> +static int32_t operand_imm12(rv_inst inst)
> +{
> +    return sextract32(inst, 20, 12);
> +}
> +
> +static int32_t operand_imm20(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 20) << 12;
> +}
> +
> +static int32_t operand_jimm20(rv_inst inst)
> +{
> +    return sextract32(inst, 31, 1) << 20 |
> +        extract32(inst, 21, 10) << 1 |
> +        extract32(inst, 20, 1) << 11 |
> +        extract32(inst, 12, 8) << 12;
> +}
> +
> +static int32_t operand_simm12(rv_inst inst)
> +{
> +    return sextract32(inst, 25, 7) << 5 |
> +        extract32(inst, 7, 5);
> +}
> +
> +static int32_t operand_sbimm12(rv_inst inst)
> +{
> +    return sextract32(inst, 31, 1) << 12 |
> +        extract32(inst, 25, 6) << 5 |
> +        extract32(inst, 8, 4) << 1 |
> +        extract32(inst, 7, 1) << 11;
> +}
> +
> +static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa)
> +{
> +    int imm = extract32(inst, 12, 1) << 5 |
> +        extract32(inst, 2, 5);
> +    if (isa == rv128) {
> +        imm = imm ? imm : 64;
> +    }
> +    return imm;
> +}
> +
> +static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa)
> +{
> +    int imm = extract32(inst, 12, 1) << 5 |
> +        extract32(inst, 2, 5);
> +    if (isa == rv128) {
> +        imm = imm | (imm & 32) << 1;
> +        imm = imm ? imm : 64;
> +    }
> +    return imm;
> +}
> +
> +static int32_t operand_cimmi(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 1) << 5 |
> +        extract32(inst, 2, 5);
> +}
> +
> +static int32_t operand_cimmui(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 1) << 17 |
> +        extract32(inst, 2, 5) << 12;
> +}
> +
> +static uint32_t operand_cimmlwsp(rv_inst inst)
> +{
> +    return extract32(inst, 12, 1) << 5 |
> +        extract32(inst, 4, 3) << 2 |
> +        extract32(inst, 2, 2) << 6;
> +}
> +
> +static uint32_t operand_cimmldsp(rv_inst inst)
> +{
> +    return extract32(inst, 12, 1) << 5 |
> +        extract32(inst, 5, 2) << 3 |
> +        extract32(inst, 2, 3) << 6;
> +}
> +
> +static uint32_t operand_cimmlqsp(rv_inst inst)
> +{
> +    return extract32(inst, 12, 1) << 5 |
> +        extract32(inst, 6, 1) << 4 |
> +        extract32(inst, 2, 4) << 6;
> +}
> +
> +static int32_t operand_cimm16sp(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 1) << 9 |
> +        extract32(inst, 6, 1) << 4 |
> +        extract32(inst, 5, 1) << 6 |
> +        extract32(inst, 3, 2) << 7 |
> +        extract32(inst, 2, 1) << 5;
> +}
> +
> +static int32_t operand_cimmj(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 1) << 11 |
> +        extract32(inst, 11, 1) << 4 |
> +        extract32(inst, 9, 2) << 8 |
> +        extract32(inst, 8, 1) << 10 |
> +        extract32(inst, 7, 1) << 6 |
> +        extract32(inst, 6, 1) << 7 |
> +        extract32(inst, 3, 3) << 1 |
> +        extract32(inst, 2, 1) << 5;
> +}
> +
> +static int32_t operand_cimmb(rv_inst inst)
> +{
> +    return sextract32(inst, 12, 1) << 8 |
> +        extract32(inst, 10, 2) << 3 |
> +        extract32(inst, 5, 2) << 6 |
> +        extract32(inst, 3, 2) << 1 |
> +        extract32(inst, 2, 1) << 5;
> +}
> +
> +static uint32_t operand_cimmswsp(rv_inst inst)
> +{
> +    return extract32(inst, 9, 4) << 2 |
> +        extract32(inst, 7, 2) << 6;
> +}
> +
> +static uint32_t operand_cimmsdsp(rv_inst inst)
> +{
> +    return extract32(inst, 10, 3) << 3 |
> +        extract32(inst, 7, 3) << 6;
> +}
> +
> +static uint32_t operand_cimmsqsp(rv_inst inst)
> +{
> +    return extract32(inst, 11, 2) << 4 |
> +        extract32(inst, 7, 4) << 6;
> +}
> +
> +static uint32_t operand_cimm4spn(rv_inst inst)
> +{
> +    return extract32(inst, 11, 2) << 4 |
> +        extract32(inst, 7, 4) << 6 |
> +        extract32(inst, 6, 1) << 2 |
> +        extract32(inst, 5, 1) << 3;
> +}
> +
> +static uint32_t operand_cimmw(rv_inst inst)
> +{
> +    return extract32(inst, 10, 3) << 3 |
> +        extract32(inst, 6, 1) << 2 |
> +        extract32(inst, 5, 1) << 6;
> +}
> +
> +static uint32_t operand_cimmd(rv_inst inst)
> +{
> +    return extract32(inst, 10, 3) << 3 |
> +        extract32(inst, 5, 2) << 6;
> +}
> +
> +static uint32_t operand_cimmq(rv_inst inst)
> +{
> +    return extract32(inst, 11, 2) << 4 |
> +        extract32(inst, 10, 1) << 8 |
> +        extract32(inst, 5, 2) << 6;
> +}
> +
> +static int32_t operand_vimm(rv_inst inst)
> +{
> +    return sextract32(inst, 15, 5);
> +}
> +
> +static uint32_t operand_vuimm(rv_inst inst)
> +{
> +    return extract32(inst, 15, 5);
> +}
> +
> +static uint32_t operand_vzimm11(rv_inst inst)
> +{
> +    return extract32(inst, 20, 11);
> +}
> +
> +static uint32_t operand_vzimm10(rv_inst inst)
> +{
> +    return extract32(inst, 20, 10);
> +}
> +
> +static uint32_t operand_vzimm6(rv_inst inst)
> +{
> +    return extract32(inst, 26, 1) << 5 |
> +        extract32(inst, 15, 5);
> +}
> +
> +static uint32_t operand_bs(rv_inst inst)
> +{
> +    return extract32(inst, 30, 2);
> +}
> +
> +static uint32_t operand_rnum(rv_inst inst)
> +{
> +    return extract32(inst, 20, 4);
> +}
> +
> +static uint32_t operand_vm(rv_inst inst)
> +{
> +    return extract32(inst, 25, 1);
> +}
> +
> +static uint32_t operand_uimm_c_lb(rv_inst inst)
> +{
> +    return extract32(inst, 5, 1) << 1 |
> +        extract32(inst, 6, 1);
> +}
> +
> +static uint32_t operand_uimm_c_lh(rv_inst inst)
> +{
> +    return extract32(inst, 5, 1) << 1;
> +}
> +
> +static uint32_t operand_zcmp_spimm(rv_inst inst)
> +{
> +    return extract32(inst, 2, 2) << 4;
> +}
> +
> +static uint32_t operand_zcmp_rlist(rv_inst inst)
> +{
> +    return extract32(inst, 4, 4);
> +}
> +
> +static uint32_t operand_imm6(rv_inst inst)
> +{
> +    return extract32(inst, 20, 6);
> +}
> +
> +static uint32_t operand_imm2(rv_inst inst)
> +{
> +    return extract32(inst, 25, 2);
> +}
> +
> +static uint32_t operand_immh(rv_inst inst)
> +{
> +    return extract32(inst, 26, 6);
> +}
> +
> +static uint32_t operand_imml(rv_inst inst)
> +{
> +    return extract32(inst, 20, 6);
> +}
> +
> +static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist,
> uint32_t spimm)
> +{
> +    int xlen_bytes_log2 = isa == rv64 ? 3 : 2;
> +    int regs = rlist == 15 ? 13 : rlist - 3;
> +    uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16);
> +    return stack_adj_base + spimm;
> +}
> +
> +static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa)
> +{
> +    return calculate_stack_adj(isa, operand_zcmp_rlist(inst),
> +                               operand_zcmp_spimm(inst));
> +}
> +
> +static uint32_t operand_tbl_index(rv_inst inst)
> +{
> +    return extract32(inst, 2, 8);
> +}
> +
> +static uint32_t operand_lpl(rv_inst inst)
> +{
> +    return extract32(inst, 12, 20);
> +}
> +
>  /* instruction metadata */
>  
>  const rv_opcode_data rvi_opcode_data[] = {
> @@ -4198,401 +4593,6 @@ static void decode_inst_opcode(rv_decode
> *dec, rv_isa isa)
>      dec->op = op;
>  }
>  
> -/* operand extractors */
> -
> -static uint32_t operand_rd(rv_inst inst)
> -{
> -    return extract32(inst, 7, 5);
> -}
> -
> -static uint32_t operand_rs1(rv_inst inst)
> -{
> -    return extract32(inst, 15, 5);
> -}
> -
> -static uint32_t operand_rs2(rv_inst inst)
> -{
> -    return extract32(inst, 20, 5);
> -}
> -
> -static uint32_t operand_rs3(rv_inst inst)
> -{
> -    return extract32(inst, 27, 5);
> -}
> -
> -static uint32_t operand_aq(rv_inst inst)
> -{
> -    return extract32(inst, 26, 1);
> -}
> -
> -static uint32_t operand_rl(rv_inst inst)
> -{
> -    return extract32(inst, 25, 1);
> -}
> -
> -static uint32_t operand_pred(rv_inst inst)
> -{
> -    return extract32(inst, 24, 4);
> -}
> -
> -static uint32_t operand_succ(rv_inst inst)
> -{
> -    return extract32(inst, 20, 4);
> -}
> -
> -static uint32_t operand_rm(rv_inst inst)
> -{
> -    return extract32(inst, 12, 3);
> -}
> -
> -static uint32_t operand_shamt5(rv_inst inst)
> -{
> -    return extract32(inst, 20, 5);
> -}
> -
> -static uint32_t operand_shamt6(rv_inst inst)
> -{
> -    return extract32(inst, 20, 6);
> -}
> -
> -static uint32_t operand_shamt7(rv_inst inst)
> -{
> -    return extract32(inst, 20, 7);
> -}
> -
> -static uint32_t operand_crdq(rv_inst inst)
> -{
> -    return extract32(inst, 2, 3);
> -}
> -
> -static uint32_t operand_crs1q(rv_inst inst)
> -{
> -    return extract32(inst, 7, 3);
> -}
> -
> -static uint32_t operand_crs1rdq(rv_inst inst)
> -{
> -    return extract32(inst, 7, 3);
> -}
> -
> -static uint32_t operand_crs2q(rv_inst inst)
> -{
> -    return extract32(inst, 2, 3);
> -}
> -
> -static uint32_t calculate_xreg(uint32_t sreg)
> -{
> -    return sreg < 2 ? sreg + 8 : sreg + 16;
> -}
> -
> -static uint32_t operand_sreg1(rv_inst inst)
> -{
> -    return calculate_xreg(extract32(inst, 7, 3));
> -}
> -
> -static uint32_t operand_sreg2(rv_inst inst)
> -{
> -    return calculate_xreg(extract32(inst, 2, 3));
> -}
> -
> -static uint32_t operand_crd(rv_inst inst)
> -{
> -    return extract32(inst, 7, 5);
> -}
> -
> -static uint32_t operand_crs1(rv_inst inst)
> -{
> -    return extract32(inst, 7, 5);
> -}
> -
> -static uint32_t operand_crs1rd(rv_inst inst)
> -{
> -    return extract32(inst, 7, 5);
> -}
> -
> -static uint32_t operand_crs2(rv_inst inst)
> -{
> -    return extract32(inst, 2, 5);
> -}
> -
> -static uint32_t operand_cimmsh5(rv_inst inst)
> -{
> -    return extract32(inst, 2, 5);
> -}
> -
> -static uint32_t operand_csr12(rv_inst inst)
> -{
> -    return extract32(inst, 20, 12);
> -}
> -
> -static int32_t operand_imm12(rv_inst inst)
> -{
> -    return sextract32(inst, 20, 12);
> -}
> -
> -static int32_t operand_imm20(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 20) << 12;
> -}
> -
> -static int32_t operand_jimm20(rv_inst inst)
> -{
> -    return sextract32(inst, 31, 1) << 20 |
> -        extract32(inst, 21, 10) << 1 |
> -        extract32(inst, 20, 1) << 11 |
> -        extract32(inst, 12, 8) << 12;
> -}
> -
> -static int32_t operand_simm12(rv_inst inst)
> -{
> -    return sextract32(inst, 25, 7) << 5 |
> -        extract32(inst, 7, 5);
> -}
> -
> -static int32_t operand_sbimm12(rv_inst inst)
> -{
> -    return sextract32(inst, 31, 1) << 12 |
> -        extract32(inst, 25, 6) << 5 |
> -        extract32(inst, 8, 4) << 1 |
> -        extract32(inst, 7, 1) << 11;
> -}
> -
> -static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa)
> -{
> -    int imm = extract32(inst, 12, 1) << 5 |
> -        extract32(inst, 2, 5);
> -    if (isa == rv128) {
> -        imm = imm ? imm : 64;
> -    }
> -    return imm;
> -}
> -
> -static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa)
> -{
> -    int imm = extract32(inst, 12, 1) << 5 |
> -        extract32(inst, 2, 5);
> -    if (isa == rv128) {
> -        imm = imm | (imm & 32) << 1;
> -        imm = imm ? imm : 64;
> -    }
> -    return imm;
> -}
> -
> -static int32_t operand_cimmi(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 1) << 5 |
> -        extract32(inst, 2, 5);
> -}
> -
> -static int32_t operand_cimmui(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 1) << 17 |
> -        extract32(inst, 2, 5) << 12;
> -}
> -
> -static uint32_t operand_cimmlwsp(rv_inst inst)
> -{
> -    return extract32(inst, 12, 1) << 5 |
> -        extract32(inst, 4, 3) << 2 |
> -        extract32(inst, 2, 2) << 6;
> -}
> -
> -static uint32_t operand_cimmldsp(rv_inst inst)
> -{
> -    return extract32(inst, 12, 1) << 5 |
> -        extract32(inst, 5, 2) << 3 |
> -        extract32(inst, 2, 3) << 6;
> -}
> -
> -static uint32_t operand_cimmlqsp(rv_inst inst)
> -{
> -    return extract32(inst, 12, 1) << 5 |
> -        extract32(inst, 6, 1) << 4 |
> -        extract32(inst, 2, 4) << 6;
> -}
> -
> -static int32_t operand_cimm16sp(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 1) << 9 |
> -        extract32(inst, 6, 1) << 4 |
> -        extract32(inst, 5, 1) << 6 |
> -        extract32(inst, 3, 2) << 7 |
> -        extract32(inst, 2, 1) << 5;
> -}
> -
> -static int32_t operand_cimmj(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 1) << 11 |
> -        extract32(inst, 11, 1) << 4 |
> -        extract32(inst, 9, 2) << 8 |
> -        extract32(inst, 8, 1) << 10 |
> -        extract32(inst, 7, 1) << 6 |
> -        extract32(inst, 6, 1) << 7 |
> -        extract32(inst, 3, 3) << 1 |
> -        extract32(inst, 2, 1) << 5;
> -}
> -
> -static int32_t operand_cimmb(rv_inst inst)
> -{
> -    return sextract32(inst, 12, 1) << 8 |
> -        extract32(inst, 10, 2) << 3 |
> -        extract32(inst, 5, 2) << 6 |
> -        extract32(inst, 3, 2) << 1 |
> -        extract32(inst, 2, 1) << 5;
> -}
> -
> -static uint32_t operand_cimmswsp(rv_inst inst)
> -{
> -    return extract32(inst, 9, 4) << 2 |
> -        extract32(inst, 7, 2) << 6;
> -}
> -
> -static uint32_t operand_cimmsdsp(rv_inst inst)
> -{
> -    return extract32(inst, 10, 3) << 3 |
> -        extract32(inst, 7, 3) << 6;
> -}
> -
> -static uint32_t operand_cimmsqsp(rv_inst inst)
> -{
> -    return extract32(inst, 11, 2) << 4 |
> -        extract32(inst, 7, 4) << 6;
> -}
> -
> -static uint32_t operand_cimm4spn(rv_inst inst)
> -{
> -    return extract32(inst, 11, 2) << 4 |
> -        extract32(inst, 7, 4) << 6 |
> -        extract32(inst, 6, 1) << 2 |
> -        extract32(inst, 5, 1) << 3;
> -}
> -
> -static uint32_t operand_cimmw(rv_inst inst)
> -{
> -    return extract32(inst, 10, 3) << 3 |
> -        extract32(inst, 6, 1) << 2 |
> -        extract32(inst, 5, 1) << 6;
> -}
> -
> -static uint32_t operand_cimmd(rv_inst inst)
> -{
> -    return extract32(inst, 10, 3) << 3 |
> -        extract32(inst, 5, 2) << 6;
> -}
> -
> -static uint32_t operand_cimmq(rv_inst inst)
> -{
> -    return extract32(inst, 11, 2) << 4 |
> -        extract32(inst, 10, 1) << 8 |
> -        extract32(inst, 5, 2) << 6;
> -}
> -
> -static int32_t operand_vimm(rv_inst inst)
> -{
> -    return sextract32(inst, 15, 5);
> -}
> -
> -static uint32_t operand_vuimm(rv_inst inst)
> -{
> -    return extract32(inst, 15, 5);
> -}
> -
> -static uint32_t operand_vzimm11(rv_inst inst)
> -{
> -    return extract32(inst, 20, 11);
> -}
> -
> -static uint32_t operand_vzimm10(rv_inst inst)
> -{
> -    return extract32(inst, 20, 10);
> -}
> -
> -static uint32_t operand_vzimm6(rv_inst inst)
> -{
> -    return extract32(inst, 26, 1) << 5 |
> -        extract32(inst, 15, 5);
> -}
> -
> -static uint32_t operand_bs(rv_inst inst)
> -{
> -    return extract32(inst, 30, 2);
> -}
> -
> -static uint32_t operand_rnum(rv_inst inst)
> -{
> -    return extract32(inst, 20, 4);
> -}
> -
> -static uint32_t operand_vm(rv_inst inst)
> -{
> -    return extract32(inst, 25, 1);
> -}
> -
> -static uint32_t operand_uimm_c_lb(rv_inst inst)
> -{
> -    return extract32(inst, 5, 1) << 1 |
> -        extract32(inst, 6, 1);
> -}
> -
> -static uint32_t operand_uimm_c_lh(rv_inst inst)
> -{
> -    return extract32(inst, 5, 1) << 1;
> -}
> -
> -static uint32_t operand_zcmp_spimm(rv_inst inst)
> -{
> -    return extract32(inst, 2, 2) << 4;
> -}
> -
> -static uint32_t operand_zcmp_rlist(rv_inst inst)
> -{
> -    return extract32(inst, 4, 4);
> -}
> -
> -static uint32_t operand_imm6(rv_inst inst)
> -{
> -    return extract32(inst, 20, 6);
> -}
> -
> -static uint32_t operand_imm2(rv_inst inst)
> -{
> -    return extract32(inst, 25, 2);
> -}
> -
> -static uint32_t operand_immh(rv_inst inst)
> -{
> -    return extract32(inst, 26, 6);
> -}
> -
> -static uint32_t operand_imml(rv_inst inst)
> -{
> -    return extract32(inst, 20, 6);
> -}
> -
> -static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist,
> uint32_t spimm)
> -{
> -    int xlen_bytes_log2 = isa == rv64 ? 3 : 2;
> -    int regs = rlist == 15 ? 13 : rlist - 3;
> -    uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16);
> -    return stack_adj_base + spimm;
> -}
> -
> -static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa)
> -{
> -    return calculate_stack_adj(isa, operand_zcmp_rlist(inst),
> -                               operand_zcmp_spimm(inst));
> -}
> -
> -static uint32_t operand_tbl_index(rv_inst inst)
> -{
> -    return extract32(inst, 2, 8);
> -}
> -
> -static uint32_t operand_lpl(rv_inst inst)
> -{
> -    return extract32(inst, 12, 20);
> -}
> -
>  /* decode operands */
>  
>  static void decode_inst_operands(rv_decode *dec, rv_isa isa)
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.