All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Liu <chao.liu.zevorn@gmail.com>
To: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Cc: qemu-devel@nongnu.org, qemu-riscv@nongnu.org,
	alistair.francis@wdc.com,  liwei1518@gmail.com,
	zhiwei_liu@linux.alibaba.com
Subject: Re: [PATCH] disas/riscv.c: add 'cbo' insns to disassembler
Date: Wed, 20 May 2026 10:15:10 +0800	[thread overview]
Message-ID: <ag0ZHdyMycEXi2GD@ChaodeMacBook-Pro.local> (raw)
In-Reply-To: <20260519204714.1376551-1-daniel.barboza@oss.qualcomm.com>

On Tue, May 19, 2026 at 05:47:14PM +0800, Daniel Henrique Barboza wrote:
> We forgot to add 'cbo' insns to disas/riscv.c.  The result is that the
> disassembler recognizes all of them as 'lq', an insn that happens to
> share the same opcode space.
> 
> While we're at it reorder cbo_* entries in insn32.decode using opcode
> order instead of insn name.
> 
> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3480
> Signed-off-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>

> ---
>  disas/riscv.c              | 29 ++++++++++++++++++++++++++++-
>  target/riscv/insn32.decode |  2 +-
>  2 files changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/disas/riscv.c b/disas/riscv.c
> index d416a4d6b3..36609efdf5 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -985,6 +985,10 @@ typedef enum {
>      rv_op_ssamoswap_d = 953,
>      rv_op_c_sspush = 954,
>      rv_op_c_sspopchk = 955,
> +    rv_op_cbo_inval = 956,
> +    rv_op_cbo_clean = 957,
> +    rv_op_cbo_flush = 958,
> +    rv_op_cbo_zero = 959,
>  } rv_op;
>  
>  /* register names */
> @@ -2255,6 +2259,10 @@ const rv_opcode_data rvi_opcode_data[] = {
>        rv_op_sspush, 0 },
>      { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk,
>        rv_op_sspopchk, 0 },
> +   { "cbo.inval", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
> +   { "cbo.clean", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
> +   { "cbo.flush", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
> +   { "cbo.zero", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
>  };
>  
>  /* CSR names */
> @@ -2876,7 +2884,26 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
>              switch ((inst >> 12) & 0b111) {
>              case 0: op = rv_op_fence; break;
>              case 1: op = rv_op_fence_i; break;
> -            case 2: op = rv_op_lq; break;
> +            case 2:
> +               /*
> +                * 'lq' shares the "(...) 010 ..... 0001111" opcode space
> +                * with 'cbo' insns.  Check the next 5 bits to select
> +                * what we want:
> +                *
> +                * cbo_inval  0000000 00000 ..... 010 00000 0001111
> +                * cbo_clean  0000000 00001 ..... 010 00000 0001111
> +                * cbo_flush  0000000 00010 ..... 010 00000 0001111
> +                * cbo_zero   0000000 00100 ..... 010 00000 0001111
> +                *
> +                * 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;
> +               }
>              }
>              break;
>          case 4:
> diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode
> index 6e35c4b1e6..21272fdb50 100644
> --- a/target/riscv/insn32.decode
> +++ b/target/riscv/insn32.decode
> @@ -207,9 +207,9 @@ ldu      ............   ..... 111 ..... 0000011 @i
>  {
>    [
>      # *** RV32 Zicbom Standard Extension ***
> +    cbo_inval  0000000 00000 ..... 010 00000 0001111 @sfence_vm
>      cbo_clean  0000000 00001 ..... 010 00000 0001111 @sfence_vm
>      cbo_flush  0000000 00010 ..... 010 00000 0001111 @sfence_vm
> -    cbo_inval  0000000 00000 ..... 010 00000 0001111 @sfence_vm
>  
>      # *** RV32 Zicboz Standard Extension ***
>      cbo_zero   0000000 00100 ..... 010 00000 0001111 @sfence_vm
> -- 
> 2.43.0
> 


  parent reply	other threads:[~2026-05-20  2:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-19 20:47 [PATCH] disas/riscv.c: add 'cbo' insns to disassembler Daniel Henrique Barboza
2026-05-19 22:20 ` Richard Henderson
2026-05-20  2:15 ` Chao Liu [this message]
2026-05-26  3:36 ` Alistair Francis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ag0ZHdyMycEXi2GD@ChaodeMacBook-Pro.local \
    --to=chao.liu.zevorn@gmail.com \
    --cc=alistair.francis@wdc.com \
    --cc=daniel.barboza@oss.qualcomm.com \
    --cc=liwei1518@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=zhiwei_liu@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.