From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
To: Weiwei Li <liweiwei@iscas.ac.cn>,
qemu-riscv@nongnu.org, qemu-devel@nongnu.org
Cc: palmer@dabbelt.com, alistair.francis@wdc.com,
bin.meng@windriver.com, zhiwei_liu@linux.alibaba.com,
wangjunqiang@iscas.ac.cn, lazyparser@gmail.com
Subject: Re: [PATCH 2/7] target/riscv: Pass RISCVCPUConfig as target_info to disassemble_info
Date: Mon, 22 May 2023 09:54:28 -0300 [thread overview]
Message-ID: <29978bd3-97d0-9f17-d13e-b986bd0e7087@ventanamicro.com> (raw)
In-Reply-To: <20230519021926.15362-3-liweiwei@iscas.ac.cn>
On 5/18/23 23:19, Weiwei Li wrote:
> Pass RISCVCPUConfig as disassemble_info.target_info to support disas
> of conflict instructions related to specific extensions.
>
> Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn>
> Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn>
> ---
I suggest split the CPUCfg declarations from cpu.h into the new cpu_cfg.h header
in a separated patch. It makes our lives easier when bissecting for bugs and
so on.
One more nit below:
> disas/riscv.c | 10 ++-
> target/riscv/cpu.c | 1 +
> target/riscv/cpu.h | 114 +---------------------------------
> target/riscv/cpu_cfg.h | 135 +++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 144 insertions(+), 116 deletions(-)
> create mode 100644 target/riscv/cpu_cfg.h
>
> diff --git a/disas/riscv.c b/disas/riscv.c
> index e61bda5674..729ab684da 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -19,7 +19,7 @@
>
> #include "qemu/osdep.h"
> #include "disas/dis-asm.h"
> -
> +#include "target/riscv/cpu_cfg.h"
>
> /* types */
>
> @@ -967,6 +967,7 @@ typedef enum {
> /* structures */
>
> typedef struct {
> + RISCVCPUConfig *cfg;
> uint64_t pc;
> uint64_t inst;
> int32_t imm;
> @@ -4855,11 +4856,13 @@ static void decode_inst_decompress(rv_decode *dec, rv_isa isa)
> /* disassemble instruction */
>
> static void
> -disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst)
> +disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst,
> + RISCVCPUConfig *cfg)
> {
> rv_decode dec = { 0 };
> dec.pc = pc;
> dec.inst = inst;
> + dec.cfg = cfg;
> decode_inst_opcode(&dec, isa);
> decode_inst_operands(&dec, isa);
> decode_inst_decompress(&dec, isa);
> @@ -4914,7 +4917,8 @@ print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa)
> break;
> }
>
> - disasm_inst(buf, sizeof(buf), isa, memaddr, inst);
> + disasm_inst(buf, sizeof(buf), isa, memaddr, inst,
> + (RISCVCPUConfig *)info->target_info);
> (*info->fprintf_func)(info->stream, "%s", buf);
>
> return len;
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index db0875fb43..4fe926cdd1 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -818,6 +818,7 @@ static void riscv_cpu_reset_hold(Object *obj)
> static void riscv_cpu_disas_set_info(CPUState *s, disassemble_info *info)
> {
> RISCVCPU *cpu = RISCV_CPU(s);
> + info->target_info = &cpu->cfg;
>
> switch (riscv_cpu_mxl(&cpu->env)) {
> case MXL_RV32:
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index de7e43126a..dc1229b69c 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -27,6 +27,7 @@
> #include "qom/object.h"
> #include "qemu/int128.h"
> #include "cpu_bits.h"
> +#include "cpu_cfg.h"
> #include "qapi/qapi-types-common.h"
> #include "cpu-qom.h"
>
> @@ -368,119 +369,6 @@ struct CPUArchState {
> uint64_t kvm_timer_frequency;
> };
>
> -/*
> - * map is a 16-bit bitmap: the most significant set bit in map is the maximum
> - * satp mode that is supported. It may be chosen by the user and must respect
> - * what qemu implements (valid_1_10_32/64) and what the hw is capable of
> - * (supported bitmap below).
> - *
> - * init is a 16-bit bitmap used to make sure the user selected a correct
> - * configuration as per the specification.
> - *
> - * supported is a 16-bit bitmap used to reflect the hw capabilities.
> - */
> -typedef struct {
> - uint16_t map, init, supported;
> -} RISCVSATPMap;
> -
> -struct RISCVCPUConfig {
> - bool ext_zba;
> - bool ext_zbb;
> - bool ext_zbc;
> - bool ext_zbkb;
> - bool ext_zbkc;
> - bool ext_zbkx;
> - bool ext_zbs;
> - bool ext_zca;
> - bool ext_zcb;
> - bool ext_zcd;
> - bool ext_zce;
> - bool ext_zcf;
> - bool ext_zcmp;
> - bool ext_zcmt;
> - bool ext_zk;
> - bool ext_zkn;
> - bool ext_zknd;
> - bool ext_zkne;
> - bool ext_zknh;
> - bool ext_zkr;
> - bool ext_zks;
> - bool ext_zksed;
> - bool ext_zksh;
> - bool ext_zkt;
> - bool ext_ifencei;
> - bool ext_icsr;
> - bool ext_icbom;
> - bool ext_icboz;
> - bool ext_zicond;
> - bool ext_zihintpause;
> - bool ext_smstateen;
> - bool ext_sstc;
> - bool ext_svadu;
> - bool ext_svinval;
> - bool ext_svnapot;
> - bool ext_svpbmt;
> - bool ext_zdinx;
> - bool ext_zawrs;
> - bool ext_zfh;
> - bool ext_zfhmin;
> - bool ext_zfinx;
> - bool ext_zhinx;
> - bool ext_zhinxmin;
> - bool ext_zve32f;
> - bool ext_zve64f;
> - bool ext_zve64d;
> - bool ext_zmmul;
> - bool ext_zvfh;
> - bool ext_zvfhmin;
> - bool ext_smaia;
> - bool ext_ssaia;
> - bool ext_sscofpmf;
> - bool rvv_ta_all_1s;
> - bool rvv_ma_all_1s;
> -
> - uint32_t mvendorid;
> - uint64_t marchid;
> - uint64_t mimpid;
> -
> - /* Vendor-specific custom extensions */
> - bool ext_xtheadba;
> - bool ext_xtheadbb;
> - bool ext_xtheadbs;
> - bool ext_xtheadcmo;
> - bool ext_xtheadcondmov;
> - bool ext_xtheadfmemidx;
> - bool ext_xtheadfmv;
> - bool ext_xtheadmac;
> - bool ext_xtheadmemidx;
> - bool ext_xtheadmempair;
> - bool ext_xtheadsync;
> - bool ext_XVentanaCondOps;
> -
> - uint8_t pmu_num;
> - char *priv_spec;
> - char *user_spec;
> - char *bext_spec;
> - char *vext_spec;
> - uint16_t vlen;
> - uint16_t elen;
> - uint16_t cbom_blocksize;
> - uint16_t cboz_blocksize;
> - bool mmu;
> - bool pmp;
> - bool epmp;
> - bool debug;
> - bool misa_w;
> -
> - bool short_isa_string;
> -
> -#ifndef CONFIG_USER_ONLY
> - RISCVSATPMap satp_mode;
> -#endif
> -};
> -
> -typedef struct RISCVCPUConfig RISCVCPUConfig;
> -
> /*
> * RISCVCPU:
> * @env: #CPURISCVState
> diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h
> new file mode 100644
> index 0000000000..e2e982fac4
> --- /dev/null
> +++ b/target/riscv/cpu_cfg.h
> @@ -0,0 +1,135 @@
> +/*
> + * QEMU RISC-V CPU CFG
> + *
> + * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu
> + * Copyright (c) 2017-2018 SiFive, Inc.
I don't mind keeping these copyrights but it would be good to have a 2023 copyright
as well since the file was just created.
Other than that:
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2 or later, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
> + * more details.
> + *
> + * You should have received a copy of the GNU General Public License along with
> + * this program. If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef RISCV_CPU_CFG_H
> +#define RISCV_CPU_CFG_H
> +
> +/*
> + * map is a 16-bit bitmap: the most significant set bit in map is the maximum
> + * satp mode that is supported. It may be chosen by the user and must respect
> + * what qemu implements (valid_1_10_32/64) and what the hw is capable of
> + * (supported bitmap below).
> + *
> + * init is a 16-bit bitmap used to make sure the user selected a correct
> + * configuration as per the specification.
> + *
> + * supported is a 16-bit bitmap used to reflect the hw capabilities.
> + */
> +typedef struct {
> + uint16_t map, init, supported;
> +} RISCVSATPMap;
> +
> +struct RISCVCPUConfig {
> + bool ext_zba;
> + bool ext_zbb;
> + bool ext_zbc;
> + bool ext_zbkb;
> + bool ext_zbkc;
> + bool ext_zbkx;
> + bool ext_zbs;
> + bool ext_zca;
> + bool ext_zcb;
> + bool ext_zcd;
> + bool ext_zce;
> + bool ext_zcf;
> + bool ext_zcmp;
> + bool ext_zcmt;
> + bool ext_zk;
> + bool ext_zkn;
> + bool ext_zknd;
> + bool ext_zkne;
> + bool ext_zknh;
> + bool ext_zkr;
> + bool ext_zks;
> + bool ext_zksed;
> + bool ext_zksh;
> + bool ext_zkt;
> + bool ext_ifencei;
> + bool ext_icsr;
> + bool ext_icbom;
> + bool ext_icboz;
> + bool ext_zicond;
> + bool ext_zihintpause;
> + bool ext_smstateen;
> + bool ext_sstc;
> + bool ext_svadu;
> + bool ext_svinval;
> + bool ext_svnapot;
> + bool ext_svpbmt;
> + bool ext_zdinx;
> + bool ext_zawrs;
> + bool ext_zfh;
> + bool ext_zfhmin;
> + bool ext_zfinx;
> + bool ext_zhinx;
> + bool ext_zhinxmin;
> + bool ext_zve32f;
> + bool ext_zve64f;
> + bool ext_zve64d;
> + bool ext_zmmul;
> + bool ext_zvfh;
> + bool ext_zvfhmin;
> + bool ext_smaia;
> + bool ext_ssaia;
> + bool ext_sscofpmf;
> + bool rvv_ta_all_1s;
> + bool rvv_ma_all_1s;
> +
> + uint32_t mvendorid;
> + uint64_t marchid;
> + uint64_t mimpid;
> +
> + /* Vendor-specific custom extensions */
> + bool ext_xtheadba;
> + bool ext_xtheadbb;
> + bool ext_xtheadbs;
> + bool ext_xtheadcmo;
> + bool ext_xtheadcondmov;
> + bool ext_xtheadfmemidx;
> + bool ext_xtheadfmv;
> + bool ext_xtheadmac;
> + bool ext_xtheadmemidx;
> + bool ext_xtheadmempair;
> + bool ext_xtheadsync;
> + bool ext_XVentanaCondOps;
> +
> + uint8_t pmu_num;
> + char *priv_spec;
> + char *user_spec;
> + char *bext_spec;
> + char *vext_spec;
> + uint16_t vlen;
> + uint16_t elen;
> + uint16_t cbom_blocksize;
> + uint16_t cboz_blocksize;
> + bool mmu;
> + bool pmp;
> + bool epmp;
> + bool debug;
> + bool misa_w;
> +
> + bool short_isa_string;
> +
> +#ifndef CONFIG_USER_ONLY
> + RISCVSATPMap satp_mode;
> +#endif
> +};
> +
> +typedef struct RISCVCPUConfig RISCVCPUConfig;
> +#endif
next prev parent reply other threads:[~2023-05-22 12:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-19 2:19 [PATCH 0/7] Add support for extension specific disas Weiwei Li
2023-05-19 2:19 ` [PATCH 1/7] disas: Change type of disassemble_info.target_info to pointer Weiwei Li
2023-05-22 12:49 ` Daniel Henrique Barboza
2023-05-19 2:19 ` [PATCH 2/7] target/riscv: Pass RISCVCPUConfig as target_info to disassemble_info Weiwei Li
2023-05-22 12:54 ` Daniel Henrique Barboza [this message]
2023-05-22 14:20 ` Weiwei Li
2023-05-19 2:19 ` [PATCH 3/7] disas/riscv.c: Support disas for Zcm* extensions Weiwei Li
2023-05-22 13:00 ` Daniel Henrique Barboza
2023-05-22 14:24 ` Weiwei Li
2023-05-22 13:10 ` Daniel Henrique Barboza
2023-05-22 14:27 ` Weiwei Li
2023-05-22 14:30 ` Daniel Henrique Barboza
2023-05-19 2:19 ` [PATCH 4/7] disas/riscv.c: Support disas for Z*inx extensions Weiwei Li
2023-05-22 13:02 ` Daniel Henrique Barboza
2023-05-19 2:19 ` [PATCH 5/7] disas/riscv.c: Remove unused decomp_rv32/64 value for vector instructions Weiwei Li
2023-05-22 13:06 ` Daniel Henrique Barboza
2023-05-19 2:19 ` [PATCH 6/7] disas/riscv.c: Fix lines with over 80 characters Weiwei Li
2023-05-22 13:11 ` Daniel Henrique Barboza
2023-05-19 2:19 ` [PATCH 7/7] disas/riscv.c: Remove redundant parentheses Weiwei Li
2023-05-22 13:11 ` Daniel Henrique Barboza
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=29978bd3-97d0-9f17-d13e-b986bd0e7087@ventanamicro.com \
--to=dbarboza@ventanamicro.com \
--cc=alistair.francis@wdc.com \
--cc=bin.meng@windriver.com \
--cc=lazyparser@gmail.com \
--cc=liweiwei@iscas.ac.cn \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=wangjunqiang@iscas.ac.cn \
--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.