/*
 * Required definitions before including this file:
 *
 * #define BOOL_FIELD(x)
 * #define TYPED_FIELD(type, x, default)
 */

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_svrsw60t59b)
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)
BOOL_FIELD(rvv_vsetvl_x0_vill)
/* 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, 0)
TYPED_FIELD(uint64_t, marchid, 0)
TYPED_FIELD(uint64_t, mimpid, 0)

TYPED_FIELD(uint32_t, pmu_mask, 0)
TYPED_FIELD(uint16_t, vlenb, 0)
TYPED_FIELD(uint16_t, elen, 0)
TYPED_FIELD(uint16_t, cbom_blocksize, 0)
TYPED_FIELD(uint16_t, cbop_blocksize, 0)
TYPED_FIELD(uint16_t, cboz_blocksize, 0)
TYPED_FIELD(uint8_t,  pmp_regions, 0)

TYPED_FIELD(int8_t, max_satp_mode, -1)

#undef BOOL_FIELD
#undef TYPED_FIELD
