@samitouri / QOSamiQemu / commits / bac34422c5

target/hexagon: Add guest, system reg number defs

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com> Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>

Brian Cain committed Jun 22, 2026 at 15:28 UTC bac34422c53c43e8113367ae02088336e2208eef
2 files changed +124
target/hexagon/cpu.h
+7
@@ -20,6 +20,13 @@
20
21 #include "fpu/softfloat-types.h"
22
23 +#ifndef CONFIG_USER_ONLY
24 +#define NUM_GREGS 32
25 +#define GREG_WRITES_MAX 2
26 +#define NUM_SREGS 64
27 +#define SREG_WRITES_MAX 2
28 +#endif
29 +
30 #include "cpu-qom.h"
31 #include "exec/cpu-common.h"
32 #include "exec/target_long.h"
target/hexagon/hex_regs.h
+117
@@ -81,4 +81,121 @@ enum {
81 HEX_REG_UTIMERHI = 63,
82 };
83
84 +#ifndef CONFIG_USER_ONLY
85 +
86 +#define HEX_GREG_VALUES \
87 + DECL_HEX_GREG(G0, 0) \
88 + DECL_HEX_GREG(GELR, 0) \
89 + DECL_HEX_GREG(G1, 1) \
90 + DECL_HEX_GREG(GSR, 1) \
91 + DECL_HEX_GREG(G2, 2) \
92 + DECL_HEX_GREG(GOSP, 2) \
93 + DECL_HEX_GREG(G3, 3) \
94 + DECL_HEX_GREG(GBADVA, 3) \
95 + DECL_HEX_GREG(GCYCLE_1T, 10) \
96 + DECL_HEX_GREG(GCYCLE_2T, 11) \
97 + DECL_HEX_GREG(GCYCLE_3T, 12) \
98 + DECL_HEX_GREG(GCYCLE_4T, 13) \
99 + DECL_HEX_GREG(GCYCLE_5T, 14) \
100 + DECL_HEX_GREG(GCYCLE_6T, 15) \
101 + DECL_HEX_GREG(GPMUCNT4, 16) \
102 + DECL_HEX_GREG(GPMUCNT5, 17) \
103 + DECL_HEX_GREG(GPMUCNT6, 18) \
104 + DECL_HEX_GREG(GPMUCNT7, 19) \
105 + DECL_HEX_GREG(GPCYCLELO, 24) \
106 + DECL_HEX_GREG(GPCYCLEHI, 25) \
107 + DECL_HEX_GREG(GPMUCNT0, 26) \
108 + DECL_HEX_GREG(GPMUCNT1, 27) \
109 + DECL_HEX_GREG(GPMUCNT2, 28) \
110 + DECL_HEX_GREG(GPMUCNT3, 29) \
111 + DECL_HEX_GREG_DONE
112 +
113 +#define DECL_HEX_GREG_DONE
114 +#define DECL_HEX_GREG(name, val) HEX_GREG_ ##name = val,
115 +enum hex_greg {
116 + HEX_GREG_VALUES
117 +};
118 +#undef DECL_HEX_GREG
119 +#undef DECL_HEX_GREG_DONE
120 +
121 +#define DECL_HEX_GREG_DONE 0
122 +#define DECL_HEX_GREG(_, val) (1 << val) |
123 +static inline bool greg_implemented(enum hex_greg greg)
124 +{
125 +#if NUM_GREGS > 32
126 +#error "NUM_GREGS too large for greg_implemented(): update `impl_bitmap`"
127 +#endif
128 + static int32_t impl_bitmap = HEX_GREG_VALUES;
129 + return impl_bitmap & (1 << greg);
130 +}
131 +#undef DECL_HEX_GREG
132 +#undef DECL_HEX_GREG_DONE
133 +
134 +#endif /* CONFIG_USER_ONLY */
135 +
136 +#ifndef CONFIG_USER_ONLY
137 +enum {
138 + HEX_SREG_SGP0 = 0,
139 + HEX_SREG_SGP1 = 1,
140 + HEX_SREG_STID = 2,
141 + HEX_SREG_ELR = 3,
142 + HEX_SREG_BADVA0 = 4,
143 + HEX_SREG_BADVA1 = 5,
144 + HEX_SREG_SSR = 6,
145 + HEX_SREG_CCR = 7,
146 + HEX_SREG_HTID = 8,
147 + HEX_SREG_BADVA = 9,
148 + HEX_SREG_IMASK = 10,
149 + HEX_SREG_GEVB = 11,
150 + HEX_SREG_GLB_START = 16,
151 + HEX_SREG_EVB = 16,
152 + HEX_SREG_MODECTL = 17,
153 + HEX_SREG_SYSCFG = 18,
154 + HEX_SREG_IPENDAD = 20,
155 + HEX_SREG_VID = 21,
156 + HEX_SREG_VID1 = 22,
157 + HEX_SREG_BESTWAIT = 23,
158 + HEX_SREG_IEL = 24,
159 + HEX_SREG_SCHEDCFG = 25,
160 + HEX_SREG_IAHL = 26,
161 + HEX_SREG_CFGBASE = 27,
162 + HEX_SREG_DIAG = 28,
163 + HEX_SREG_REV = 29,
164 + HEX_SREG_PCYCLELO = 30,
165 + HEX_SREG_PCYCLEHI = 31,
166 + HEX_SREG_ISDBST = 32,
167 + HEX_SREG_ISDBCFG0 = 33,
168 + HEX_SREG_ISDBCFG1 = 34,
169 + HEX_SREG_LIVELOCK = 35,
170 + HEX_SREG_BRKPTPC0 = 36,
171 + HEX_SREG_BRKPTCFG0 = 37,
172 + HEX_SREG_BRKPTPC1 = 38,
173 + HEX_SREG_BRKPTCFG1 = 39,
174 + HEX_SREG_ISDBMBXIN = 40,
175 + HEX_SREG_ISDBMBXOUT = 41,
176 + HEX_SREG_ISDBEN = 42,
177 + HEX_SREG_ISDBGPR = 43,
178 + HEX_SREG_PMUCNT4 = 44,
179 + HEX_SREG_PMUCNT5 = 45,
180 + HEX_SREG_PMUCNT6 = 46,
181 + HEX_SREG_PMUCNT7 = 47,
182 + HEX_SREG_PMUCNT0 = 48,
183 + HEX_SREG_PMUCNT1 = 49,
184 + HEX_SREG_PMUCNT2 = 50,
185 + HEX_SREG_PMUCNT3 = 51,
186 + HEX_SREG_PMUEVTCFG = 52,
187 + HEX_SREG_PMUSTID0 = 53,
188 + HEX_SREG_PMUEVTCFG1 = 54,
189 + HEX_SREG_PMUSTID1 = 55,
190 + HEX_SREG_TIMERLO = 56,
191 + HEX_SREG_TIMERHI = 57,
192 + HEX_SREG_PMUCFG = 58,
193 + HEX_SREG_S59 = 59,
194 + HEX_SREG_S60 = 60,
195 + HEX_SREG_S61 = 61,
196 + HEX_SREG_S62 = 62,
197 + HEX_SREG_S63 = 63,
198 +};
199 +#endif /* !CONFIG_USER_ONLY */
200 +
201 #endif