From: Mayuresh Chitale <mchitale@ventanamicro.com>
To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org
Cc: Mayuresh Chitale <mchitale@ventanamicro.com>, alistair.francis@wdc.com
Subject: [PATCH v1 2/3] target/riscv: Extend isa_ext_data for single letter extensions
Date: Thu, 27 Oct 2022 11:16:48 +0530 [thread overview]
Message-ID: <20221027054649.69228-3-mchitale@ventanamicro.com> (raw)
In-Reply-To: <20221027054649.69228-1-mchitale@ventanamicro.com>
Currently the ISA string for a CPU is generated from two different
arrays, one for single letter extensions and another for multi letter
extensions. Add all the single letter extensions to the isa_ext_data
array and use it for generating the ISA string. Also drop 'P' and 'Q'
extensions from the list of single letter extensions as those are not
supported yet.
Signed-off-by: Mayuresh Chitale <mchitale@ventanamicro.com>
---
target/riscv/cpu.c | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index e6d9c706bb..35320a8547 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -41,8 +41,6 @@
(QEMU_VERSION_MICRO))
#define RISCV_CPU_MIMPID RISCV_CPU_MARCHID
-static const char riscv_single_letter_exts[] = "IEMAFDQCPVH";
-
struct isa_ext_data {
const char *name;
bool multi_letter;
@@ -71,6 +69,13 @@ struct isa_ext_data {
* extensions by an underscore.
*/
static const struct isa_ext_data isa_edata_arr[] = {
+ ISA_EXT_DATA_ENTRY(i, false, PRIV_VERSION_1_10_0, ext_i),
+ ISA_EXT_DATA_ENTRY(e, false, PRIV_VERSION_1_10_0, ext_e),
+ ISA_EXT_DATA_ENTRY(m, false, PRIV_VERSION_1_10_0, ext_m),
+ ISA_EXT_DATA_ENTRY(a, false, PRIV_VERSION_1_10_0, ext_a),
+ ISA_EXT_DATA_ENTRY(f, false, PRIV_VERSION_1_10_0, ext_f),
+ ISA_EXT_DATA_ENTRY(d, false, PRIV_VERSION_1_10_0, ext_d),
+ ISA_EXT_DATA_ENTRY(c, false, PRIV_VERSION_1_10_0, ext_c),
ISA_EXT_DATA_ENTRY(h, false, PRIV_VERSION_1_12_0, ext_h),
ISA_EXT_DATA_ENTRY(v, false, PRIV_VERSION_1_12_0, ext_v),
ISA_EXT_DATA_ENTRY(zicsr, true, PRIV_VERSION_1_10_0, ext_icsr),
@@ -1182,16 +1187,23 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
device_class_set_props(dc, riscv_cpu_properties);
}
-static void riscv_isa_string_ext(RISCVCPU *cpu, char **isa_str, int max_str_len)
+static void riscv_isa_string_ext(RISCVCPU *cpu, char **isa_str)
{
char *old = *isa_str;
char *new = *isa_str;
int i;
for (i = 0; i < ARRAY_SIZE(isa_edata_arr); i++) {
- if (isa_edata_arr[i].multi_letter &&
- isa_ext_is_enabled(cpu, &isa_edata_arr[i])) {
- new = g_strconcat(old, "_", isa_edata_arr[i].name, NULL);
+ if (isa_ext_is_enabled(cpu, &isa_edata_arr[i])) {
+ if (isa_edata_arr[i].multi_letter) {
+ if (cpu->cfg.short_isa_string) {
+ continue;
+ }
+ new = g_strconcat(old, "_", isa_edata_arr[i].name, NULL);
+ } else {
+ new = g_strconcat(old, isa_edata_arr[i].name, NULL);
+ }
+
g_free(old);
old = new;
}
@@ -1202,19 +1214,12 @@ static void riscv_isa_string_ext(RISCVCPU *cpu, char **isa_str, int max_str_len)
char *riscv_isa_string(RISCVCPU *cpu)
{
- int i;
- const size_t maxlen = sizeof("rv128") + sizeof(riscv_single_letter_exts);
+ const size_t maxlen = sizeof("rv128");
char *isa_str = g_new(char, maxlen);
- char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS);
- for (i = 0; i < sizeof(riscv_single_letter_exts) - 1; i++) {
- if (cpu->env.misa_ext & RV(riscv_single_letter_exts[i])) {
- *p++ = qemu_tolower(riscv_single_letter_exts[i]);
- }
- }
- *p = '\0';
- if (!cpu->cfg.short_isa_string) {
- riscv_isa_string_ext(cpu, &isa_str, maxlen);
- }
+
+ snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS);
+ riscv_isa_string_ext(cpu, &isa_str);
+
return isa_str;
}
--
2.34.1
next prev parent reply other threads:[~2022-10-27 5:47 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 5:46 [PATCH v1 0/3] target/riscv: Apply KVM policy to ISA extensions Mayuresh Chitale
2022-10-27 5:46 ` [PATCH v1 1/3] update-linux-headers: Version 6.1-rc2 Mayuresh Chitale
2022-10-27 5:46 ` Mayuresh Chitale [this message]
2022-10-27 23:09 ` [PATCH v1 2/3] target/riscv: Extend isa_ext_data for single letter extensions Alistair Francis
2022-10-27 5:46 ` [PATCH v1 3/3] target/riscv: kvm: Support selecting VCPU extensions Mayuresh Chitale
2022-11-14 3:48 ` Alistair Francis
2022-10-27 8:24 ` [PATCH v1 0/3] target/riscv: Apply KVM policy to ISA extensions Andrew Jones
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=20221027054649.69228-3-mchitale@ventanamicro.com \
--to=mchitale@ventanamicro.com \
--cc=alistair.francis@wdc.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
/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.