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