diff mbox series

[05/22] target/riscv: move RISCVCPUConfig fields to a header file

Message ID 20250206182711.2420505-6-pbonzini@redhat.com (mailing list archive)
State New
Headers show
Series target/riscv: declarative CPU definitions | expand

Commit Message

Paolo Bonzini Feb. 6, 2025, 6:26 p.m. UTC
To support merging a subclass's RISCVCPUDef into the superclass, a list
of all the CPU features is needed.  Put them into a header file that
can be included multiple times, expanding the macros BOOL_FIELD and
TYPE_FIELD to different operations.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target/riscv/cpu_cfg.h            | 160 +---------------------------
 target/riscv/cpu_cfg_fields.h.inc | 167 ++++++++++++++++++++++++++++++
 2 files changed, 170 insertions(+), 157 deletions(-)
 create mode 100644 target/riscv/cpu_cfg_fields.h.inc

Comments

Alistair Francis Feb. 18, 2025, 12:06 a.m. UTC | #1
On Fri, Feb 7, 2025 at 4:27 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> To support merging a subclass's RISCVCPUDef into the superclass, a list
> of all the CPU features is needed.  Put them into a header file that
> can be included multiple times, expanding the macros BOOL_FIELD and
> TYPE_FIELD to different operations.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/cpu_cfg.h            | 160 +---------------------------
>  target/riscv/cpu_cfg_fields.h.inc | 167 ++++++++++++++++++++++++++++++
>  2 files changed, 170 insertions(+), 157 deletions(-)
>  create mode 100644 target/riscv/cpu_cfg_fields.h.inc
>
> diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h
> index b410b1e6038..ad02693fa66 100644
> --- a/target/riscv/cpu_cfg.h
> +++ b/target/riscv/cpu_cfg.h
> @@ -37,163 +37,9 @@ typedef struct {
>  } 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_zifencei;
> -    bool ext_zicntr;
> -    bool ext_zicsr;
> -    bool ext_zicbom;
> -    bool ext_zicbop;
> -    bool ext_zicboz;
> -    bool ext_zicfilp;
> -    bool ext_zicfiss;
> -    bool ext_zicond;
> -    bool ext_zihintntl;
> -    bool ext_zihintpause;
> -    bool ext_zihpm;
> -    bool ext_zimop;
> -    bool ext_zcmop;
> -    bool ext_ztso;
> -    bool ext_smstateen;
> -    bool ext_sstc;
> -    bool ext_smcdeleg;
> -    bool ext_ssccfg;
> -    bool ext_smcntrpmf;
> -    bool ext_smcsrind;
> -    bool ext_sscsrind;
> -    bool ext_ssdbltrp;
> -    bool ext_smdbltrp;
> -    bool ext_svadu;
> -    bool ext_svinval;
> -    bool ext_svnapot;
> -    bool ext_svpbmt;
> -    bool ext_svvptc;
> -    bool ext_svukte;
> -    bool ext_zdinx;
> -    bool ext_zaamo;
> -    bool ext_zacas;
> -    bool ext_zama16b;
> -    bool ext_zabha;
> -    bool ext_zalrsc;
> -    bool ext_zawrs;
> -    bool ext_zfa;
> -    bool ext_zfbfmin;
> -    bool ext_zfh;
> -    bool ext_zfhmin;
> -    bool ext_zfinx;
> -    bool ext_zhinx;
> -    bool ext_zhinxmin;
> -    bool ext_zve32f;
> -    bool ext_zve32x;
> -    bool ext_zve64f;
> -    bool ext_zve64d;
> -    bool ext_zve64x;
> -    bool ext_zvbb;
> -    bool ext_zvbc;
> -    bool ext_zvkb;
> -    bool ext_zvkg;
> -    bool ext_zvkned;
> -    bool ext_zvknha;
> -    bool ext_zvknhb;
> -    bool ext_zvksed;
> -    bool ext_zvksh;
> -    bool ext_zvkt;
> -    bool ext_zvkn;
> -    bool ext_zvknc;
> -    bool ext_zvkng;
> -    bool ext_zvks;
> -    bool ext_zvksc;
> -    bool ext_zvksg;
> -    bool ext_zmmul;
> -    bool ext_zvfbfmin;
> -    bool ext_zvfbfwma;
> -    bool ext_zvfh;
> -    bool ext_zvfhmin;
> -    bool ext_smaia;
> -    bool ext_ssaia;
> -    bool ext_sscofpmf;
> -    bool ext_smepmp;
> -    bool ext_smrnmi;
> -    bool ext_ssnpm;
> -    bool ext_smnpm;
> -    bool ext_smmpm;
> -    bool ext_sspm;
> -    bool ext_supm;
> -    bool rvv_ta_all_1s;
> -    bool rvv_ma_all_1s;
> -    bool rvv_vl_half_avl;
> -
> -    uint32_t mvendorid;
> -    uint64_t marchid;
> -    uint64_t mimpid;
> -
> -    /* Named features  */
> -    bool ext_svade;
> -    bool ext_zic64b;
> -    bool ext_ssstateen;
> -    bool ext_sha;
> -
> -    /*
> -     * Always 'true' booleans for named features
> -     * TCG always implement/can't be user disabled,
> -     * based on spec version.
> -     */
> -    bool has_priv_1_13;
> -    bool has_priv_1_12;
> -    bool has_priv_1_11;
> -
> -    /* 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;
> -
> -    uint32_t pmu_mask;
> -    uint16_t vlenb;
> -    uint16_t elen;
> -    uint16_t cbom_blocksize;
> -    uint16_t cbop_blocksize;
> -    uint16_t cboz_blocksize;
> -    bool mmu;
> -    bool pmp;
> -    bool debug;
> -    bool misa_w;
> -
> -    bool short_isa_string;
> -
> -#ifndef CONFIG_USER_ONLY
> -    RISCVSATPMap satp_mode;
> -#endif
> +#define BOOL_FIELD(x) bool x;
> +#define TYPED_FIELD(type, x) type x;
> +#include "cpu_cfg_fields.h.inc"
>  };
>
>  typedef struct RISCVCPUConfig RISCVCPUConfig;
> diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_fields.h.inc
> new file mode 100644
> index 00000000000..56fffb5f177
> --- /dev/null
> +++ b/target/riscv/cpu_cfg_fields.h.inc
> @@ -0,0 +1,167 @@
> +#ifndef BOOL_FIELD
> +#define BOOL_FIELD(x)
> +#endif
> +#ifndef TYPED_FIELD
> +#define TYPED_FIELD(type, x)
> +#endif
> +
> +BOOL_FIELD(ext_zba)
> +BOOL_FIELD(ext_zbb)
> +BOOL_FIELD(ext_zbc)
> +BOOL_FIELD(ext_zbkb)
> +BOOL_FIELD(ext_zbkc)
> +BOOL_FIELD(ext_zbkx)
> +BOOL_FIELD(ext_zbs)
> +BOOL_FIELD(ext_zca)
> +BOOL_FIELD(ext_zcb)
> +BOOL_FIELD(ext_zcd)
> +BOOL_FIELD(ext_zce)
> +BOOL_FIELD(ext_zcf)
> +BOOL_FIELD(ext_zcmp)
> +BOOL_FIELD(ext_zcmt)
> +BOOL_FIELD(ext_zk)
> +BOOL_FIELD(ext_zkn)
> +BOOL_FIELD(ext_zknd)
> +BOOL_FIELD(ext_zkne)
> +BOOL_FIELD(ext_zknh)
> +BOOL_FIELD(ext_zkr)
> +BOOL_FIELD(ext_zks)
> +BOOL_FIELD(ext_zksed)
> +BOOL_FIELD(ext_zksh)
> +BOOL_FIELD(ext_zkt)
> +BOOL_FIELD(ext_zifencei)
> +BOOL_FIELD(ext_zicntr)
> +BOOL_FIELD(ext_zicsr)
> +BOOL_FIELD(ext_zicbom)
> +BOOL_FIELD(ext_zicbop)
> +BOOL_FIELD(ext_zicboz)
> +BOOL_FIELD(ext_zicfilp)
> +BOOL_FIELD(ext_zicfiss)
> +BOOL_FIELD(ext_zicond)
> +BOOL_FIELD(ext_zihintntl)
> +BOOL_FIELD(ext_zihintpause)
> +BOOL_FIELD(ext_zihpm)
> +BOOL_FIELD(ext_zimop)
> +BOOL_FIELD(ext_zcmop)
> +BOOL_FIELD(ext_ztso)
> +BOOL_FIELD(ext_smstateen)
> +BOOL_FIELD(ext_sstc)
> +BOOL_FIELD(ext_smcdeleg)
> +BOOL_FIELD(ext_ssccfg)
> +BOOL_FIELD(ext_smcntrpmf)
> +BOOL_FIELD(ext_smcsrind)
> +BOOL_FIELD(ext_sscsrind)
> +BOOL_FIELD(ext_ssdbltrp)
> +BOOL_FIELD(ext_smdbltrp)
> +BOOL_FIELD(ext_svadu)
> +BOOL_FIELD(ext_svinval)
> +BOOL_FIELD(ext_svnapot)
> +BOOL_FIELD(ext_svpbmt)
> +BOOL_FIELD(ext_svvptc)
> +BOOL_FIELD(ext_svukte)
> +BOOL_FIELD(ext_zdinx)
> +BOOL_FIELD(ext_zaamo)
> +BOOL_FIELD(ext_zacas)
> +BOOL_FIELD(ext_zama16b)
> +BOOL_FIELD(ext_zabha)
> +BOOL_FIELD(ext_zalrsc)
> +BOOL_FIELD(ext_zawrs)
> +BOOL_FIELD(ext_zfa)
> +BOOL_FIELD(ext_zfbfmin)
> +BOOL_FIELD(ext_zfh)
> +BOOL_FIELD(ext_zfhmin)
> +BOOL_FIELD(ext_zfinx)
> +BOOL_FIELD(ext_zhinx)
> +BOOL_FIELD(ext_zhinxmin)
> +BOOL_FIELD(ext_zve32f)
> +BOOL_FIELD(ext_zve32x)
> +BOOL_FIELD(ext_zve64f)
> +BOOL_FIELD(ext_zve64d)
> +BOOL_FIELD(ext_zve64x)
> +BOOL_FIELD(ext_zvbb)
> +BOOL_FIELD(ext_zvbc)
> +BOOL_FIELD(ext_zvkb)
> +BOOL_FIELD(ext_zvkg)
> +BOOL_FIELD(ext_zvkned)
> +BOOL_FIELD(ext_zvknha)
> +BOOL_FIELD(ext_zvknhb)
> +BOOL_FIELD(ext_zvksed)
> +BOOL_FIELD(ext_zvksh)
> +BOOL_FIELD(ext_zvkt)
> +BOOL_FIELD(ext_zvkn)
> +BOOL_FIELD(ext_zvknc)
> +BOOL_FIELD(ext_zvkng)
> +BOOL_FIELD(ext_zvks)
> +BOOL_FIELD(ext_zvksc)
> +BOOL_FIELD(ext_zvksg)
> +BOOL_FIELD(ext_zmmul)
> +BOOL_FIELD(ext_zvfbfmin)
> +BOOL_FIELD(ext_zvfbfwma)
> +BOOL_FIELD(ext_zvfh)
> +BOOL_FIELD(ext_zvfhmin)
> +BOOL_FIELD(ext_smaia)
> +BOOL_FIELD(ext_ssaia)
> +BOOL_FIELD(ext_sscofpmf)
> +BOOL_FIELD(ext_smepmp)
> +BOOL_FIELD(ext_smrnmi)
> +BOOL_FIELD(ext_ssnpm)
> +BOOL_FIELD(ext_smnpm)
> +BOOL_FIELD(ext_smmpm)
> +BOOL_FIELD(ext_sspm)
> +BOOL_FIELD(ext_supm)
> +BOOL_FIELD(rvv_ta_all_1s)
> +BOOL_FIELD(rvv_ma_all_1s)
> +BOOL_FIELD(rvv_vl_half_avl)
> +/* Named features  */
> +BOOL_FIELD(ext_svade)
> +BOOL_FIELD(ext_zic64b)
> +BOOL_FIELD(ext_ssstateen)
> +BOOL_FIELD(ext_sha)
> +
> +/*
> + * Always 'true' booleans for named features
> + * TCG always implement/can't be user disabled,
> + * based on spec version.
> + */
> +BOOL_FIELD(has_priv_1_13)
> +BOOL_FIELD(has_priv_1_12)
> +BOOL_FIELD(has_priv_1_11)
> +
> +/* Vendor-specific custom extensions */
> +BOOL_FIELD(ext_xtheadba)
> +BOOL_FIELD(ext_xtheadbb)
> +BOOL_FIELD(ext_xtheadbs)
> +BOOL_FIELD(ext_xtheadcmo)
> +BOOL_FIELD(ext_xtheadcondmov)
> +BOOL_FIELD(ext_xtheadfmemidx)
> +BOOL_FIELD(ext_xtheadfmv)
> +BOOL_FIELD(ext_xtheadmac)
> +BOOL_FIELD(ext_xtheadmemidx)
> +BOOL_FIELD(ext_xtheadmempair)
> +BOOL_FIELD(ext_xtheadsync)
> +BOOL_FIELD(ext_XVentanaCondOps)
> +
> +BOOL_FIELD(mmu)
> +BOOL_FIELD(pmp)
> +BOOL_FIELD(debug)
> +BOOL_FIELD(misa_w)
> +
> +BOOL_FIELD(short_isa_string)
> +
> +TYPED_FIELD(uint32_t, mvendorid)
> +TYPED_FIELD(uint64_t, marchid)
> +TYPED_FIELD(uint64_t, mimpid)
> +
> +TYPED_FIELD(uint32_t, pmu_mask)
> +TYPED_FIELD(uint16_t, vlenb)
> +TYPED_FIELD(uint16_t, elen)
> +TYPED_FIELD(uint16_t, cbom_blocksize)
> +TYPED_FIELD(uint16_t, cbop_blocksize)
> +TYPED_FIELD(uint16_t, cboz_blocksize)
> +
> +#ifndef CONFIG_USER_ONLY
> +TYPED_FIELD(RISCVSATPMap, satp_mode);
> +#endif
> +
> +#undef BOOL_FIELD
> +#undef TYPED_FIELD
> --
> 2.48.1
>
>
diff mbox series

