On Fri, Feb 27, 2026 at 1:36 PM Brian Cain <[email protected]>
wrote:

> From: Brian Cain <[email protected]>
>
> Signed-off-by: Brian Cain <[email protected]>
> ---
>  target/hexagon/cpu.h      |   5 ++
>  target/hexagon/hex_regs.h | 115 ++++++++++++++++++++++++++++++++++++++
>  2 files changed, 120 insertions(+)
>
> diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h
> index 9fd69c7453f..3619eaa1a52 100644
> --- a/target/hexagon/cpu.h
> +++ b/target/hexagon/cpu.h
> @@ -20,6 +20,11 @@
>
>  #include "fpu/softfloat-types.h"
>
> +#define NUM_GREGS 32
> +#define GREG_WRITES_MAX 2
> +#define NUM_SREGS 64
> +#define SREG_WRITES_MAX 2
> +
>

Guard with #ifndef CONFIG_USER_ONLY


>  #include "cpu-qom.h"
>  #include "exec/cpu-common.h"
>  #include "exec/cpu-defs.h"
> diff --git a/target/hexagon/hex_regs.h b/target/hexagon/hex_regs.h
> index bddfc28021c..ea8c62eba9c 100644
> --- a/target/hexagon/hex_regs.h
> +++ b/target/hexagon/hex_regs.h
> @@ -81,4 +81,119 @@ enum {
>      HEX_REG_UTIMERHI          = 63,
>  };
>
> +#ifndef CONFIG_USER_ONLY
> +
> +#define HEX_GREG_VALUES \
> +  DECL_HEX_GREG(G0,         0) \
> +  DECL_HEX_GREG(GELR,       0) \
> +  DECL_HEX_GREG(G1,         1) \
> +  DECL_HEX_GREG(GSR,        1) \
> +  DECL_HEX_GREG(G2,         2) \
> +  DECL_HEX_GREG(GOSP,       2) \
> +  DECL_HEX_GREG(G3,         3) \
> +  DECL_HEX_GREG(GBADVA,     3) \
> +  DECL_HEX_GREG(GCYCLE_1T,  10) \
> +  DECL_HEX_GREG(GCYCLE_2T,  11) \
> +  DECL_HEX_GREG(GCYCLE_3T,  12) \
> +  DECL_HEX_GREG(GCYCLE_4T,  13) \
> +  DECL_HEX_GREG(GCYCLE_5T,  14) \
> +  DECL_HEX_GREG(GCYCLE_6T,  15) \
> +  DECL_HEX_GREG(GPMUCNT4,   16) \
> +  DECL_HEX_GREG(GPMUCNT5,   17) \
> +  DECL_HEX_GREG(GPMUCNT6,   18) \
> +  DECL_HEX_GREG(GPMUCNT7,   19) \
> +  DECL_HEX_GREG(GPCYCLELO,  24) \
> +  DECL_HEX_GREG(GPCYCLEHI,  25) \
> +  DECL_HEX_GREG(GPMUCNT0,   26) \
> +  DECL_HEX_GREG(GPMUCNT1,   27) \
> +  DECL_HEX_GREG(GPMUCNT2,   28) \
> +  DECL_HEX_GREG(GPMUCNT3,   29) \
> +  DECL_HEX_GREG_DONE
> +
> +#define DECL_HEX_GREG_DONE
> +#define DECL_HEX_GREG(name, val) HEX_GREG_ ##name = val,
> +enum hex_greg {
> +    HEX_GREG_VALUES
> +};
> +#undef DECL_HEX_GREG
> +#undef DECL_HEX_GREG_DONE
> +
> +#define DECL_HEX_GREG_DONE 0
> +#define DECL_HEX_GREG(_, val) (1 << val) |
> +static inline bool greg_implemented(enum hex_greg greg)
> +{
> +#if NUM_GREGS > 32
> +#error "NUM_GREGS too large for greg_implemented(): update `impl_bitmap`"
> +#endif
> +    static int32_t impl_bitmap = HEX_GREG_VALUES;
> +    return impl_bitmap & (1 << greg);
> +}
> +#undef DECL_HEX_GREG
> +#undef DECL_HEX_GREG_DONE
> +
> +#endif /* CONFIG_USER_ONLY */
> +
> +enum {
> +    HEX_SREG_SGP0 = 0,
> +    HEX_SREG_SGP1 = 1,
> +    HEX_SREG_STID = 2,
> +    HEX_SREG_ELR = 3,
> +    HEX_SREG_BADVA0 = 4,
> +    HEX_SREG_BADVA1 = 5,
> +    HEX_SREG_SSR = 6,
> +    HEX_SREG_CCR = 7,
> +    HEX_SREG_HTID = 8,
> +    HEX_SREG_BADVA = 9,
> +    HEX_SREG_IMASK = 10,
> +    HEX_SREG_GEVB  = 11,
> +    HEX_SREG_GLB_START = 16,
> +    HEX_SREG_EVB = 16,
> +    HEX_SREG_MODECTL = 17,
> +    HEX_SREG_SYSCFG = 18,
> +    HEX_SREG_IPENDAD = 20,
> +    HEX_SREG_VID = 21,
> +    HEX_SREG_VID1 = 22,
> +    HEX_SREG_BESTWAIT = 23,
> +    HEX_SREG_IEL = 24,
> +    HEX_SREG_SCHEDCFG = 25,
> +    HEX_SREG_IAHL = 26,
> +    HEX_SREG_CFGBASE = 27,
> +    HEX_SREG_DIAG = 28,
> +    HEX_SREG_REV = 29,
> +    HEX_SREG_PCYCLELO = 30,
> +    HEX_SREG_PCYCLEHI = 31,
> +    HEX_SREG_ISDBST = 32,
> +    HEX_SREG_ISDBCFG0 = 33,
> +    HEX_SREG_ISDBCFG1 = 34,
> +    HEX_SREG_LIVELOCK = 35,
> +    HEX_SREG_BRKPTPC0 = 36,
> +    HEX_SREG_BRKPTCFG0 = 37,
> +    HEX_SREG_BRKPTPC1 = 38,
> +    HEX_SREG_BRKPTCFG1 = 39,
> +    HEX_SREG_ISDBMBXIN = 40,
> +    HEX_SREG_ISDBMBXOUT = 41,
> +    HEX_SREG_ISDBEN = 42,
> +    HEX_SREG_ISDBGPR = 43,
> +    HEX_SREG_PMUCNT4 = 44,
> +    HEX_SREG_PMUCNT5 = 45,
> +    HEX_SREG_PMUCNT6 = 46,
> +    HEX_SREG_PMUCNT7 = 47,
> +    HEX_SREG_PMUCNT0 = 48,
> +    HEX_SREG_PMUCNT1 = 49,
> +    HEX_SREG_PMUCNT2 = 50,
> +    HEX_SREG_PMUCNT3 = 51,
> +    HEX_SREG_PMUEVTCFG = 52,
> +    HEX_SREG_PMUSTID0 = 53,
> +    HEX_SREG_PMUEVTCFG1 = 54,
> +    HEX_SREG_PMUSTID1 = 55,
> +    HEX_SREG_TIMERLO = 56,
> +    HEX_SREG_TIMERHI = 57,
> +    HEX_SREG_PMUCFG = 58,
> +    HEX_SREG_S59 = 59,
> +    HEX_SREG_S60 = 60,
> +    HEX_SREG_S61 = 61,
> +    HEX_SREG_S62 = 62,
> +    HEX_SREG_S63 = 63,
> +};
>

Put these inside the #ifndef CONFIG_USER_ONLY (see #endif just above the
enum).


> +
>  #endif
> --
> 2.34.1
>
>

Reply via email to