target/riscv: move RISCVCPUConfig fields to a header file

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.

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2025-02-18 11:28:23 +01:00
parent 7f9e15d82d
commit 12877e739b
2 changed files with 173 additions and 160 deletions

View file

@ -22,166 +22,9 @@
#define RISCV_CPU_CFG_H
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_smctr;
bool ext_ssctr;
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;
/* Always enabled for TCG if has_priv_1_11 */
bool ext_ziccrse;
/* 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;
int8_t max_satp_mode;
#define BOOL_FIELD(x) bool x;
#define TYPED_FIELD(type, x) type x;
#include "cpu_cfg_fields.h.inc"
};
typedef struct RISCVCPUConfig RISCVCPUConfig;

View file

@ -0,0 +1,170 @@
/*
* Required definitions before including this file:
*
* #define BOOL_FIELD(x)
* #define TYPED_FIELD(type, x)
*/
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_smctr)
BOOL_FIELD(ext_ssctr)
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)
/* Always enabled for TCG if has_priv_1_11 */
BOOL_FIELD(ext_ziccrse)
/* 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)
TYPED_FIELD(int8_t, max_satp_mode)
#undef BOOL_FIELD
#undef TYPED_FIELD