Patch

diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h
index b410b1e6038..ad02693fa66 100644
--- a/target/riscv/cpu_cfg.h
+++ b/target/riscv/cpu_cfg.h
@@ -37,163 +37,9 @@  typedef struct {
 } 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_zifencei;
-    bool ext_zicntr;
-    bool ext_zicsr;
-    bool ext_zicbom;
-    bool ext_zicbop;
-    bool ext_zicboz;
-    bool ext_zicfilp;
-    bool ext_zicfiss;
-    bool ext_zicond;
-    bool ext_zihintntl;
-    bool ext_zihintpause;
-    bool ext_zihpm;
-    bool ext_zimop;
-    bool ext_zcmop;
-    bool ext_ztso;
-    bool ext_smstateen;
-    bool ext_sstc;
-    bool ext_smcdeleg;
-    bool ext_ssccfg;
-    bool ext_smcntrpmf;
-    bool ext_smcsrind;
-    bool ext_sscsrind;
-    bool ext_ssdbltrp;
-    bool ext_smdbltrp;
-    bool ext_svadu;
-    bool ext_svinval;
-    bool ext_svnapot;
-    bool ext_svpbmt;
-    bool ext_svvptc;
-    bool ext_svukte;
-    bool ext_zdinx;
-    bool ext_zaamo;
-    bool ext_zacas;
-    bool ext_zama16b;
-    bool ext_zabha;
-    bool ext_zalrsc;
-    bool ext_zawrs;
-    bool ext_zfa;
-    bool ext_zfbfmin;
-    bool ext_zfh;
-    bool ext_zfhmin;
-    bool ext_zfinx;
-    bool ext_zhinx;
-    bool ext_zhinxmin;
-    bool ext_zve32f;
-    bool ext_zve32x;
-    bool ext_zve64f;
-    bool ext_zve64d;
-    bool ext_zve64x;
-    bool ext_zvbb;
-    bool ext_zvbc;
-    bool ext_zvkb;
-    bool ext_zvkg;
-    bool ext_zvkned;
-    bool ext_zvknha;
-    bool ext_zvknhb;
-    bool ext_zvksed;
-    bool ext_zvksh;
-    bool ext_zvkt;
-    bool ext_zvkn;
-    bool ext_zvknc;
-    bool ext_zvkng;
-    bool ext_zvks;
-    bool ext_zvksc;
-    bool ext_zvksg;
-    bool ext_zmmul;
-    bool ext_zvfbfmin;
-    bool ext_zvfbfwma;
-    bool ext_zvfh;
-    bool ext_zvfhmin;
-    bool ext_smaia;
-    bool ext_ssaia;
-    bool ext_sscofpmf;
-    bool ext_smepmp;
-    bool ext_smrnmi;
-    bool ext_ssnpm;
-    bool ext_smnpm;
-    bool ext_smmpm;
-    bool ext_sspm;
-    bool ext_supm;
-    bool rvv_ta_all_1s;
-    bool rvv_ma_all_1s;
-    bool rvv_vl_half_avl;
-
-    uint32_t mvendorid;
-    uint64_t marchid;
-    uint64_t mimpid;
-
-    /* Named features  */
-    bool ext_svade;
-    bool ext_zic64b;
-    bool ext_ssstateen;
-    bool ext_sha;
-
-    /*
-     * Always 'true' booleans for named features
-     * TCG always implement/can't be user disabled,
-     * based on spec version.
-     */
-    bool has_priv_1_13;
-    bool has_priv_1_12;
-    bool has_priv_1_11;
-
-    /* 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;
-
-    uint32_t pmu_mask;
-    uint16_t vlenb;
-    uint16_t elen;
-    uint16_t cbom_blocksize;
-    uint16_t cbop_blocksize;
-    uint16_t cboz_blocksize;
-    bool mmu;
-    bool pmp;
-    bool debug;
-    bool misa_w;
-
-    bool short_isa_string;
-
-#ifndef CONFIG_USER_ONLY
-    RISCVSATPMap satp_mode;
-#endif
+#define BOOL_FIELD(x) bool x;
+#define TYPED_FIELD(type, x) type x;
+#include "cpu_cfg_fields.h.inc"
 };
 
 typedef struct RISCVCPUConfig RISCVCPUConfig;
diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_fields.h.inc
new file mode 100644
index 00000000000..56fffb5f177
--- /dev/null
+++ b/target/riscv/cpu_cfg_fields.h.inc
@@ -0,0 +1,167 @@ 
+#ifndef BOOL_FIELD
+#define BOOL_FIELD(x)
+#endif
+#ifndef TYPED_FIELD
+#define TYPED_FIELD(type, x)
+#endif
+
+BOOL_FIELD(ext_zba)
+BOOL_FIELD(ext_zbb)
+BOOL_FIELD(ext_zbc)
+BOOL_FIELD(ext_zbkb)
+BOOL_FIELD(ext_zbkc)
+BOOL_FIELD(ext_zbkx)
+BOOL_FIELD(ext_zbs)
+BOOL_FIELD(ext_zca)
+BOOL_FIELD(ext_zcb)
+BOOL_FIELD(ext_zcd)
+BOOL_FIELD(ext_zce)
+BOOL_FIELD(ext_zcf)
+BOOL_FIELD(ext_zcmp)
+BOOL_FIELD(ext_zcmt)
+BOOL_FIELD(ext_zk)
+BOOL_FIELD(ext_zkn)
+BOOL_FIELD(ext_zknd)
+BOOL_FIELD(ext_zkne)
+BOOL_FIELD(ext_zknh)
+BOOL_FIELD(ext_zkr)
+BOOL_FIELD(ext_zks)
+BOOL_FIELD(ext_zksed)
+BOOL_FIELD(ext_zksh)
+BOOL_FIELD(ext_zkt)
+BOOL_FIELD(ext_zifencei)
+BOOL_FIELD(ext_zicntr)
+BOOL_FIELD(ext_zicsr)
+BOOL_FIELD(ext_zicbom)
+BOOL_FIELD(ext_zicbop)
+BOOL_FIELD(ext_zicboz)
+BOOL_FIELD(ext_zicfilp)
+BOOL_FIELD(ext_zicfiss)
+BOOL_FIELD(ext_zicond)
+BOOL_FIELD(ext_zihintntl)
+BOOL_FIELD(ext_zihintpause)
+BOOL_FIELD(ext_zihpm)
+BOOL_FIELD(ext_zimop)
+BOOL_FIELD(ext_zcmop)
+BOOL_FIELD(ext_ztso)
+BOOL_FIELD(ext_smstateen)
+BOOL_FIELD(ext_sstc)
+BOOL_FIELD(ext_smcdeleg)
+BOOL_FIELD(ext_ssccfg)
+BOOL_FIELD(ext_smcntrpmf)
+BOOL_FIELD(ext_smcsrind)
+BOOL_FIELD(ext_sscsrind)
+BOOL_FIELD(ext_ssdbltrp)
+BOOL_FIELD(ext_smdbltrp)
+BOOL_FIELD(ext_svadu)
+BOOL_FIELD(ext_svinval)
+BOOL_FIELD(ext_svnapot)
+BOOL_FIELD(ext_svpbmt)
+BOOL_FIELD(ext_svvptc)
+BOOL_FIELD(ext_svukte)
+BOOL_FIELD(ext_zdinx)
+BOOL_FIELD(ext_zaamo)
+BOOL_FIELD(ext_zacas)
+BOOL_FIELD(ext_zama16b)
+BOOL_FIELD(ext_zabha)
+BOOL_FIELD(ext_zalrsc)
+BOOL_FIELD(ext_zawrs)
+BOOL_FIELD(ext_zfa)
+BOOL_FIELD(ext_zfbfmin)
+BOOL_FIELD(ext_zfh)
+BOOL_FIELD(ext_zfhmin)
+BOOL_FIELD(ext_zfinx)
+BOOL_FIELD(ext_zhinx)
+BOOL_FIELD(ext_zhinxmin)
+BOOL_FIELD(ext_zve32f)
+BOOL_FIELD(ext_zve32x)
+BOOL_FIELD(ext_zve64f)
+BOOL_FIELD(ext_zve64d)
+BOOL_FIELD(ext_zve64x)
+BOOL_FIELD(ext_zvbb)
+BOOL_FIELD(ext_zvbc)
+BOOL_FIELD(ext_zvkb)
+BOOL_FIELD(ext_zvkg)
+BOOL_FIELD(ext_zvkned)
+BOOL_FIELD(ext_zvknha)
+BOOL_FIELD(ext_zvknhb)
+BOOL_FIELD(ext_zvksed)
+BOOL_FIELD(ext_zvksh)
+BOOL_FIELD(ext_zvkt)
+BOOL_FIELD(ext_zvkn)
+BOOL_FIELD(ext_zvknc)
+BOOL_FIELD(ext_zvkng)
+BOOL_FIELD(ext_zvks)
+BOOL_FIELD(ext_zvksc)
+BOOL_FIELD(ext_zvksg)
+BOOL_FIELD(ext_zmmul)
+BOOL_FIELD(ext_zvfbfmin)
+BOOL_FIELD(ext_zvfbfwma)
+BOOL_FIELD(ext_zvfh)
+BOOL_FIELD(ext_zvfhmin)
+BOOL_FIELD(ext_smaia)
+BOOL_FIELD(ext_ssaia)
+BOOL_FIELD(ext_sscofpmf)
+BOOL_FIELD(ext_smepmp)
+BOOL_FIELD(ext_smrnmi)
+BOOL_FIELD(ext_ssnpm)
+BOOL_FIELD(ext_smnpm)
+BOOL_FIELD(ext_smmpm)
+BOOL_FIELD(ext_sspm)
+BOOL_FIELD(ext_supm)
+BOOL_FIELD(rvv_ta_all_1s)
+BOOL_FIELD(rvv_ma_all_1s)
+BOOL_FIELD(rvv_vl_half_avl)
+/* Named features  */
+BOOL_FIELD(ext_svade)
+BOOL_FIELD(ext_zic64b)
+BOOL_FIELD(ext_ssstateen)
+BOOL_FIELD(ext_sha)
+
+/*
+ * Always 'true' booleans for named features
+ * TCG always implement/can't be user disabled,
+ * based on spec version.
+ */
+BOOL_FIELD(has_priv_1_13)
+BOOL_FIELD(has_priv_1_12)
+BOOL_FIELD(has_priv_1_11)
+
+/* Vendor-specific custom extensions */
+BOOL_FIELD(ext_xtheadba)
+BOOL_FIELD(ext_xtheadbb)
+BOOL_FIELD(ext_xtheadbs)
+BOOL_FIELD(ext_xtheadcmo)
+BOOL_FIELD(ext_xtheadcondmov)
+BOOL_FIELD(ext_xtheadfmemidx)
+BOOL_FIELD(ext_xtheadfmv)
+BOOL_FIELD(ext_xtheadmac)
+BOOL_FIELD(ext_xtheadmemidx)
+BOOL_FIELD(ext_xtheadmempair)
+BOOL_FIELD(ext_xtheadsync)
+BOOL_FIELD(ext_XVentanaCondOps)
+
+BOOL_FIELD(mmu)
+BOOL_FIELD(pmp)
+BOOL_FIELD(debug)
+BOOL_FIELD(misa_w)
+
+BOOL_FIELD(short_isa_string)
+
+TYPED_FIELD(uint32_t, mvendorid)
+TYPED_FIELD(uint64_t, marchid)
+TYPED_FIELD(uint64_t, mimpid)
+
+TYPED_FIELD(uint32_t, pmu_mask)
+TYPED_FIELD(uint16_t, vlenb)
+TYPED_FIELD(uint16_t, elen)
+TYPED_FIELD(uint16_t, cbom_blocksize)
+TYPED_FIELD(uint16_t, cbop_blocksize)
+TYPED_FIELD(uint16_t, cboz_blocksize)
+
+#ifndef CONFIG_USER_ONLY
+TYPED_FIELD(RISCVSATPMap, satp_mode);
+#endif
+
+#undef BOOL_FIELD
+#undef TYPED_FIELD