From: Andrew Jones <ajones@ventanamicro.com>
To: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Cc: qemu-devel@nongnu.org, qemu-riscv@nongnu.org,
alistair.francis@wdc.com, bmeng@tinylab.org,
liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com,
palmer@rivosinc.com, philmd@linaro.org
Subject: Re: [PATCH v6 11/20] target/riscv/cpu: add misa_ext_info_arr[]
Date: Fri, 30 Jun 2023 09:21:26 +0200 [thread overview]
Message-ID: <20230630-7af8091ede9cbd91e3236e3b@orel> (raw)
In-Reply-To: <8d54c842-fd7a-0e9d-3835-10599d7de5c2@ventanamicro.com>
On Thu, Jun 29, 2023 at 07:04:28PM -0300, Daniel Henrique Barboza wrote:
> Drew,
>
> On 6/29/23 05:59, Andrew Jones wrote:
> > On Wed, Jun 28, 2023 at 06:30:24PM -0300, Daniel Henrique Barboza wrote:
> > > Next patch will add KVM specific user properties for both MISA and
> > > multi-letter extensions. For MISA extensions we want to make use of what
> > > is already available in misa_ext_cfgs[] to avoid code repetition.
> > >
> > > misa_ext_info_arr[] array will hold name and description for each MISA
> > > extension that misa_ext_cfgs[] is declaring. We'll then use this new
> > > array in KVM code to avoid duplicating strings.
> > >
> > > There's nothing holding us back from doing the same with multi-letter
> > > extensions. For now doing just with MISA extensions is enough.
> > >
> > > Suggested-by: Andrew Jones <ajones@ventanamicro.com>
> > > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> > > ---
> > > target/riscv/cpu.c | 83 ++++++++++++++++++++++++++++++----------------
> > > target/riscv/cpu.h | 7 +++-
> > > 2 files changed, 61 insertions(+), 29 deletions(-)
> > >
> > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> > > index 2485e820f8..90dd2078ae 100644
> > > --- a/target/riscv/cpu.c
> > > +++ b/target/riscv/cpu.c
> > > @@ -1558,33 +1558,57 @@ static void cpu_get_misa_ext_cfg(Object *obj, Visitor *v, const char *name,
> > > visit_type_bool(v, name, &value, errp);
> > > }
> > > -static const RISCVCPUMisaExtConfig misa_ext_cfgs[] = {
> > > - {.name = "a", .description = "Atomic instructions",
> > > - .misa_bit = RVA, .enabled = true},
> > > - {.name = "c", .description = "Compressed instructions",
> > > - .misa_bit = RVC, .enabled = true},
> > > - {.name = "d", .description = "Double-precision float point",
> > > - .misa_bit = RVD, .enabled = true},
> > > - {.name = "f", .description = "Single-precision float point",
> > > - .misa_bit = RVF, .enabled = true},
> > > - {.name = "i", .description = "Base integer instruction set",
> > > - .misa_bit = RVI, .enabled = true},
> > > - {.name = "e", .description = "Base integer instruction set (embedded)",
> > > - .misa_bit = RVE, .enabled = false},
> > > - {.name = "m", .description = "Integer multiplication and division",
> > > - .misa_bit = RVM, .enabled = true},
> > > - {.name = "s", .description = "Supervisor-level instructions",
> > > - .misa_bit = RVS, .enabled = true},
> > > - {.name = "u", .description = "User-level instructions",
> > > - .misa_bit = RVU, .enabled = true},
> > > - {.name = "h", .description = "Hypervisor",
> > > - .misa_bit = RVH, .enabled = true},
> > > - {.name = "x-j", .description = "Dynamic translated languages",
> > > - .misa_bit = RVJ, .enabled = false},
> > > - {.name = "v", .description = "Vector operations",
> > > - .misa_bit = RVV, .enabled = false},
> > > - {.name = "g", .description = "General purpose (IMAFD_Zicsr_Zifencei)",
> > > - .misa_bit = RVG, .enabled = false},
> > > +typedef struct misa_ext_info {
> > > + const char *name;
> > > + const char *description;
> > > +} MISAExtInfo;
> > > +
> > > +#define MISA_EXT_INFO(_idx, _propname, _descr) \
> > > + [(_idx - 'A')] = {.name = _propname, .description = _descr}
> >
> > We don't have to give up on passing RV* to this macro. Directly
> > using __builtin_ctz() with a constant should work, i.e.
> >
> > #define MISA_EXT_INFO(_bit, _propname, _descr) \
> > [__builtin_ctz(_bit)] = {.name = _propname, .description = _descr}
> >
> > and then
> >
> > MISA_EXT_INFO(RVA, "a", "Atomic instructions"),
> > MISA_EXT_INFO(RVD, "d", "Double-precision float point"),
> > ...
> >
> > (We don't need the ctz32() wrapper since we know we'll never input zero to
> > __builtin_ctz().)
>
> I run the series through gitlab because I got worried about this change in different
> compilers and so on. And in fact I fear that we break 'clang-user' with it:
>
> https://gitlab.com/danielhb/qemu/-/jobs/4569265199
>
> u.c.o -c ../target/riscv/cpu.c
> ../target/riscv/cpu.c:1624:5: error: initializer element is not a compile-time constant
> MISA_CFG(RVA, true),
> ^~~~~~~~~~~~~~~~~~~
> ../target/riscv/cpu.c:1619:53: note: expanded from macro 'MISA_CFG'
> {.name = misa_ext_info_arr[MISA_INFO_IDX(_bit)].name, \
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
> 1 error generated.
> [1503/2619] Compiling C object libqemu-ppc64le-linux-user.fa.p/linux-user_syscall.c.o
>
>
> Which is a shame because gcc and everyone else is okay with it, but 'clang-user' and
> 'tsan-build' runners are complaining about it.
>
> Unless there's a directive to make clang accept this code (I didn't find any) we'll
> need to keep updating name and description during runtime, and we'll have to keep
> removing 'const' from misa_ext_cfgs[].
>
Yeah, that's a pity, and odd that any compiler wouldn't be able to
identify that a constant input to a builtin linear function produces
another constant...
Oh well, we can only be as good as the tools we use...
Thanks,
drew
next prev parent reply other threads:[~2023-06-30 7:22 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-28 21:30 [PATCH v6 00/20] target/riscv, KVM: fixes and enhancements Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 01/20] target/riscv: skip features setup for KVM CPUs Daniel Henrique Barboza
2023-06-29 8:24 ` Andrew Jones
2023-06-28 21:30 ` [PATCH v6 02/20] hw/riscv/virt.c: skip 'mmu-type' FDT if satp mode not set Daniel Henrique Barboza
2023-06-30 7:36 ` Michael Tokarev
2023-06-30 7:46 ` Daniel Henrique Barboza
2023-06-30 7:51 ` Michael Tokarev
2023-06-28 21:30 ` [PATCH v6 03/20] target/riscv/cpu.c: restrict 'mvendorid' value Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 04/20] target/riscv/cpu.c: restrict 'mimpid' value Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 05/20] target/riscv/cpu.c: restrict 'marchid' value Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 06/20] target/riscv: use KVM scratch CPUs to init KVM properties Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 07/20] target/riscv: read marchid/mimpid in kvm_riscv_init_machine_ids() Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 08/20] target/riscv: handle mvendorid/marchid/mimpid for KVM CPUs Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 09/20] linux-headers: Update to v6.4-rc1 Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 10/20] target/riscv/kvm.c: init 'misa_ext_mask' with scratch CPU Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 11/20] target/riscv/cpu: add misa_ext_info_arr[] Daniel Henrique Barboza
2023-06-29 7:26 ` Philippe Mathieu-Daudé
2023-06-29 11:36 ` Daniel Henrique Barboza
2023-06-29 11:43 ` Daniel Henrique Barboza
2023-06-29 8:59 ` Andrew Jones
2023-06-29 11:40 ` Daniel Henrique Barboza
2023-06-29 22:04 ` Daniel Henrique Barboza
2023-06-30 7:21 ` Andrew Jones [this message]
2023-06-28 21:30 ` [PATCH v6 12/20] target/riscv: add KVM specific MISA properties Daniel Henrique Barboza
2023-06-29 9:12 ` Andrew Jones
2023-06-29 11:50 ` Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 13/20] target/riscv/kvm.c: update KVM MISA bits Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 14/20] target/riscv/kvm.c: add multi-letter extension KVM properties Daniel Henrique Barboza
2023-06-29 9:14 ` Andrew Jones
2023-06-28 21:30 ` [PATCH v6 15/20] target/riscv/cpu.c: add satp_mode properties earlier Daniel Henrique Barboza
2023-06-29 7:30 ` Philippe Mathieu-Daudé
2023-06-29 9:15 ` Andrew Jones
2023-06-28 21:30 ` [PATCH v6 16/20] target/riscv/cpu.c: remove priv_ver check from riscv_isa_string_ext() Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 17/20] target/riscv/cpu.c: create KVM mock properties Daniel Henrique Barboza
2023-06-29 9:17 ` Andrew Jones
2023-06-28 21:30 ` [PATCH v6 18/20] target/riscv: update multi-letter extension KVM properties Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 19/20] target/riscv/kvm.c: add kvmconfig_get_cfg_addr() helper Daniel Henrique Barboza
2023-06-28 21:30 ` [PATCH v6 20/20] target/riscv/kvm.c: read/write (cbom|cboz)_blocksize in KVM 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=20230630-7af8091ede9cbd91e3236e3b@orel \
--to=ajones@ventanamicro.com \
--cc=alistair.francis@wdc.com \
--cc=bmeng@tinylab.org \
--cc=dbarboza@ventanamicro.com \
--cc=liweiwei@iscas.ac.cn \
--cc=palmer@rivosinc.com \
--cc=philmd@linaro.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).