miscregs.cc (11771:764eae95bbbb) miscregs.cc (11793:ef606668d247)
1/*
2 * Copyright (c) 2010-2013, 2015-2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabe Black
38 * Ali Saidi
39 * Giacomo Gabrielli
40 */
41
1/*
2 * Copyright (c) 2010-2013, 2015-2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabe Black
38 * Ali Saidi
39 * Giacomo Gabrielli
40 */
41
42#include "arch/arm/isa.hh"
43#include "arch/arm/miscregs.hh"
42#include "arch/arm/miscregs.hh"
43
44#include "arch/arm/isa.hh"
44#include "base/misc.hh"
45#include "cpu/thread_context.hh"
46#include "sim/full_system.hh"
47
48namespace ArmISA
49{
50
51MiscRegIndex
52decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
53{
54 switch(crn) {
55 case 0:
56 switch (opc1) {
57 case 0:
58 switch (opc2) {
59 case 0:
60 switch (crm) {
61 case 0:
62 return MISCREG_DBGDIDR;
63 case 1:
64 return MISCREG_DBGDSCRint;
65 }
66 break;
67 }
68 break;
69 case 7:
70 switch (opc2) {
71 case 0:
72 switch (crm) {
73 case 0:
74 return MISCREG_JIDR;
75 }
76 break;
77 }
78 break;
79 }
80 break;
81 case 1:
82 switch (opc1) {
83 case 6:
84 switch (crm) {
85 case 0:
86 switch (opc2) {
87 case 0:
88 return MISCREG_TEEHBR;
89 }
90 break;
91 }
92 break;
93 case 7:
94 switch (crm) {
95 case 0:
96 switch (opc2) {
97 case 0:
98 return MISCREG_JOSCR;
99 }
100 break;
101 }
102 break;
103 }
104 break;
105 case 2:
106 switch (opc1) {
107 case 7:
108 switch (crm) {
109 case 0:
110 switch (opc2) {
111 case 0:
112 return MISCREG_JMCR;
113 }
114 break;
115 }
116 break;
117 }
118 break;
119 }
120 // If we get here then it must be a register that we haven't implemented
121 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
122 crn, opc1, crm, opc2);
123 return MISCREG_CP14_UNIMPL;
124}
125
126using namespace std;
127
128bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS] = {
129 // MISCREG_CPSR
130 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
131 // MISCREG_SPSR
132 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
133 // MISCREG_SPSR_FIQ
134 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
135 // MISCREG_SPSR_IRQ
136 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
137 // MISCREG_SPSR_SVC
138 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
139 // MISCREG_SPSR_MON
140 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
141 // MISCREG_SPSR_ABT
142 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
143 // MISCREG_SPSR_HYP
144 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
145 // MISCREG_SPSR_UND
146 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
147 // MISCREG_ELR_HYP
148 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
149 // MISCREG_FPSID
150 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
151 // MISCREG_FPSCR
152 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
153 // MISCREG_MVFR1
154 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
155 // MISCREG_MVFR0
156 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
157 // MISCREG_FPEXC
158 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
159
160 // Helper registers
161 // MISCREG_CPSR_MODE
162 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
163 // MISCREG_CPSR_Q
164 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
165 // MISCREG_FPSCR_Q
166 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
167 // MISCREG_FPSCR_EXC
168 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
169 // MISCREG_LOCKADDR
170 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
171 // MISCREG_LOCKFLAG
172 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
173 // MISCREG_PRRR_MAIR0
174 bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
175 // MISCREG_PRRR_MAIR0_NS
176 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
177 // MISCREG_PRRR_MAIR0_S
178 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
179 // MISCREG_NMRR_MAIR1
180 bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
181 // MISCREG_NMRR_MAIR1_NS
182 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
183 // MISCREG_NMRR_MAIR1_S
184 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
185 // MISCREG_PMXEVTYPER_PMCCFILTR
186 bitset<NUM_MISCREG_INFOS>(string("00000000000000001001")),
187 // MISCREG_SCTLR_RST
188 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
189 // MISCREG_SEV_MAILBOX
190 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
191
192 // AArch32 CP14 registers
193 // MISCREG_DBGDIDR
194 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
195 // MISCREG_DBGDSCRint
196 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
197 // MISCREG_DBGDCCINT
198 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
199 // MISCREG_DBGDTRTXint
200 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
201 // MISCREG_DBGDTRRXint
202 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
203 // MISCREG_DBGWFAR
204 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
205 // MISCREG_DBGVCR
206 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
207 // MISCREG_DBGDTRRXext
208 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
209 // MISCREG_DBGDSCRext
210 bitset<NUM_MISCREG_INFOS>(string("11111111111111000100")),
211 // MISCREG_DBGDTRTXext
212 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
213 // MISCREG_DBGOSECCR
214 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
215 // MISCREG_DBGBVR0
216 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
217 // MISCREG_DBGBVR1
218 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
219 // MISCREG_DBGBVR2
220 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
221 // MISCREG_DBGBVR3
222 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
223 // MISCREG_DBGBVR4
224 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
225 // MISCREG_DBGBVR5
226 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
227 // MISCREG_DBGBCR0
228 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
229 // MISCREG_DBGBCR1
230 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
231 // MISCREG_DBGBCR2
232 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
233 // MISCREG_DBGBCR3
234 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
235 // MISCREG_DBGBCR4
236 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
237 // MISCREG_DBGBCR5
238 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
239 // MISCREG_DBGWVR0
240 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
241 // MISCREG_DBGWVR1
242 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
243 // MISCREG_DBGWVR2
244 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
245 // MISCREG_DBGWVR3
246 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
247 // MISCREG_DBGWCR0
248 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
249 // MISCREG_DBGWCR1
250 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
251 // MISCREG_DBGWCR2
252 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
253 // MISCREG_DBGWCR3
254 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
255 // MISCREG_DBGDRAR
256 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
257 // MISCREG_DBGBXVR4
258 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
259 // MISCREG_DBGBXVR5
260 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
261 // MISCREG_DBGOSLAR
262 bitset<NUM_MISCREG_INFOS>(string("10101111111111000000")),
263 // MISCREG_DBGOSLSR
264 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
265 // MISCREG_DBGOSDLR
266 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
267 // MISCREG_DBGPRCR
268 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
269 // MISCREG_DBGDSAR
270 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
271 // MISCREG_DBGCLAIMSET
272 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
273 // MISCREG_DBGCLAIMCLR
274 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
275 // MISCREG_DBGAUTHSTATUS
276 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
277 // MISCREG_DBGDEVID2
278 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
279 // MISCREG_DBGDEVID1
280 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
281 // MISCREG_DBGDEVID0
282 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
283 // MISCREG_TEECR
284 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
285 // MISCREG_JIDR
286 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
287 // MISCREG_TEEHBR
288 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
289 // MISCREG_JOSCR
290 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
291 // MISCREG_JMCR
292 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
293
294 // AArch32 CP15 registers
295 // MISCREG_MIDR
296 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
297 // MISCREG_CTR
298 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
299 // MISCREG_TCMTR
300 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
301 // MISCREG_TLBTR
302 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
303 // MISCREG_MPIDR
304 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
305 // MISCREG_REVIDR
306 bitset<NUM_MISCREG_INFOS>(string("01010101010000000100")),
307 // MISCREG_ID_PFR0
308 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
309 // MISCREG_ID_PFR1
310 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
311 // MISCREG_ID_DFR0
312 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
313 // MISCREG_ID_AFR0
314 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
315 // MISCREG_ID_MMFR0
316 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
317 // MISCREG_ID_MMFR1
318 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
319 // MISCREG_ID_MMFR2
320 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
321 // MISCREG_ID_MMFR3
322 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
323 // MISCREG_ID_ISAR0
324 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
325 // MISCREG_ID_ISAR1
326 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
327 // MISCREG_ID_ISAR2
328 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
329 // MISCREG_ID_ISAR3
330 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
331 // MISCREG_ID_ISAR4
332 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
333 // MISCREG_ID_ISAR5
334 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
335 // MISCREG_CCSIDR
336 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
337 // MISCREG_CLIDR
338 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
339 // MISCREG_AIDR
340 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
341 // MISCREG_CSSELR
342 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
343 // MISCREG_CSSELR_NS
344 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
345 // MISCREG_CSSELR_S
346 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
347 // MISCREG_VPIDR
348 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
349 // MISCREG_VMPIDR
350 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
351 // MISCREG_SCTLR
352 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
353 // MISCREG_SCTLR_NS
354 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
355 // MISCREG_SCTLR_S
356 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
357 // MISCREG_ACTLR
358 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
359 // MISCREG_ACTLR_NS
360 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
361 // MISCREG_ACTLR_S
362 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
363 // MISCREG_CPACR
364 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
365 // MISCREG_SCR
366 bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
367 // MISCREG_SDER
368 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
369 // MISCREG_NSACR
370 bitset<NUM_MISCREG_INFOS>(string("11110111010000000001")),
371 // MISCREG_HSCTLR
372 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
373 // MISCREG_HACTLR
374 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
375 // MISCREG_HCR
376 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
377 // MISCREG_HDCR
378 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
379 // MISCREG_HCPTR
380 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
381 // MISCREG_HSTR
382 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
383 // MISCREG_HACR
384 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
385 // MISCREG_TTBR0
386 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
387 // MISCREG_TTBR0_NS
388 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
389 // MISCREG_TTBR0_S
390 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
391 // MISCREG_TTBR1
392 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
393 // MISCREG_TTBR1_NS
394 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
395 // MISCREG_TTBR1_S
396 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
397 // MISCREG_TTBCR
398 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
399 // MISCREG_TTBCR_NS
400 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
401 // MISCREG_TTBCR_S
402 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
403 // MISCREG_HTCR
404 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
405 // MISCREG_VTCR
406 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
407 // MISCREG_DACR
408 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
409 // MISCREG_DACR_NS
410 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
411 // MISCREG_DACR_S
412 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
413 // MISCREG_DFSR
414 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
415 // MISCREG_DFSR_NS
416 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
417 // MISCREG_DFSR_S
418 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
419 // MISCREG_IFSR
420 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
421 // MISCREG_IFSR_NS
422 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
423 // MISCREG_IFSR_S
424 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
425 // MISCREG_ADFSR
426 bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
427 // MISCREG_ADFSR_NS
428 bitset<NUM_MISCREG_INFOS>(string("11001100110000100100")),
429 // MISCREG_ADFSR_S
430 bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
431 // MISCREG_AIFSR
432 bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
433 // MISCREG_AIFSR_NS
434 bitset<NUM_MISCREG_INFOS>(string("11001100110000100100")),
435 // MISCREG_AIFSR_S
436 bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
437 // MISCREG_HADFSR
438 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
439 // MISCREG_HAIFSR
440 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
441 // MISCREG_HSR
442 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
443 // MISCREG_DFAR
444 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
445 // MISCREG_DFAR_NS
446 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
447 // MISCREG_DFAR_S
448 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
449 // MISCREG_IFAR
450 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
451 // MISCREG_IFAR_NS
452 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
453 // MISCREG_IFAR_S
454 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
455 // MISCREG_HDFAR
456 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
457 // MISCREG_HIFAR
458 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
459 // MISCREG_HPFAR
460 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
461 // MISCREG_ICIALLUIS
462 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
463 // MISCREG_BPIALLIS
464 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
465 // MISCREG_PAR
466 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
467 // MISCREG_PAR_NS
468 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
469 // MISCREG_PAR_S
470 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
471 // MISCREG_ICIALLU
472 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
473 // MISCREG_ICIMVAU
474 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
475 // MISCREG_CP15ISB
476 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
477 // MISCREG_BPIALL
478 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
479 // MISCREG_BPIMVA
480 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
481 // MISCREG_DCIMVAC
482 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
483 // MISCREG_DCISW
484 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
485 // MISCREG_ATS1CPR
486 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
487 // MISCREG_ATS1CPW
488 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
489 // MISCREG_ATS1CUR
490 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
491 // MISCREG_ATS1CUW
492 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
493 // MISCREG_ATS12NSOPR
494 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
495 // MISCREG_ATS12NSOPW
496 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
497 // MISCREG_ATS12NSOUR
498 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
499 // MISCREG_ATS12NSOUW
500 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
501 // MISCREG_DCCMVAC
502 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
503 // MISCREG_DCCSW
504 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
505 // MISCREG_CP15DSB
506 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
507 // MISCREG_CP15DMB
508 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
509 // MISCREG_DCCMVAU
510 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
511 // MISCREG_DCCIMVAC
512 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
513 // MISCREG_DCCISW
514 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
515 // MISCREG_ATS1HR
516 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
517 // MISCREG_ATS1HW
518 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
519 // MISCREG_TLBIALLIS
520 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
521 // MISCREG_TLBIMVAIS
522 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
523 // MISCREG_TLBIASIDIS
524 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
525 // MISCREG_TLBIMVAAIS
526 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
527 // MISCREG_TLBIMVALIS
528 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
529 // MISCREG_TLBIMVAALIS
530 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
531 // MISCREG_ITLBIALL
532 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
533 // MISCREG_ITLBIMVA
534 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
535 // MISCREG_ITLBIASID
536 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
537 // MISCREG_DTLBIALL
538 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
539 // MISCREG_DTLBIMVA
540 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
541 // MISCREG_DTLBIASID
542 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
543 // MISCREG_TLBIALL
544 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
545 // MISCREG_TLBIMVA
546 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
547 // MISCREG_TLBIASID
548 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
549 // MISCREG_TLBIMVAA
550 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
551 // MISCREG_TLBIMVAL
552 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
553 // MISCREG_TLBIMVAAL
554 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
555 // MISCREG_TLBIIPAS2IS
556 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
557 // MISCREG_TLBIIPAS2LIS
558 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
559 // MISCREG_TLBIALLHIS
560 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
561 // MISCREG_TLBIMVAHIS
562 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
563 // MISCREG_TLBIALLNSNHIS
564 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
565 // MISCREG_TLBIMVALHIS
566 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
567 // MISCREG_TLBIIPAS2
568 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
569 // MISCREG_TLBIIPAS2L
570 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
571 // MISCREG_TLBIALLH
572 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
573 // MISCREG_TLBIMVAH
574 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
575 // MISCREG_TLBIALLNSNH
576 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
577 // MISCREG_TLBIMVALH
578 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
579 // MISCREG_PMCR
580 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
581 // MISCREG_PMCNTENSET
582 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
583 // MISCREG_PMCNTENCLR
584 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
585 // MISCREG_PMOVSR
586 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
587 // MISCREG_PMSWINC
588 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
589 // MISCREG_PMSELR
590 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
591 // MISCREG_PMCEID0
592 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
593 // MISCREG_PMCEID1
594 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
595 // MISCREG_PMCCNTR
596 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
597 // MISCREG_PMXEVTYPER
598 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
599 // MISCREG_PMCCFILTR
600 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
601 // MISCREG_PMXEVCNTR
602 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
603 // MISCREG_PMUSERENR
604 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
605 // MISCREG_PMINTENSET
606 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
607 // MISCREG_PMINTENCLR
608 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
609 // MISCREG_PMOVSSET
610 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
611 // MISCREG_L2CTLR
612 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
613 // MISCREG_L2ECTLR
614 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
615 // MISCREG_PRRR
616 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
617 // MISCREG_PRRR_NS
618 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
619 // MISCREG_PRRR_S
620 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
621 // MISCREG_MAIR0
622 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
623 // MISCREG_MAIR0_NS
624 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
625 // MISCREG_MAIR0_S
626 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
627 // MISCREG_NMRR
628 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
629 // MISCREG_NMRR_NS
630 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
631 // MISCREG_NMRR_S
632 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
633 // MISCREG_MAIR1
634 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
635 // MISCREG_MAIR1_NS
636 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
637 // MISCREG_MAIR1_S
638 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
639 // MISCREG_AMAIR0
640 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
641 // MISCREG_AMAIR0_NS
642 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
643 // MISCREG_AMAIR0_S
644 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
645 // MISCREG_AMAIR1
646 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
647 // MISCREG_AMAIR1_NS
648 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
649 // MISCREG_AMAIR1_S
650 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
651 // MISCREG_HMAIR0
652 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
653 // MISCREG_HMAIR1
654 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
655 // MISCREG_HAMAIR0
656 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
657 // MISCREG_HAMAIR1
658 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
659 // MISCREG_VBAR
660 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
661 // MISCREG_VBAR_NS
662 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
663 // MISCREG_VBAR_S
664 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
665 // MISCREG_MVBAR
666 bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
667 // MISCREG_RMR
668 bitset<NUM_MISCREG_INFOS>(string("11110011000000000000")),
669 // MISCREG_ISR
670 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
671 // MISCREG_HVBAR
672 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
673 // MISCREG_FCSEIDR
674 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
675 // MISCREG_CONTEXTIDR
676 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
677 // MISCREG_CONTEXTIDR_NS
678 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
679 // MISCREG_CONTEXTIDR_S
680 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
681 // MISCREG_TPIDRURW
682 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
683 // MISCREG_TPIDRURW_NS
684 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
685 // MISCREG_TPIDRURW_S
686 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
687 // MISCREG_TPIDRURO
688 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
689 // MISCREG_TPIDRURO_NS
690 bitset<NUM_MISCREG_INFOS>(string("11001100110101100001")),
691 // MISCREG_TPIDRURO_S
692 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
693 // MISCREG_TPIDRPRW
694 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
695 // MISCREG_TPIDRPRW_NS
696 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
697 // MISCREG_TPIDRPRW_S
698 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
699 // MISCREG_HTPIDR
700 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
701 // MISCREG_CNTFRQ
702 bitset<NUM_MISCREG_INFOS>(string("11110101010101000011")),
703 // MISCREG_CNTKCTL
704 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
705 // MISCREG_CNTP_TVAL
706 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
707 // MISCREG_CNTP_TVAL_NS
708 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
709 // MISCREG_CNTP_TVAL_S
710 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
711 // MISCREG_CNTP_CTL
712 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
713 // MISCREG_CNTP_CTL_NS
714 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
715 // MISCREG_CNTP_CTL_S
716 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
717 // MISCREG_CNTV_TVAL
718 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
719 // MISCREG_CNTV_CTL
720 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
721 // MISCREG_CNTHCTL
722 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
723 // MISCREG_CNTHP_TVAL
724 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
725 // MISCREG_CNTHP_CTL
726 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
727 // MISCREG_IL1DATA0
728 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
729 // MISCREG_IL1DATA1
730 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
731 // MISCREG_IL1DATA2
732 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
733 // MISCREG_IL1DATA3
734 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
735 // MISCREG_DL1DATA0
736 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
737 // MISCREG_DL1DATA1
738 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
739 // MISCREG_DL1DATA2
740 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
741 // MISCREG_DL1DATA3
742 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
743 // MISCREG_DL1DATA4
744 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
745 // MISCREG_RAMINDEX
746 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
747 // MISCREG_L2ACTLR
748 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
749 // MISCREG_CBAR
750 bitset<NUM_MISCREG_INFOS>(string("01010101010000000000")),
751 // MISCREG_HTTBR
752 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
753 // MISCREG_VTTBR
754 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
755 // MISCREG_CNTPCT
756 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
757 // MISCREG_CNTVCT
758 bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
759 // MISCREG_CNTP_CVAL
760 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
761 // MISCREG_CNTP_CVAL_NS
762 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
763 // MISCREG_CNTP_CVAL_S
764 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
765 // MISCREG_CNTV_CVAL
766 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
767 // MISCREG_CNTVOFF
768 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
769 // MISCREG_CNTHP_CVAL
770 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
771 // MISCREG_CPUMERRSR
772 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
773 // MISCREG_L2MERRSR
774 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
775
776 // AArch64 registers (Op0=2)
777 // MISCREG_MDCCINT_EL1
778 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
779 // MISCREG_OSDTRRX_EL1
780 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
781 // MISCREG_MDSCR_EL1
782 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
783 // MISCREG_OSDTRTX_EL1
784 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
785 // MISCREG_OSECCR_EL1
786 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
787 // MISCREG_DBGBVR0_EL1
788 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
789 // MISCREG_DBGBVR1_EL1
790 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
791 // MISCREG_DBGBVR2_EL1
792 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
793 // MISCREG_DBGBVR3_EL1
794 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
795 // MISCREG_DBGBVR4_EL1
796 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
797 // MISCREG_DBGBVR5_EL1
798 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
799 // MISCREG_DBGBCR0_EL1
800 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
801 // MISCREG_DBGBCR1_EL1
802 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
803 // MISCREG_DBGBCR2_EL1
804 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
805 // MISCREG_DBGBCR3_EL1
806 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
807 // MISCREG_DBGBCR4_EL1
808 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
809 // MISCREG_DBGBCR5_EL1
810 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
811 // MISCREG_DBGWVR0_EL1
812 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
813 // MISCREG_DBGWVR1_EL1
814 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
815 // MISCREG_DBGWVR2_EL1
816 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
817 // MISCREG_DBGWVR3_EL1
818 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
819 // MISCREG_DBGWCR0_EL1
820 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
821 // MISCREG_DBGWCR1_EL1
822 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
823 // MISCREG_DBGWCR2_EL1
824 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
825 // MISCREG_DBGWCR3_EL1
826 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
827 // MISCREG_MDCCSR_EL0
828 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
829 // MISCREG_MDDTR_EL0
830 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
831 // MISCREG_MDDTRTX_EL0
832 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
833 // MISCREG_MDDTRRX_EL0
834 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
835 // MISCREG_DBGVCR32_EL2
836 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
837 // MISCREG_MDRAR_EL1
838 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
839 // MISCREG_OSLAR_EL1
840 bitset<NUM_MISCREG_INFOS>(string("10101111111111000001")),
841 // MISCREG_OSLSR_EL1
842 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
843 // MISCREG_OSDLR_EL1
844 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
845 // MISCREG_DBGPRCR_EL1
846 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
847 // MISCREG_DBGCLAIMSET_EL1
848 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
849 // MISCREG_DBGCLAIMCLR_EL1
850 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
851 // MISCREG_DBGAUTHSTATUS_EL1
852 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
853 // MISCREG_TEECR32_EL1
854 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
855 // MISCREG_TEEHBR32_EL1
856 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
857
858 // AArch64 registers (Op0=1,3)
859 // MISCREG_MIDR_EL1
860 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
861 // MISCREG_MPIDR_EL1
862 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
863 // MISCREG_REVIDR_EL1
864 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
865 // MISCREG_ID_PFR0_EL1
866 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
867 // MISCREG_ID_PFR1_EL1
868 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
869 // MISCREG_ID_DFR0_EL1
870 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
871 // MISCREG_ID_AFR0_EL1
872 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
873 // MISCREG_ID_MMFR0_EL1
874 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
875 // MISCREG_ID_MMFR1_EL1
876 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
877 // MISCREG_ID_MMFR2_EL1
878 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
879 // MISCREG_ID_MMFR3_EL1
880 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
881 // MISCREG_ID_ISAR0_EL1
882 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
883 // MISCREG_ID_ISAR1_EL1
884 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
885 // MISCREG_ID_ISAR2_EL1
886 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
887 // MISCREG_ID_ISAR3_EL1
888 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
889 // MISCREG_ID_ISAR4_EL1
890 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
891 // MISCREG_ID_ISAR5_EL1
892 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
893 // MISCREG_MVFR0_EL1
894 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
895 // MISCREG_MVFR1_EL1
896 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
897 // MISCREG_MVFR2_EL1
898 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
899 // MISCREG_ID_AA64PFR0_EL1
900 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
901 // MISCREG_ID_AA64PFR1_EL1
902 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
903 // MISCREG_ID_AA64DFR0_EL1
904 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
905 // MISCREG_ID_AA64DFR1_EL1
906 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
907 // MISCREG_ID_AA64AFR0_EL1
908 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
909 // MISCREG_ID_AA64AFR1_EL1
910 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
911 // MISCREG_ID_AA64ISAR0_EL1
912 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
913 // MISCREG_ID_AA64ISAR1_EL1
914 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
915 // MISCREG_ID_AA64MMFR0_EL1
916 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
917 // MISCREG_ID_AA64MMFR1_EL1
918 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
919 // MISCREG_CCSIDR_EL1
920 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
921 // MISCREG_CLIDR_EL1
922 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
923 // MISCREG_AIDR_EL1
924 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
925 // MISCREG_CSSELR_EL1
926 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
927 // MISCREG_CTR_EL0
928 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
929 // MISCREG_DCZID_EL0
930 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
931 // MISCREG_VPIDR_EL2
932 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
933 // MISCREG_VMPIDR_EL2
934 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
935 // MISCREG_SCTLR_EL1
936 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
937 // MISCREG_ACTLR_EL1
938 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
939 // MISCREG_CPACR_EL1
940 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
941 // MISCREG_SCTLR_EL2
942 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
943 // MISCREG_ACTLR_EL2
944 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
945 // MISCREG_HCR_EL2
946 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
947 // MISCREG_MDCR_EL2
948 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
949 // MISCREG_CPTR_EL2
950 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
951 // MISCREG_HSTR_EL2
952 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
953 // MISCREG_HACR_EL2
954 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
955 // MISCREG_SCTLR_EL3
956 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
957 // MISCREG_ACTLR_EL3
958 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
959 // MISCREG_SCR_EL3
960 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
961 // MISCREG_SDER32_EL3
962 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
963 // MISCREG_CPTR_EL3
964 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
965 // MISCREG_MDCR_EL3
966 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
967 // MISCREG_TTBR0_EL1
968 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
969 // MISCREG_TTBR1_EL1
970 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
971 // MISCREG_TCR_EL1
972 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
973 // MISCREG_TTBR0_EL2
974 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
975 // MISCREG_TCR_EL2
976 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
977 // MISCREG_VTTBR_EL2
978 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
979 // MISCREG_VTCR_EL2
980 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
981 // MISCREG_TTBR0_EL3
982 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
983 // MISCREG_TCR_EL3
984 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
985 // MISCREG_DACR32_EL2
986 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
987 // MISCREG_SPSR_EL1
988 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
989 // MISCREG_ELR_EL1
990 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
991 // MISCREG_SP_EL0
992 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
993 // MISCREG_SPSEL
994 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
995 // MISCREG_CURRENTEL
996 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
997 // MISCREG_NZCV
998 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
999 // MISCREG_DAIF
1000 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1001 // MISCREG_FPCR
1002 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1003 // MISCREG_FPSR
1004 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1005 // MISCREG_DSPSR_EL0
1006 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1007 // MISCREG_DLR_EL0
1008 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1009 // MISCREG_SPSR_EL2
1010 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1011 // MISCREG_ELR_EL2
1012 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1013 // MISCREG_SP_EL1
1014 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1015 // MISCREG_SPSR_IRQ_AA64
1016 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1017 // MISCREG_SPSR_ABT_AA64
1018 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1019 // MISCREG_SPSR_UND_AA64
1020 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1021 // MISCREG_SPSR_FIQ_AA64
1022 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1023 // MISCREG_SPSR_EL3
1024 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1025 // MISCREG_ELR_EL3
1026 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1027 // MISCREG_SP_EL2
1028 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1029 // MISCREG_AFSR0_EL1
1030 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1031 // MISCREG_AFSR1_EL1
1032 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1033 // MISCREG_ESR_EL1
1034 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1035 // MISCREG_IFSR32_EL2
1036 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1037 // MISCREG_AFSR0_EL2
1038 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1039 // MISCREG_AFSR1_EL2
1040 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1041 // MISCREG_ESR_EL2
1042 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1043 // MISCREG_FPEXC32_EL2
1044 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1045 // MISCREG_AFSR0_EL3
1046 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1047 // MISCREG_AFSR1_EL3
1048 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1049 // MISCREG_ESR_EL3
1050 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1051 // MISCREG_FAR_EL1
1052 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1053 // MISCREG_FAR_EL2
1054 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1055 // MISCREG_HPFAR_EL2
1056 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1057 // MISCREG_FAR_EL3
1058 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1059 // MISCREG_IC_IALLUIS
1060 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1061 // MISCREG_PAR_EL1
1062 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1063 // MISCREG_IC_IALLU
1064 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1065 // MISCREG_DC_IVAC_Xt
1066 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1067 // MISCREG_DC_ISW_Xt
1068 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1069 // MISCREG_AT_S1E1R_Xt
1070 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1071 // MISCREG_AT_S1E1W_Xt
1072 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1073 // MISCREG_AT_S1E0R_Xt
1074 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1075 // MISCREG_AT_S1E0W_Xt
1076 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1077 // MISCREG_DC_CSW_Xt
1078 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1079 // MISCREG_DC_CISW_Xt
1080 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1081 // MISCREG_DC_ZVA_Xt
1082 bitset<NUM_MISCREG_INFOS>(string("10101010100010000101")),
1083 // MISCREG_IC_IVAU_Xt
1084 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
1085 // MISCREG_DC_CVAC_Xt
1086 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1087 // MISCREG_DC_CVAU_Xt
1088 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1089 // MISCREG_DC_CIVAC_Xt
1090 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1091 // MISCREG_AT_S1E2R_Xt
1092 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1093 // MISCREG_AT_S1E2W_Xt
1094 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1095 // MISCREG_AT_S12E1R_Xt
1096 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1097 // MISCREG_AT_S12E1W_Xt
1098 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1099 // MISCREG_AT_S12E0R_Xt
1100 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1101 // MISCREG_AT_S12E0W_Xt
1102 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1103 // MISCREG_AT_S1E3R_Xt
1104 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1105 // MISCREG_AT_S1E3W_Xt
1106 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1107 // MISCREG_TLBI_VMALLE1IS
1108 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1109 // MISCREG_TLBI_VAE1IS_Xt
1110 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1111 // MISCREG_TLBI_ASIDE1IS_Xt
1112 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1113 // MISCREG_TLBI_VAAE1IS_Xt
1114 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1115 // MISCREG_TLBI_VALE1IS_Xt
1116 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1117 // MISCREG_TLBI_VAALE1IS_Xt
1118 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1119 // MISCREG_TLBI_VMALLE1
1120 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1121 // MISCREG_TLBI_VAE1_Xt
1122 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1123 // MISCREG_TLBI_ASIDE1_Xt
1124 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1125 // MISCREG_TLBI_VAAE1_Xt
1126 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1127 // MISCREG_TLBI_VALE1_Xt
1128 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1129 // MISCREG_TLBI_VAALE1_Xt
1130 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1131 // MISCREG_TLBI_IPAS2E1IS_Xt
1132 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1133 // MISCREG_TLBI_IPAS2LE1IS_Xt
1134 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1135 // MISCREG_TLBI_ALLE2IS
1136 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1137 // MISCREG_TLBI_VAE2IS_Xt
1138 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1139 // MISCREG_TLBI_ALLE1IS
1140 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1141 // MISCREG_TLBI_VALE2IS_Xt
1142 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1143 // MISCREG_TLBI_VMALLS12E1IS
1144 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1145 // MISCREG_TLBI_IPAS2E1_Xt
1146 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1147 // MISCREG_TLBI_IPAS2LE1_Xt
1148 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1149 // MISCREG_TLBI_ALLE2
1150 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1151 // MISCREG_TLBI_VAE2_Xt
1152 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1153 // MISCREG_TLBI_ALLE1
1154 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1155 // MISCREG_TLBI_VALE2_Xt
1156 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1157 // MISCREG_TLBI_VMALLS12E1
1158 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1159 // MISCREG_TLBI_ALLE3IS
1160 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1161 // MISCREG_TLBI_VAE3IS_Xt
1162 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1163 // MISCREG_TLBI_VALE3IS_Xt
1164 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1165 // MISCREG_TLBI_ALLE3
1166 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1167 // MISCREG_TLBI_VAE3_Xt
1168 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1169 // MISCREG_TLBI_VALE3_Xt
1170 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1171 // MISCREG_PMINTENSET_EL1
1172 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1173 // MISCREG_PMINTENCLR_EL1
1174 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1175 // MISCREG_PMCR_EL0
1176 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1177 // MISCREG_PMCNTENSET_EL0
1178 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1179 // MISCREG_PMCNTENCLR_EL0
1180 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1181 // MISCREG_PMOVSCLR_EL0
1182 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1183 // MISCREG_PMSWINC_EL0
1184 bitset<NUM_MISCREG_INFOS>(string("10101010101111000001")),
1185 // MISCREG_PMSELR_EL0
1186 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1187 // MISCREG_PMCEID0_EL0
1188 bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
1189 // MISCREG_PMCEID1_EL0
1190 bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
1191 // MISCREG_PMCCNTR_EL0
1192 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1193 // MISCREG_PMXEVTYPER_EL0
1194 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1195 // MISCREG_PMCCFILTR_EL0
1196 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1197 // MISCREG_PMXEVCNTR_EL0
1198 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1199 // MISCREG_PMUSERENR_EL0
1200 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
1201 // MISCREG_PMOVSSET_EL0
1202 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1203 // MISCREG_MAIR_EL1
1204 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1205 // MISCREG_AMAIR_EL1
1206 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1207 // MISCREG_MAIR_EL2
1208 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1209 // MISCREG_AMAIR_EL2
1210 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1211 // MISCREG_MAIR_EL3
1212 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1213 // MISCREG_AMAIR_EL3
1214 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1215 // MISCREG_L2CTLR_EL1
1216 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1217 // MISCREG_L2ECTLR_EL1
1218 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1219 // MISCREG_VBAR_EL1
1220 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1221 // MISCREG_RVBAR_EL1
1222 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1223 // MISCREG_ISR_EL1
1224 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1225 // MISCREG_VBAR_EL2
1226 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1227 // MISCREG_RVBAR_EL2
1228 bitset<NUM_MISCREG_INFOS>(string("01010100000000000001")),
1229 // MISCREG_VBAR_EL3
1230 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1231 // MISCREG_RVBAR_EL3
1232 bitset<NUM_MISCREG_INFOS>(string("01010000000000000001")),
1233 // MISCREG_RMR_EL3
1234 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1235 // MISCREG_CONTEXTIDR_EL1
1236 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1237 // MISCREG_TPIDR_EL1
1238 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1239 // MISCREG_TPIDR_EL0
1240 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1241 // MISCREG_TPIDRRO_EL0
1242 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
1243 // MISCREG_TPIDR_EL2
1244 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1245 // MISCREG_TPIDR_EL3
1246 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1247 // MISCREG_CNTKCTL_EL1
1248 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1249 // MISCREG_CNTFRQ_EL0
1250 bitset<NUM_MISCREG_INFOS>(string("11110101010101000001")),
1251 // MISCREG_CNTPCT_EL0
1252 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
1253 // MISCREG_CNTVCT_EL0
1254 bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
1255 // MISCREG_CNTP_TVAL_EL0
1256 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1257 // MISCREG_CNTP_CTL_EL0
1258 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1259 // MISCREG_CNTP_CVAL_EL0
1260 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1261 // MISCREG_CNTV_TVAL_EL0
1262 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1263 // MISCREG_CNTV_CTL_EL0
1264 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1265 // MISCREG_CNTV_CVAL_EL0
1266 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1267 // MISCREG_PMEVCNTR0_EL0
1268 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1269 // MISCREG_PMEVCNTR1_EL0
1270 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1271 // MISCREG_PMEVCNTR2_EL0
1272 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1273 // MISCREG_PMEVCNTR3_EL0
1274 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1275 // MISCREG_PMEVCNTR4_EL0
1276 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1277 // MISCREG_PMEVCNTR5_EL0
1278 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1279 // MISCREG_PMEVTYPER0_EL0
1280 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1281 // MISCREG_PMEVTYPER1_EL0
1282 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1283 // MISCREG_PMEVTYPER2_EL0
1284 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1285 // MISCREG_PMEVTYPER3_EL0
1286 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1287 // MISCREG_PMEVTYPER4_EL0
1288 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1289 // MISCREG_PMEVTYPER5_EL0
1290 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1291 // MISCREG_CNTVOFF_EL2
1292 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1293 // MISCREG_CNTHCTL_EL2
1294 bitset<NUM_MISCREG_INFOS>(string("01111000000000000100")),
1295 // MISCREG_CNTHP_TVAL_EL2
1296 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1297 // MISCREG_CNTHP_CTL_EL2
1298 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1299 // MISCREG_CNTHP_CVAL_EL2
1300 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1301 // MISCREG_CNTPS_TVAL_EL1
1302 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1303 // MISCREG_CNTPS_CTL_EL1
1304 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1305 // MISCREG_CNTPS_CVAL_EL1
1306 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1307 // MISCREG_IL1DATA0_EL1
1308 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1309 // MISCREG_IL1DATA1_EL1
1310 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1311 // MISCREG_IL1DATA2_EL1
1312 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1313 // MISCREG_IL1DATA3_EL1
1314 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1315 // MISCREG_DL1DATA0_EL1
1316 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1317 // MISCREG_DL1DATA1_EL1
1318 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1319 // MISCREG_DL1DATA2_EL1
1320 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1321 // MISCREG_DL1DATA3_EL1
1322 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1323 // MISCREG_DL1DATA4_EL1
1324 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1325 // MISCREG_L2ACTLR_EL1
1326 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1327 // MISCREG_CPUACTLR_EL1
1328 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1329 // MISCREG_CPUECTLR_EL1
1330 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1331 // MISCREG_CPUMERRSR_EL1
1332 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1333 // MISCREG_L2MERRSR_EL1
1334 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
1335 // MISCREG_CBAR_EL1
1336 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1337 // MISCREG_CONTEXTIDR_EL2
1338 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1339
1340 // Dummy registers
1341 // MISCREG_NOP
1342 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1343 // MISCREG_RAZ
1344 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1345 // MISCREG_CP14_UNIMPL
1346 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1347 // MISCREG_CP15_UNIMPL
1348 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1349 // MISCREG_A64_UNIMPL
1350 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1351 // MISCREG_UNKNOWN
1352 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001"))
1353};
1354
1355MiscRegIndex
1356decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
1357{
1358 switch (crn) {
1359 case 0:
1360 switch (opc1) {
1361 case 0:
1362 switch (crm) {
1363 case 0:
1364 switch (opc2) {
1365 case 1:
1366 return MISCREG_CTR;
1367 case 2:
1368 return MISCREG_TCMTR;
1369 case 3:
1370 return MISCREG_TLBTR;
1371 case 5:
1372 return MISCREG_MPIDR;
1373 case 6:
1374 return MISCREG_REVIDR;
1375 default:
1376 return MISCREG_MIDR;
1377 }
1378 break;
1379 case 1:
1380 switch (opc2) {
1381 case 0:
1382 return MISCREG_ID_PFR0;
1383 case 1:
1384 return MISCREG_ID_PFR1;
1385 case 2:
1386 return MISCREG_ID_DFR0;
1387 case 3:
1388 return MISCREG_ID_AFR0;
1389 case 4:
1390 return MISCREG_ID_MMFR0;
1391 case 5:
1392 return MISCREG_ID_MMFR1;
1393 case 6:
1394 return MISCREG_ID_MMFR2;
1395 case 7:
1396 return MISCREG_ID_MMFR3;
1397 }
1398 break;
1399 case 2:
1400 switch (opc2) {
1401 case 0:
1402 return MISCREG_ID_ISAR0;
1403 case 1:
1404 return MISCREG_ID_ISAR1;
1405 case 2:
1406 return MISCREG_ID_ISAR2;
1407 case 3:
1408 return MISCREG_ID_ISAR3;
1409 case 4:
1410 return MISCREG_ID_ISAR4;
1411 case 5:
1412 return MISCREG_ID_ISAR5;
1413 case 6:
1414 case 7:
1415 return MISCREG_RAZ; // read as zero
1416 }
1417 break;
1418 default:
1419 return MISCREG_RAZ; // read as zero
1420 }
1421 break;
1422 case 1:
1423 if (crm == 0) {
1424 switch (opc2) {
1425 case 0:
1426 return MISCREG_CCSIDR;
1427 case 1:
1428 return MISCREG_CLIDR;
1429 case 7:
1430 return MISCREG_AIDR;
1431 }
1432 }
1433 break;
1434 case 2:
1435 if (crm == 0 && opc2 == 0) {
1436 return MISCREG_CSSELR;
1437 }
1438 break;
1439 case 4:
1440 if (crm == 0) {
1441 if (opc2 == 0)
1442 return MISCREG_VPIDR;
1443 else if (opc2 == 5)
1444 return MISCREG_VMPIDR;
1445 }
1446 break;
1447 }
1448 break;
1449 case 1:
1450 if (opc1 == 0) {
1451 if (crm == 0) {
1452 switch (opc2) {
1453 case 0:
1454 return MISCREG_SCTLR;
1455 case 1:
1456 return MISCREG_ACTLR;
1457 case 0x2:
1458 return MISCREG_CPACR;
1459 }
1460 } else if (crm == 1) {
1461 switch (opc2) {
1462 case 0:
1463 return MISCREG_SCR;
1464 case 1:
1465 return MISCREG_SDER;
1466 case 2:
1467 return MISCREG_NSACR;
1468 }
1469 }
1470 } else if (opc1 == 4) {
1471 if (crm == 0) {
1472 if (opc2 == 0)
1473 return MISCREG_HSCTLR;
1474 else if (opc2 == 1)
1475 return MISCREG_HACTLR;
1476 } else if (crm == 1) {
1477 switch (opc2) {
1478 case 0:
1479 return MISCREG_HCR;
1480 case 1:
1481 return MISCREG_HDCR;
1482 case 2:
1483 return MISCREG_HCPTR;
1484 case 3:
1485 return MISCREG_HSTR;
1486 case 7:
1487 return MISCREG_HACR;
1488 }
1489 }
1490 }
1491 break;
1492 case 2:
1493 if (opc1 == 0 && crm == 0) {
1494 switch (opc2) {
1495 case 0:
1496 return MISCREG_TTBR0;
1497 case 1:
1498 return MISCREG_TTBR1;
1499 case 2:
1500 return MISCREG_TTBCR;
1501 }
1502 } else if (opc1 == 4) {
1503 if (crm == 0 && opc2 == 2)
1504 return MISCREG_HTCR;
1505 else if (crm == 1 && opc2 == 2)
1506 return MISCREG_VTCR;
1507 }
1508 break;
1509 case 3:
1510 if (opc1 == 0 && crm == 0 && opc2 == 0) {
1511 return MISCREG_DACR;
1512 }
1513 break;
1514 case 5:
1515 if (opc1 == 0) {
1516 if (crm == 0) {
1517 if (opc2 == 0) {
1518 return MISCREG_DFSR;
1519 } else if (opc2 == 1) {
1520 return MISCREG_IFSR;
1521 }
1522 } else if (crm == 1) {
1523 if (opc2 == 0) {
1524 return MISCREG_ADFSR;
1525 } else if (opc2 == 1) {
1526 return MISCREG_AIFSR;
1527 }
1528 }
1529 } else if (opc1 == 4) {
1530 if (crm == 1) {
1531 if (opc2 == 0)
1532 return MISCREG_HADFSR;
1533 else if (opc2 == 1)
1534 return MISCREG_HAIFSR;
1535 } else if (crm == 2 && opc2 == 0) {
1536 return MISCREG_HSR;
1537 }
1538 }
1539 break;
1540 case 6:
1541 if (opc1 == 0 && crm == 0) {
1542 switch (opc2) {
1543 case 0:
1544 return MISCREG_DFAR;
1545 case 2:
1546 return MISCREG_IFAR;
1547 }
1548 } else if (opc1 == 4 && crm == 0) {
1549 switch (opc2) {
1550 case 0:
1551 return MISCREG_HDFAR;
1552 case 2:
1553 return MISCREG_HIFAR;
1554 case 4:
1555 return MISCREG_HPFAR;
1556 }
1557 }
1558 break;
1559 case 7:
1560 if (opc1 == 0) {
1561 switch (crm) {
1562 case 0:
1563 if (opc2 == 4) {
1564 return MISCREG_NOP;
1565 }
1566 break;
1567 case 1:
1568 switch (opc2) {
1569 case 0:
1570 return MISCREG_ICIALLUIS;
1571 case 6:
1572 return MISCREG_BPIALLIS;
1573 }
1574 break;
1575 case 4:
1576 if (opc2 == 0) {
1577 return MISCREG_PAR;
1578 }
1579 break;
1580 case 5:
1581 switch (opc2) {
1582 case 0:
1583 return MISCREG_ICIALLU;
1584 case 1:
1585 return MISCREG_ICIMVAU;
1586 case 4:
1587 return MISCREG_CP15ISB;
1588 case 6:
1589 return MISCREG_BPIALL;
1590 case 7:
1591 return MISCREG_BPIMVA;
1592 }
1593 break;
1594 case 6:
1595 if (opc2 == 1) {
1596 return MISCREG_DCIMVAC;
1597 } else if (opc2 == 2) {
1598 return MISCREG_DCISW;
1599 }
1600 break;
1601 case 8:
1602 switch (opc2) {
1603 case 0:
1604 return MISCREG_ATS1CPR;
1605 case 1:
1606 return MISCREG_ATS1CPW;
1607 case 2:
1608 return MISCREG_ATS1CUR;
1609 case 3:
1610 return MISCREG_ATS1CUW;
1611 case 4:
1612 return MISCREG_ATS12NSOPR;
1613 case 5:
1614 return MISCREG_ATS12NSOPW;
1615 case 6:
1616 return MISCREG_ATS12NSOUR;
1617 case 7:
1618 return MISCREG_ATS12NSOUW;
1619 }
1620 break;
1621 case 10:
1622 switch (opc2) {
1623 case 1:
1624 return MISCREG_DCCMVAC;
1625 case 2:
1626 return MISCREG_DCCSW;
1627 case 4:
1628 return MISCREG_CP15DSB;
1629 case 5:
1630 return MISCREG_CP15DMB;
1631 }
1632 break;
1633 case 11:
1634 if (opc2 == 1) {
1635 return MISCREG_DCCMVAU;
1636 }
1637 break;
1638 case 13:
1639 if (opc2 == 1) {
1640 return MISCREG_NOP;
1641 }
1642 break;
1643 case 14:
1644 if (opc2 == 1) {
1645 return MISCREG_DCCIMVAC;
1646 } else if (opc2 == 2) {
1647 return MISCREG_DCCISW;
1648 }
1649 break;
1650 }
1651 } else if (opc1 == 4 && crm == 8) {
1652 if (opc2 == 0)
1653 return MISCREG_ATS1HR;
1654 else if (opc2 == 1)
1655 return MISCREG_ATS1HW;
1656 }
1657 break;
1658 case 8:
1659 if (opc1 == 0) {
1660 switch (crm) {
1661 case 3:
1662 switch (opc2) {
1663 case 0:
1664 return MISCREG_TLBIALLIS;
1665 case 1:
1666 return MISCREG_TLBIMVAIS;
1667 case 2:
1668 return MISCREG_TLBIASIDIS;
1669 case 3:
1670 return MISCREG_TLBIMVAAIS;
1671 }
1672 break;
1673 case 5:
1674 switch (opc2) {
1675 case 0:
1676 return MISCREG_ITLBIALL;
1677 case 1:
1678 return MISCREG_ITLBIMVA;
1679 case 2:
1680 return MISCREG_ITLBIASID;
1681 }
1682 break;
1683 case 6:
1684 switch (opc2) {
1685 case 0:
1686 return MISCREG_DTLBIALL;
1687 case 1:
1688 return MISCREG_DTLBIMVA;
1689 case 2:
1690 return MISCREG_DTLBIASID;
1691 }
1692 break;
1693 case 7:
1694 switch (opc2) {
1695 case 0:
1696 return MISCREG_TLBIALL;
1697 case 1:
1698 return MISCREG_TLBIMVA;
1699 case 2:
1700 return MISCREG_TLBIASID;
1701 case 3:
1702 return MISCREG_TLBIMVAA;
1703 }
1704 break;
1705 }
1706 } else if (opc1 == 4) {
1707 if (crm == 3) {
1708 switch (opc2) {
1709 case 0:
1710 return MISCREG_TLBIALLHIS;
1711 case 1:
1712 return MISCREG_TLBIMVAHIS;
1713 case 4:
1714 return MISCREG_TLBIALLNSNHIS;
1715 }
1716 } else if (crm == 7) {
1717 switch (opc2) {
1718 case 0:
1719 return MISCREG_TLBIALLH;
1720 case 1:
1721 return MISCREG_TLBIMVAH;
1722 case 4:
1723 return MISCREG_TLBIALLNSNH;
1724 }
1725 }
1726 }
1727 break;
1728 case 9:
1729 if (opc1 == 0) {
1730 switch (crm) {
1731 case 12:
1732 switch (opc2) {
1733 case 0:
1734 return MISCREG_PMCR;
1735 case 1:
1736 return MISCREG_PMCNTENSET;
1737 case 2:
1738 return MISCREG_PMCNTENCLR;
1739 case 3:
1740 return MISCREG_PMOVSR;
1741 case 4:
1742 return MISCREG_PMSWINC;
1743 case 5:
1744 return MISCREG_PMSELR;
1745 case 6:
1746 return MISCREG_PMCEID0;
1747 case 7:
1748 return MISCREG_PMCEID1;
1749 }
1750 break;
1751 case 13:
1752 switch (opc2) {
1753 case 0:
1754 return MISCREG_PMCCNTR;
1755 case 1:
1756 // Selector is PMSELR.SEL
1757 return MISCREG_PMXEVTYPER_PMCCFILTR;
1758 case 2:
1759 return MISCREG_PMXEVCNTR;
1760 }
1761 break;
1762 case 14:
1763 switch (opc2) {
1764 case 0:
1765 return MISCREG_PMUSERENR;
1766 case 1:
1767 return MISCREG_PMINTENSET;
1768 case 2:
1769 return MISCREG_PMINTENCLR;
1770 case 3:
1771 return MISCREG_PMOVSSET;
1772 }
1773 break;
1774 }
1775 } else if (opc1 == 1) {
1776 switch (crm) {
1777 case 0:
1778 switch (opc2) {
1779 case 2: // L2CTLR, L2 Control Register
1780 return MISCREG_L2CTLR;
1781 case 3:
1782 return MISCREG_L2ECTLR;
1783 }
1784 break;
1785 break;
1786 }
1787 }
1788 break;
1789 case 10:
1790 if (opc1 == 0) {
1791 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
1792 if (crm == 2) { // TEX Remap Registers
1793 if (opc2 == 0) {
1794 // Selector is TTBCR.EAE
1795 return MISCREG_PRRR_MAIR0;
1796 } else if (opc2 == 1) {
1797 // Selector is TTBCR.EAE
1798 return MISCREG_NMRR_MAIR1;
1799 }
1800 } else if (crm == 3) {
1801 if (opc2 == 0) {
1802 return MISCREG_AMAIR0;
1803 } else if (opc2 == 1) {
1804 return MISCREG_AMAIR1;
1805 }
1806 }
1807 } else if (opc1 == 4) {
1808 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
1809 if (crm == 2) {
1810 if (opc2 == 0)
1811 return MISCREG_HMAIR0;
1812 else if (opc2 == 1)
1813 return MISCREG_HMAIR1;
1814 } else if (crm == 3) {
1815 if (opc2 == 0)
1816 return MISCREG_HAMAIR0;
1817 else if (opc2 == 1)
1818 return MISCREG_HAMAIR1;
1819 }
1820 }
1821 break;
1822 case 11:
1823 if (opc1 <=7) {
1824 switch (crm) {
1825 case 0:
1826 case 1:
1827 case 2:
1828 case 3:
1829 case 4:
1830 case 5:
1831 case 6:
1832 case 7:
1833 case 8:
1834 case 15:
1835 // Reserved for DMA operations for TCM access
1836 break;
1837 }
1838 }
1839 break;
1840 case 12:
1841 if (opc1 == 0) {
1842 if (crm == 0) {
1843 if (opc2 == 0) {
1844 return MISCREG_VBAR;
1845 } else if (opc2 == 1) {
1846 return MISCREG_MVBAR;
1847 }
1848 } else if (crm == 1) {
1849 if (opc2 == 0) {
1850 return MISCREG_ISR;
1851 }
1852 }
1853 } else if (opc1 == 4) {
1854 if (crm == 0 && opc2 == 0)
1855 return MISCREG_HVBAR;
1856 }
1857 break;
1858 case 13:
1859 if (opc1 == 0) {
1860 if (crm == 0) {
1861 switch (opc2) {
1862 case 0:
1863 return MISCREG_FCSEIDR;
1864 case 1:
1865 return MISCREG_CONTEXTIDR;
1866 case 2:
1867 return MISCREG_TPIDRURW;
1868 case 3:
1869 return MISCREG_TPIDRURO;
1870 case 4:
1871 return MISCREG_TPIDRPRW;
1872 }
1873 }
1874 } else if (opc1 == 4) {
1875 if (crm == 0 && opc2 == 2)
1876 return MISCREG_HTPIDR;
1877 }
1878 break;
1879 case 14:
1880 if (opc1 == 0) {
1881 switch (crm) {
1882 case 0:
1883 if (opc2 == 0)
1884 return MISCREG_CNTFRQ;
1885 break;
1886 case 1:
1887 if (opc2 == 0)
1888 return MISCREG_CNTKCTL;
1889 break;
1890 case 2:
1891 if (opc2 == 0)
1892 return MISCREG_CNTP_TVAL;
1893 else if (opc2 == 1)
1894 return MISCREG_CNTP_CTL;
1895 break;
1896 case 3:
1897 if (opc2 == 0)
1898 return MISCREG_CNTV_TVAL;
1899 else if (opc2 == 1)
1900 return MISCREG_CNTV_CTL;
1901 break;
1902 }
1903 } else if (opc1 == 4) {
1904 if (crm == 1 && opc2 == 0) {
1905 return MISCREG_CNTHCTL;
1906 } else if (crm == 2) {
1907 if (opc2 == 0)
1908 return MISCREG_CNTHP_TVAL;
1909 else if (opc2 == 1)
1910 return MISCREG_CNTHP_CTL;
1911 }
1912 }
1913 break;
1914 case 15:
1915 // Implementation defined
1916 return MISCREG_CP15_UNIMPL;
1917 }
1918 // Unrecognized register
1919 return MISCREG_CP15_UNIMPL;
1920}
1921
1922MiscRegIndex
1923decodeCP15Reg64(unsigned crm, unsigned opc1)
1924{
1925 switch (crm) {
1926 case 2:
1927 switch (opc1) {
1928 case 0:
1929 return MISCREG_TTBR0;
1930 case 1:
1931 return MISCREG_TTBR1;
1932 case 4:
1933 return MISCREG_HTTBR;
1934 case 6:
1935 return MISCREG_VTTBR;
1936 }
1937 break;
1938 case 7:
1939 if (opc1 == 0)
1940 return MISCREG_PAR;
1941 break;
1942 case 14:
1943 switch (opc1) {
1944 case 0:
1945 return MISCREG_CNTPCT;
1946 case 1:
1947 return MISCREG_CNTVCT;
1948 case 2:
1949 return MISCREG_CNTP_CVAL;
1950 case 3:
1951 return MISCREG_CNTV_CVAL;
1952 case 4:
1953 return MISCREG_CNTVOFF;
1954 case 6:
1955 return MISCREG_CNTHP_CVAL;
1956 }
1957 break;
1958 case 15:
1959 if (opc1 == 0)
1960 return MISCREG_CPUMERRSR;
1961 else if (opc1 == 1)
1962 return MISCREG_L2MERRSR;
1963 break;
1964 }
1965 // Unrecognized register
1966 return MISCREG_CP15_UNIMPL;
1967}
1968
1969bool
1970canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
1971{
1972 bool secure = !scr.ns;
1973 bool canRead;
1974
1975 switch (cpsr.mode) {
1976 case MODE_USER:
1977 canRead = secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
1978 miscRegInfo[reg][MISCREG_USR_NS_RD];
1979 break;
1980 case MODE_FIQ:
1981 case MODE_IRQ:
1982 case MODE_SVC:
1983 case MODE_ABORT:
1984 case MODE_UNDEFINED:
1985 case MODE_SYSTEM:
1986 canRead = secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
1987 miscRegInfo[reg][MISCREG_PRI_NS_RD];
1988 break;
1989 case MODE_MON:
1990 canRead = secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
1991 miscRegInfo[reg][MISCREG_MON_NS1_RD];
1992 break;
1993 case MODE_HYP:
1994 canRead = miscRegInfo[reg][MISCREG_HYP_RD];
1995 break;
1996 default:
1997 panic("Unrecognized mode setting in CPSR.\n");
1998 }
1999 // can't do permissions checkes on the root of a banked pair of regs
2000 assert(!miscRegInfo[reg][MISCREG_BANKED]);
2001 return canRead;
2002}
2003
2004bool
2005canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2006{
2007 bool secure = !scr.ns;
2008 bool canWrite;
2009
2010 switch (cpsr.mode) {
2011 case MODE_USER:
2012 canWrite = secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
2013 miscRegInfo[reg][MISCREG_USR_NS_WR];
2014 break;
2015 case MODE_FIQ:
2016 case MODE_IRQ:
2017 case MODE_SVC:
2018 case MODE_ABORT:
2019 case MODE_UNDEFINED:
2020 case MODE_SYSTEM:
2021 canWrite = secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
2022 miscRegInfo[reg][MISCREG_PRI_NS_WR];
2023 break;
2024 case MODE_MON:
2025 canWrite = secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
2026 miscRegInfo[reg][MISCREG_MON_NS1_WR];
2027 break;
2028 case MODE_HYP:
2029 canWrite = miscRegInfo[reg][MISCREG_HYP_WR];
2030 break;
2031 default:
2032 panic("Unrecognized mode setting in CPSR.\n");
2033 }
2034 // can't do permissions checkes on the root of a banked pair of regs
2035 assert(!miscRegInfo[reg][MISCREG_BANKED]);
2036 return canWrite;
2037}
2038
2039int
2040flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc)
2041{
2042 SCR scr = tc->readMiscReg(MISCREG_SCR);
2043 return flattenMiscRegNsBanked(reg, tc, scr.ns);
2044}
2045
2046int
2047flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc, bool ns)
2048{
2049 int reg_as_int = static_cast<int>(reg);
2050 if (miscRegInfo[reg][MISCREG_BANKED]) {
2051 reg_as_int += (ArmSystem::haveSecurity(tc) &&
2052 !ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1;
2053 }
2054 return reg_as_int;
2055}
2056
2057
2058/**
2059 * If the reg is a child reg of a banked set, then the parent is the last
2060 * banked one in the list. This is messy, and the wish is to eventually have
2061 * the bitmap replaced with a better data structure. the preUnflatten function
2062 * initializes a lookup table to speed up the search for these banked
2063 * registers.
2064 */
2065
2066int unflattenResultMiscReg[NUM_MISCREGS];
2067
2068void
2069preUnflattenMiscReg()
2070{
2071 int reg = -1;
2072 for (int i = 0 ; i < NUM_MISCREGS; i++){
2073 if (miscRegInfo[i][MISCREG_BANKED])
2074 reg = i;
2075 if (miscRegInfo[i][MISCREG_BANKED_CHILD])
2076 unflattenResultMiscReg[i] = reg;
2077 else
2078 unflattenResultMiscReg[i] = i;
2079 // if this assert fails, no parent was found, and something is broken
2080 assert(unflattenResultMiscReg[i] > -1);
2081 }
2082}
2083
2084int
2085unflattenMiscReg(int reg)
2086{
2087 return unflattenResultMiscReg[reg];
2088}
2089
2090bool
2091canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2092{
2093 // Check for SP_EL0 access while SPSEL == 0
2094 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2095 return false;
2096
2097 // Check for RVBAR access
2098 if (reg == MISCREG_RVBAR_EL1) {
2099 ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2100 if (highest_el == EL2 || highest_el == EL3)
2101 return false;
2102 }
2103 if (reg == MISCREG_RVBAR_EL2) {
2104 ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2105 if (highest_el == EL3)
2106 return false;
2107 }
2108
2109 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2110
2111 switch (opModeToEL((OperatingMode) (uint8_t) cpsr.mode)) {
2112 case EL0:
2113 return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
2114 miscRegInfo[reg][MISCREG_USR_NS_RD];
2115 case EL1:
2116 return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
2117 miscRegInfo[reg][MISCREG_PRI_NS_RD];
2118 case EL2:
2119 return miscRegInfo[reg][MISCREG_HYP_RD];
2120 case EL3:
2121 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
2122 miscRegInfo[reg][MISCREG_MON_NS1_RD];
2123 default:
2124 panic("Invalid exception level");
2125 }
2126}
2127
2128bool
2129canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2130{
2131 // Check for SP_EL0 access while SPSEL == 0
2132 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2133 return false;
2134 ExceptionLevel el = opModeToEL((OperatingMode) (uint8_t) cpsr.mode);
2135 if (reg == MISCREG_DAIF) {
2136 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2137 if (el == EL0 && !sctlr.uma)
2138 return false;
2139 }
2140 if (FullSystem && reg == MISCREG_DC_ZVA_Xt) {
2141 // In syscall-emulation mode, this test is skipped and DCZVA is always
2142 // allowed at EL0
2143 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2144 if (el == EL0 && !sctlr.dze)
2145 return false;
2146 }
2147 if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) {
2148 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2149 if (el == EL0 && !sctlr.uci)
2150 return false;
2151 }
2152
2153 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2154
2155 switch (el) {
2156 case EL0:
2157 return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
2158 miscRegInfo[reg][MISCREG_USR_NS_WR];
2159 case EL1:
2160 return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
2161 miscRegInfo[reg][MISCREG_PRI_NS_WR];
2162 case EL2:
2163 return miscRegInfo[reg][MISCREG_HYP_WR];
2164 case EL3:
2165 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
2166 miscRegInfo[reg][MISCREG_MON_NS1_WR];
2167 default:
2168 panic("Invalid exception level");
2169 }
2170}
2171
2172MiscRegIndex
2173decodeAArch64SysReg(unsigned op0, unsigned op1,
2174 unsigned crn, unsigned crm,
2175 unsigned op2)
2176{
2177 switch (op0) {
2178 case 1:
2179 switch (crn) {
2180 case 7:
2181 switch (op1) {
2182 case 0:
2183 switch (crm) {
2184 case 1:
2185 switch (op2) {
2186 case 0:
2187 return MISCREG_IC_IALLUIS;
2188 }
2189 break;
2190 case 5:
2191 switch (op2) {
2192 case 0:
2193 return MISCREG_IC_IALLU;
2194 }
2195 break;
2196 case 6:
2197 switch (op2) {
2198 case 1:
2199 return MISCREG_DC_IVAC_Xt;
2200 case 2:
2201 return MISCREG_DC_ISW_Xt;
2202 }
2203 break;
2204 case 8:
2205 switch (op2) {
2206 case 0:
2207 return MISCREG_AT_S1E1R_Xt;
2208 case 1:
2209 return MISCREG_AT_S1E1W_Xt;
2210 case 2:
2211 return MISCREG_AT_S1E0R_Xt;
2212 case 3:
2213 return MISCREG_AT_S1E0W_Xt;
2214 }
2215 break;
2216 case 10:
2217 switch (op2) {
2218 case 2:
2219 return MISCREG_DC_CSW_Xt;
2220 }
2221 break;
2222 case 14:
2223 switch (op2) {
2224 case 2:
2225 return MISCREG_DC_CISW_Xt;
2226 }
2227 break;
2228 }
2229 break;
2230 case 3:
2231 switch (crm) {
2232 case 4:
2233 switch (op2) {
2234 case 1:
2235 return MISCREG_DC_ZVA_Xt;
2236 }
2237 break;
2238 case 5:
2239 switch (op2) {
2240 case 1:
2241 return MISCREG_IC_IVAU_Xt;
2242 }
2243 break;
2244 case 10:
2245 switch (op2) {
2246 case 1:
2247 return MISCREG_DC_CVAC_Xt;
2248 }
2249 break;
2250 case 11:
2251 switch (op2) {
2252 case 1:
2253 return MISCREG_DC_CVAU_Xt;
2254 }
2255 break;
2256 case 14:
2257 switch (op2) {
2258 case 1:
2259 return MISCREG_DC_CIVAC_Xt;
2260 }
2261 break;
2262 }
2263 break;
2264 case 4:
2265 switch (crm) {
2266 case 8:
2267 switch (op2) {
2268 case 0:
2269 return MISCREG_AT_S1E2R_Xt;
2270 case 1:
2271 return MISCREG_AT_S1E2W_Xt;
2272 case 4:
2273 return MISCREG_AT_S12E1R_Xt;
2274 case 5:
2275 return MISCREG_AT_S12E1W_Xt;
2276 case 6:
2277 return MISCREG_AT_S12E0R_Xt;
2278 case 7:
2279 return MISCREG_AT_S12E0W_Xt;
2280 }
2281 break;
2282 }
2283 break;
2284 case 6:
2285 switch (crm) {
2286 case 8:
2287 switch (op2) {
2288 case 0:
2289 return MISCREG_AT_S1E3R_Xt;
2290 case 1:
2291 return MISCREG_AT_S1E3W_Xt;
2292 }
2293 break;
2294 }
2295 break;
2296 }
2297 break;
2298 case 8:
2299 switch (op1) {
2300 case 0:
2301 switch (crm) {
2302 case 3:
2303 switch (op2) {
2304 case 0:
2305 return MISCREG_TLBI_VMALLE1IS;
2306 case 1:
2307 return MISCREG_TLBI_VAE1IS_Xt;
2308 case 2:
2309 return MISCREG_TLBI_ASIDE1IS_Xt;
2310 case 3:
2311 return MISCREG_TLBI_VAAE1IS_Xt;
2312 case 5:
2313 return MISCREG_TLBI_VALE1IS_Xt;
2314 case 7:
2315 return MISCREG_TLBI_VAALE1IS_Xt;
2316 }
2317 break;
2318 case 7:
2319 switch (op2) {
2320 case 0:
2321 return MISCREG_TLBI_VMALLE1;
2322 case 1:
2323 return MISCREG_TLBI_VAE1_Xt;
2324 case 2:
2325 return MISCREG_TLBI_ASIDE1_Xt;
2326 case 3:
2327 return MISCREG_TLBI_VAAE1_Xt;
2328 case 5:
2329 return MISCREG_TLBI_VALE1_Xt;
2330 case 7:
2331 return MISCREG_TLBI_VAALE1_Xt;
2332 }
2333 break;
2334 }
2335 break;
2336 case 4:
2337 switch (crm) {
2338 case 0:
2339 switch (op2) {
2340 case 1:
2341 return MISCREG_TLBI_IPAS2E1IS_Xt;
2342 case 5:
2343 return MISCREG_TLBI_IPAS2LE1IS_Xt;
2344 }
2345 break;
2346 case 3:
2347 switch (op2) {
2348 case 0:
2349 return MISCREG_TLBI_ALLE2IS;
2350 case 1:
2351 return MISCREG_TLBI_VAE2IS_Xt;
2352 case 4:
2353 return MISCREG_TLBI_ALLE1IS;
2354 case 5:
2355 return MISCREG_TLBI_VALE2IS_Xt;
2356 case 6:
2357 return MISCREG_TLBI_VMALLS12E1IS;
2358 }
2359 break;
2360 case 4:
2361 switch (op2) {
2362 case 1:
2363 return MISCREG_TLBI_IPAS2E1_Xt;
2364 case 5:
2365 return MISCREG_TLBI_IPAS2LE1_Xt;
2366 }
2367 break;
2368 case 7:
2369 switch (op2) {
2370 case 0:
2371 return MISCREG_TLBI_ALLE2;
2372 case 1:
2373 return MISCREG_TLBI_VAE2_Xt;
2374 case 4:
2375 return MISCREG_TLBI_ALLE1;
2376 case 5:
2377 return MISCREG_TLBI_VALE2_Xt;
2378 case 6:
2379 return MISCREG_TLBI_VMALLS12E1;
2380 }
2381 break;
2382 }
2383 break;
2384 case 6:
2385 switch (crm) {
2386 case 3:
2387 switch (op2) {
2388 case 0:
2389 return MISCREG_TLBI_ALLE3IS;
2390 case 1:
2391 return MISCREG_TLBI_VAE3IS_Xt;
2392 case 5:
2393 return MISCREG_TLBI_VALE3IS_Xt;
2394 }
2395 break;
2396 case 7:
2397 switch (op2) {
2398 case 0:
2399 return MISCREG_TLBI_ALLE3;
2400 case 1:
2401 return MISCREG_TLBI_VAE3_Xt;
2402 case 5:
2403 return MISCREG_TLBI_VALE3_Xt;
2404 }
2405 break;
2406 }
2407 break;
2408 }
2409 break;
2410 }
2411 break;
2412 case 2:
2413 switch (crn) {
2414 case 0:
2415 switch (op1) {
2416 case 0:
2417 switch (crm) {
2418 case 0:
2419 switch (op2) {
2420 case 2:
2421 return MISCREG_OSDTRRX_EL1;
2422 case 4:
2423 return MISCREG_DBGBVR0_EL1;
2424 case 5:
2425 return MISCREG_DBGBCR0_EL1;
2426 case 6:
2427 return MISCREG_DBGWVR0_EL1;
2428 case 7:
2429 return MISCREG_DBGWCR0_EL1;
2430 }
2431 break;
2432 case 1:
2433 switch (op2) {
2434 case 4:
2435 return MISCREG_DBGBVR1_EL1;
2436 case 5:
2437 return MISCREG_DBGBCR1_EL1;
2438 case 6:
2439 return MISCREG_DBGWVR1_EL1;
2440 case 7:
2441 return MISCREG_DBGWCR1_EL1;
2442 }
2443 break;
2444 case 2:
2445 switch (op2) {
2446 case 0:
2447 return MISCREG_MDCCINT_EL1;
2448 case 2:
2449 return MISCREG_MDSCR_EL1;
2450 case 4:
2451 return MISCREG_DBGBVR2_EL1;
2452 case 5:
2453 return MISCREG_DBGBCR2_EL1;
2454 case 6:
2455 return MISCREG_DBGWVR2_EL1;
2456 case 7:
2457 return MISCREG_DBGWCR2_EL1;
2458 }
2459 break;
2460 case 3:
2461 switch (op2) {
2462 case 2:
2463 return MISCREG_OSDTRTX_EL1;
2464 case 4:
2465 return MISCREG_DBGBVR3_EL1;
2466 case 5:
2467 return MISCREG_DBGBCR3_EL1;
2468 case 6:
2469 return MISCREG_DBGWVR3_EL1;
2470 case 7:
2471 return MISCREG_DBGWCR3_EL1;
2472 }
2473 break;
2474 case 4:
2475 switch (op2) {
2476 case 4:
2477 return MISCREG_DBGBVR4_EL1;
2478 case 5:
2479 return MISCREG_DBGBCR4_EL1;
2480 }
2481 break;
2482 case 5:
2483 switch (op2) {
2484 case 4:
2485 return MISCREG_DBGBVR5_EL1;
2486 case 5:
2487 return MISCREG_DBGBCR5_EL1;
2488 }
2489 break;
2490 case 6:
2491 switch (op2) {
2492 case 2:
2493 return MISCREG_OSECCR_EL1;
2494 }
2495 break;
2496 }
2497 break;
2498 case 2:
2499 switch (crm) {
2500 case 0:
2501 switch (op2) {
2502 case 0:
2503 return MISCREG_TEECR32_EL1;
2504 }
2505 break;
2506 }
2507 break;
2508 case 3:
2509 switch (crm) {
2510 case 1:
2511 switch (op2) {
2512 case 0:
2513 return MISCREG_MDCCSR_EL0;
2514 }
2515 break;
2516 case 4:
2517 switch (op2) {
2518 case 0:
2519 return MISCREG_MDDTR_EL0;
2520 }
2521 break;
2522 case 5:
2523 switch (op2) {
2524 case 0:
2525 return MISCREG_MDDTRRX_EL0;
2526 }
2527 break;
2528 }
2529 break;
2530 case 4:
2531 switch (crm) {
2532 case 7:
2533 switch (op2) {
2534 case 0:
2535 return MISCREG_DBGVCR32_EL2;
2536 }
2537 break;
2538 }
2539 break;
2540 }
2541 break;
2542 case 1:
2543 switch (op1) {
2544 case 0:
2545 switch (crm) {
2546 case 0:
2547 switch (op2) {
2548 case 0:
2549 return MISCREG_MDRAR_EL1;
2550 case 4:
2551 return MISCREG_OSLAR_EL1;
2552 }
2553 break;
2554 case 1:
2555 switch (op2) {
2556 case 4:
2557 return MISCREG_OSLSR_EL1;
2558 }
2559 break;
2560 case 3:
2561 switch (op2) {
2562 case 4:
2563 return MISCREG_OSDLR_EL1;
2564 }
2565 break;
2566 case 4:
2567 switch (op2) {
2568 case 4:
2569 return MISCREG_DBGPRCR_EL1;
2570 }
2571 break;
2572 }
2573 break;
2574 case 2:
2575 switch (crm) {
2576 case 0:
2577 switch (op2) {
2578 case 0:
2579 return MISCREG_TEEHBR32_EL1;
2580 }
2581 break;
2582 }
2583 break;
2584 }
2585 break;
2586 case 7:
2587 switch (op1) {
2588 case 0:
2589 switch (crm) {
2590 case 8:
2591 switch (op2) {
2592 case 6:
2593 return MISCREG_DBGCLAIMSET_EL1;
2594 }
2595 break;
2596 case 9:
2597 switch (op2) {
2598 case 6:
2599 return MISCREG_DBGCLAIMCLR_EL1;
2600 }
2601 break;
2602 case 14:
2603 switch (op2) {
2604 case 6:
2605 return MISCREG_DBGAUTHSTATUS_EL1;
2606 }
2607 break;
2608 }
2609 break;
2610 }
2611 break;
2612 }
2613 break;
2614 case 3:
2615 switch (crn) {
2616 case 0:
2617 switch (op1) {
2618 case 0:
2619 switch (crm) {
2620 case 0:
2621 switch (op2) {
2622 case 0:
2623 return MISCREG_MIDR_EL1;
2624 case 5:
2625 return MISCREG_MPIDR_EL1;
2626 case 6:
2627 return MISCREG_REVIDR_EL1;
2628 }
2629 break;
2630 case 1:
2631 switch (op2) {
2632 case 0:
2633 return MISCREG_ID_PFR0_EL1;
2634 case 1:
2635 return MISCREG_ID_PFR1_EL1;
2636 case 2:
2637 return MISCREG_ID_DFR0_EL1;
2638 case 3:
2639 return MISCREG_ID_AFR0_EL1;
2640 case 4:
2641 return MISCREG_ID_MMFR0_EL1;
2642 case 5:
2643 return MISCREG_ID_MMFR1_EL1;
2644 case 6:
2645 return MISCREG_ID_MMFR2_EL1;
2646 case 7:
2647 return MISCREG_ID_MMFR3_EL1;
2648 }
2649 break;
2650 case 2:
2651 switch (op2) {
2652 case 0:
2653 return MISCREG_ID_ISAR0_EL1;
2654 case 1:
2655 return MISCREG_ID_ISAR1_EL1;
2656 case 2:
2657 return MISCREG_ID_ISAR2_EL1;
2658 case 3:
2659 return MISCREG_ID_ISAR3_EL1;
2660 case 4:
2661 return MISCREG_ID_ISAR4_EL1;
2662 case 5:
2663 return MISCREG_ID_ISAR5_EL1;
2664 }
2665 break;
2666 case 3:
2667 switch (op2) {
2668 case 0:
2669 return MISCREG_MVFR0_EL1;
2670 case 1:
2671 return MISCREG_MVFR1_EL1;
2672 case 2:
2673 return MISCREG_MVFR2_EL1;
2674 case 3 ... 7:
2675 return MISCREG_RAZ;
2676 }
2677 break;
2678 case 4:
2679 switch (op2) {
2680 case 0:
2681 return MISCREG_ID_AA64PFR0_EL1;
2682 case 1:
2683 return MISCREG_ID_AA64PFR1_EL1;
2684 case 2 ... 7:
2685 return MISCREG_RAZ;
2686 }
2687 break;
2688 case 5:
2689 switch (op2) {
2690 case 0:
2691 return MISCREG_ID_AA64DFR0_EL1;
2692 case 1:
2693 return MISCREG_ID_AA64DFR1_EL1;
2694 case 4:
2695 return MISCREG_ID_AA64AFR0_EL1;
2696 case 5:
2697 return MISCREG_ID_AA64AFR1_EL1;
2698 case 2:
2699 case 3:
2700 case 6:
2701 case 7:
2702 return MISCREG_RAZ;
2703 }
2704 break;
2705 case 6:
2706 switch (op2) {
2707 case 0:
2708 return MISCREG_ID_AA64ISAR0_EL1;
2709 case 1:
2710 return MISCREG_ID_AA64ISAR1_EL1;
2711 case 2 ... 7:
2712 return MISCREG_RAZ;
2713 }
2714 break;
2715 case 7:
2716 switch (op2) {
2717 case 0:
2718 return MISCREG_ID_AA64MMFR0_EL1;
2719 case 1:
2720 return MISCREG_ID_AA64MMFR1_EL1;
2721 case 2 ... 7:
2722 return MISCREG_RAZ;
2723 }
2724 break;
2725 }
2726 break;
2727 case 1:
2728 switch (crm) {
2729 case 0:
2730 switch (op2) {
2731 case 0:
2732 return MISCREG_CCSIDR_EL1;
2733 case 1:
2734 return MISCREG_CLIDR_EL1;
2735 case 7:
2736 return MISCREG_AIDR_EL1;
2737 }
2738 break;
2739 }
2740 break;
2741 case 2:
2742 switch (crm) {
2743 case 0:
2744 switch (op2) {
2745 case 0:
2746 return MISCREG_CSSELR_EL1;
2747 }
2748 break;
2749 }
2750 break;
2751 case 3:
2752 switch (crm) {
2753 case 0:
2754 switch (op2) {
2755 case 1:
2756 return MISCREG_CTR_EL0;
2757 case 7:
2758 return MISCREG_DCZID_EL0;
2759 }
2760 break;
2761 }
2762 break;
2763 case 4:
2764 switch (crm) {
2765 case 0:
2766 switch (op2) {
2767 case 0:
2768 return MISCREG_VPIDR_EL2;
2769 case 5:
2770 return MISCREG_VMPIDR_EL2;
2771 }
2772 break;
2773 }
2774 break;
2775 }
2776 break;
2777 case 1:
2778 switch (op1) {
2779 case 0:
2780 switch (crm) {
2781 case 0:
2782 switch (op2) {
2783 case 0:
2784 return MISCREG_SCTLR_EL1;
2785 case 1:
2786 return MISCREG_ACTLR_EL1;
2787 case 2:
2788 return MISCREG_CPACR_EL1;
2789 }
2790 break;
2791 }
2792 break;
2793 case 4:
2794 switch (crm) {
2795 case 0:
2796 switch (op2) {
2797 case 0:
2798 return MISCREG_SCTLR_EL2;
2799 case 1:
2800 return MISCREG_ACTLR_EL2;
2801 }
2802 break;
2803 case 1:
2804 switch (op2) {
2805 case 0:
2806 return MISCREG_HCR_EL2;
2807 case 1:
2808 return MISCREG_MDCR_EL2;
2809 case 2:
2810 return MISCREG_CPTR_EL2;
2811 case 3:
2812 return MISCREG_HSTR_EL2;
2813 case 7:
2814 return MISCREG_HACR_EL2;
2815 }
2816 break;
2817 }
2818 break;
2819 case 6:
2820 switch (crm) {
2821 case 0:
2822 switch (op2) {
2823 case 0:
2824 return MISCREG_SCTLR_EL3;
2825 case 1:
2826 return MISCREG_ACTLR_EL3;
2827 }
2828 break;
2829 case 1:
2830 switch (op2) {
2831 case 0:
2832 return MISCREG_SCR_EL3;
2833 case 1:
2834 return MISCREG_SDER32_EL3;
2835 case 2:
2836 return MISCREG_CPTR_EL3;
2837 }
2838 break;
2839 case 3:
2840 switch (op2) {
2841 case 1:
2842 return MISCREG_MDCR_EL3;
2843 }
2844 break;
2845 }
2846 break;
2847 }
2848 break;
2849 case 2:
2850 switch (op1) {
2851 case 0:
2852 switch (crm) {
2853 case 0:
2854 switch (op2) {
2855 case 0:
2856 return MISCREG_TTBR0_EL1;
2857 case 1:
2858 return MISCREG_TTBR1_EL1;
2859 case 2:
2860 return MISCREG_TCR_EL1;
2861 }
2862 break;
2863 }
2864 break;
2865 case 4:
2866 switch (crm) {
2867 case 0:
2868 switch (op2) {
2869 case 0:
2870 return MISCREG_TTBR0_EL2;
2871 case 2:
2872 return MISCREG_TCR_EL2;
2873 }
2874 break;
2875 case 1:
2876 switch (op2) {
2877 case 0:
2878 return MISCREG_VTTBR_EL2;
2879 case 2:
2880 return MISCREG_VTCR_EL2;
2881 }
2882 break;
2883 }
2884 break;
2885 case 6:
2886 switch (crm) {
2887 case 0:
2888 switch (op2) {
2889 case 0:
2890 return MISCREG_TTBR0_EL3;
2891 case 2:
2892 return MISCREG_TCR_EL3;
2893 }
2894 break;
2895 }
2896 break;
2897 }
2898 break;
2899 case 3:
2900 switch (op1) {
2901 case 4:
2902 switch (crm) {
2903 case 0:
2904 switch (op2) {
2905 case 0:
2906 return MISCREG_DACR32_EL2;
2907 }
2908 break;
2909 }
2910 break;
2911 }
2912 break;
2913 case 4:
2914 switch (op1) {
2915 case 0:
2916 switch (crm) {
2917 case 0:
2918 switch (op2) {
2919 case 0:
2920 return MISCREG_SPSR_EL1;
2921 case 1:
2922 return MISCREG_ELR_EL1;
2923 }
2924 break;
2925 case 1:
2926 switch (op2) {
2927 case 0:
2928 return MISCREG_SP_EL0;
2929 }
2930 break;
2931 case 2:
2932 switch (op2) {
2933 case 0:
2934 return MISCREG_SPSEL;
2935 case 2:
2936 return MISCREG_CURRENTEL;
2937 }
2938 break;
2939 }
2940 break;
2941 case 3:
2942 switch (crm) {
2943 case 2:
2944 switch (op2) {
2945 case 0:
2946 return MISCREG_NZCV;
2947 case 1:
2948 return MISCREG_DAIF;
2949 }
2950 break;
2951 case 4:
2952 switch (op2) {
2953 case 0:
2954 return MISCREG_FPCR;
2955 case 1:
2956 return MISCREG_FPSR;
2957 }
2958 break;
2959 case 5:
2960 switch (op2) {
2961 case 0:
2962 return MISCREG_DSPSR_EL0;
2963 case 1:
2964 return MISCREG_DLR_EL0;
2965 }
2966 break;
2967 }
2968 break;
2969 case 4:
2970 switch (crm) {
2971 case 0:
2972 switch (op2) {
2973 case 0:
2974 return MISCREG_SPSR_EL2;
2975 case 1:
2976 return MISCREG_ELR_EL2;
2977 }
2978 break;
2979 case 1:
2980 switch (op2) {
2981 case 0:
2982 return MISCREG_SP_EL1;
2983 }
2984 break;
2985 case 3:
2986 switch (op2) {
2987 case 0:
2988 return MISCREG_SPSR_IRQ_AA64;
2989 case 1:
2990 return MISCREG_SPSR_ABT_AA64;
2991 case 2:
2992 return MISCREG_SPSR_UND_AA64;
2993 case 3:
2994 return MISCREG_SPSR_FIQ_AA64;
2995 }
2996 break;
2997 }
2998 break;
2999 case 6:
3000 switch (crm) {
3001 case 0:
3002 switch (op2) {
3003 case 0:
3004 return MISCREG_SPSR_EL3;
3005 case 1:
3006 return MISCREG_ELR_EL3;
3007 }
3008 break;
3009 case 1:
3010 switch (op2) {
3011 case 0:
3012 return MISCREG_SP_EL2;
3013 }
3014 break;
3015 }
3016 break;
3017 }
3018 break;
3019 case 5:
3020 switch (op1) {
3021 case 0:
3022 switch (crm) {
3023 case 1:
3024 switch (op2) {
3025 case 0:
3026 return MISCREG_AFSR0_EL1;
3027 case 1:
3028 return MISCREG_AFSR1_EL1;
3029 }
3030 break;
3031 case 2:
3032 switch (op2) {
3033 case 0:
3034 return MISCREG_ESR_EL1;
3035 }
3036 break;
3037 }
3038 break;
3039 case 4:
3040 switch (crm) {
3041 case 0:
3042 switch (op2) {
3043 case 1:
3044 return MISCREG_IFSR32_EL2;
3045 }
3046 break;
3047 case 1:
3048 switch (op2) {
3049 case 0:
3050 return MISCREG_AFSR0_EL2;
3051 case 1:
3052 return MISCREG_AFSR1_EL2;
3053 }
3054 break;
3055 case 2:
3056 switch (op2) {
3057 case 0:
3058 return MISCREG_ESR_EL2;
3059 }
3060 break;
3061 case 3:
3062 switch (op2) {
3063 case 0:
3064 return MISCREG_FPEXC32_EL2;
3065 }
3066 break;
3067 }
3068 break;
3069 case 6:
3070 switch (crm) {
3071 case 1:
3072 switch (op2) {
3073 case 0:
3074 return MISCREG_AFSR0_EL3;
3075 case 1:
3076 return MISCREG_AFSR1_EL3;
3077 }
3078 break;
3079 case 2:
3080 switch (op2) {
3081 case 0:
3082 return MISCREG_ESR_EL3;
3083 }
3084 break;
3085 }
3086 break;
3087 }
3088 break;
3089 case 6:
3090 switch (op1) {
3091 case 0:
3092 switch (crm) {
3093 case 0:
3094 switch (op2) {
3095 case 0:
3096 return MISCREG_FAR_EL1;
3097 }
3098 break;
3099 }
3100 break;
3101 case 4:
3102 switch (crm) {
3103 case 0:
3104 switch (op2) {
3105 case 0:
3106 return MISCREG_FAR_EL2;
3107 case 4:
3108 return MISCREG_HPFAR_EL2;
3109 }
3110 break;
3111 }
3112 break;
3113 case 6:
3114 switch (crm) {
3115 case 0:
3116 switch (op2) {
3117 case 0:
3118 return MISCREG_FAR_EL3;
3119 }
3120 break;
3121 }
3122 break;
3123 }
3124 break;
3125 case 7:
3126 switch (op1) {
3127 case 0:
3128 switch (crm) {
3129 case 4:
3130 switch (op2) {
3131 case 0:
3132 return MISCREG_PAR_EL1;
3133 }
3134 break;
3135 }
3136 break;
3137 }
3138 break;
3139 case 9:
3140 switch (op1) {
3141 case 0:
3142 switch (crm) {
3143 case 14:
3144 switch (op2) {
3145 case 1:
3146 return MISCREG_PMINTENSET_EL1;
3147 case 2:
3148 return MISCREG_PMINTENCLR_EL1;
3149 }
3150 break;
3151 }
3152 break;
3153 case 3:
3154 switch (crm) {
3155 case 12:
3156 switch (op2) {
3157 case 0:
3158 return MISCREG_PMCR_EL0;
3159 case 1:
3160 return MISCREG_PMCNTENSET_EL0;
3161 case 2:
3162 return MISCREG_PMCNTENCLR_EL0;
3163 case 3:
3164 return MISCREG_PMOVSCLR_EL0;
3165 case 4:
3166 return MISCREG_PMSWINC_EL0;
3167 case 5:
3168 return MISCREG_PMSELR_EL0;
3169 case 6:
3170 return MISCREG_PMCEID0_EL0;
3171 case 7:
3172 return MISCREG_PMCEID1_EL0;
3173 }
3174 break;
3175 case 13:
3176 switch (op2) {
3177 case 0:
3178 return MISCREG_PMCCNTR_EL0;
3179 case 1:
3180 return MISCREG_PMXEVTYPER_EL0;
3181 case 2:
3182 return MISCREG_PMXEVCNTR_EL0;
3183 }
3184 break;
3185 case 14:
3186 switch (op2) {
3187 case 0:
3188 return MISCREG_PMUSERENR_EL0;
3189 case 3:
3190 return MISCREG_PMOVSSET_EL0;
3191 }
3192 break;
3193 }
3194 break;
3195 }
3196 break;
3197 case 10:
3198 switch (op1) {
3199 case 0:
3200 switch (crm) {
3201 case 2:
3202 switch (op2) {
3203 case 0:
3204 return MISCREG_MAIR_EL1;
3205 }
3206 break;
3207 case 3:
3208 switch (op2) {
3209 case 0:
3210 return MISCREG_AMAIR_EL1;
3211 }
3212 break;
3213 }
3214 break;
3215 case 4:
3216 switch (crm) {
3217 case 2:
3218 switch (op2) {
3219 case 0:
3220 return MISCREG_MAIR_EL2;
3221 }
3222 break;
3223 case 3:
3224 switch (op2) {
3225 case 0:
3226 return MISCREG_AMAIR_EL2;
3227 }
3228 break;
3229 }
3230 break;
3231 case 6:
3232 switch (crm) {
3233 case 2:
3234 switch (op2) {
3235 case 0:
3236 return MISCREG_MAIR_EL3;
3237 }
3238 break;
3239 case 3:
3240 switch (op2) {
3241 case 0:
3242 return MISCREG_AMAIR_EL3;
3243 }
3244 break;
3245 }
3246 break;
3247 }
3248 break;
3249 case 11:
3250 switch (op1) {
3251 case 1:
3252 switch (crm) {
3253 case 0:
3254 switch (op2) {
3255 case 2:
3256 return MISCREG_L2CTLR_EL1;
3257 case 3:
3258 return MISCREG_L2ECTLR_EL1;
3259 }
3260 break;
3261 }
3262 break;
3263 }
3264 break;
3265 case 12:
3266 switch (op1) {
3267 case 0:
3268 switch (crm) {
3269 case 0:
3270 switch (op2) {
3271 case 0:
3272 return MISCREG_VBAR_EL1;
3273 case 1:
3274 return MISCREG_RVBAR_EL1;
3275 }
3276 break;
3277 case 1:
3278 switch (op2) {
3279 case 0:
3280 return MISCREG_ISR_EL1;
3281 }
3282 break;
3283 }
3284 break;
3285 case 4:
3286 switch (crm) {
3287 case 0:
3288 switch (op2) {
3289 case 0:
3290 return MISCREG_VBAR_EL2;
3291 case 1:
3292 return MISCREG_RVBAR_EL2;
3293 }
3294 break;
3295 }
3296 break;
3297 case 6:
3298 switch (crm) {
3299 case 0:
3300 switch (op2) {
3301 case 0:
3302 return MISCREG_VBAR_EL3;
3303 case 1:
3304 return MISCREG_RVBAR_EL3;
3305 case 2:
3306 return MISCREG_RMR_EL3;
3307 }
3308 break;
3309 }
3310 break;
3311 }
3312 break;
3313 case 13:
3314 switch (op1) {
3315 case 0:
3316 switch (crm) {
3317 case 0:
3318 switch (op2) {
3319 case 1:
3320 return MISCREG_CONTEXTIDR_EL1;
3321 case 4:
3322 return MISCREG_TPIDR_EL1;
3323 }
3324 break;
3325 }
3326 break;
3327 case 3:
3328 switch (crm) {
3329 case 0:
3330 switch (op2) {
3331 case 2:
3332 return MISCREG_TPIDR_EL0;
3333 case 3:
3334 return MISCREG_TPIDRRO_EL0;
3335 }
3336 break;
3337 }
3338 break;
3339 case 4:
3340 switch (crm) {
3341 case 0:
3342 switch (op2) {
3343 case 1:
3344 return MISCREG_CONTEXTIDR_EL2;
3345 case 2:
3346 return MISCREG_TPIDR_EL2;
3347 }
3348 break;
3349 }
3350 break;
3351 case 6:
3352 switch (crm) {
3353 case 0:
3354 switch (op2) {
3355 case 2:
3356 return MISCREG_TPIDR_EL3;
3357 }
3358 break;
3359 }
3360 break;
3361 }
3362 break;
3363 case 14:
3364 switch (op1) {
3365 case 0:
3366 switch (crm) {
3367 case 1:
3368 switch (op2) {
3369 case 0:
3370 return MISCREG_CNTKCTL_EL1;
3371 }
3372 break;
3373 }
3374 break;
3375 case 3:
3376 switch (crm) {
3377 case 0:
3378 switch (op2) {
3379 case 0:
3380 return MISCREG_CNTFRQ_EL0;
3381 case 1:
3382 return MISCREG_CNTPCT_EL0;
3383 case 2:
3384 return MISCREG_CNTVCT_EL0;
3385 }
3386 break;
3387 case 2:
3388 switch (op2) {
3389 case 0:
3390 return MISCREG_CNTP_TVAL_EL0;
3391 case 1:
3392 return MISCREG_CNTP_CTL_EL0;
3393 case 2:
3394 return MISCREG_CNTP_CVAL_EL0;
3395 }
3396 break;
3397 case 3:
3398 switch (op2) {
3399 case 0:
3400 return MISCREG_CNTV_TVAL_EL0;
3401 case 1:
3402 return MISCREG_CNTV_CTL_EL0;
3403 case 2:
3404 return MISCREG_CNTV_CVAL_EL0;
3405 }
3406 break;
3407 case 8:
3408 switch (op2) {
3409 case 0:
3410 return MISCREG_PMEVCNTR0_EL0;
3411 case 1:
3412 return MISCREG_PMEVCNTR1_EL0;
3413 case 2:
3414 return MISCREG_PMEVCNTR2_EL0;
3415 case 3:
3416 return MISCREG_PMEVCNTR3_EL0;
3417 case 4:
3418 return MISCREG_PMEVCNTR4_EL0;
3419 case 5:
3420 return MISCREG_PMEVCNTR5_EL0;
3421 }
3422 break;
3423 case 12:
3424 switch (op2) {
3425 case 0:
3426 return MISCREG_PMEVTYPER0_EL0;
3427 case 1:
3428 return MISCREG_PMEVTYPER1_EL0;
3429 case 2:
3430 return MISCREG_PMEVTYPER2_EL0;
3431 case 3:
3432 return MISCREG_PMEVTYPER3_EL0;
3433 case 4:
3434 return MISCREG_PMEVTYPER4_EL0;
3435 case 5:
3436 return MISCREG_PMEVTYPER5_EL0;
3437 }
3438 break;
3439 case 15:
3440 switch (op2) {
3441 case 7:
3442 return MISCREG_PMCCFILTR_EL0;
3443 }
3444 }
3445 break;
3446 case 4:
3447 switch (crm) {
3448 case 0:
3449 switch (op2) {
3450 case 3:
3451 return MISCREG_CNTVOFF_EL2;
3452 }
3453 break;
3454 case 1:
3455 switch (op2) {
3456 case 0:
3457 return MISCREG_CNTHCTL_EL2;
3458 }
3459 break;
3460 case 2:
3461 switch (op2) {
3462 case 0:
3463 return MISCREG_CNTHP_TVAL_EL2;
3464 case 1:
3465 return MISCREG_CNTHP_CTL_EL2;
3466 case 2:
3467 return MISCREG_CNTHP_CVAL_EL2;
3468 }
3469 break;
3470 }
3471 break;
3472 case 7:
3473 switch (crm) {
3474 case 2:
3475 switch (op2) {
3476 case 0:
3477 return MISCREG_CNTPS_TVAL_EL1;
3478 case 1:
3479 return MISCREG_CNTPS_CTL_EL1;
3480 case 2:
3481 return MISCREG_CNTPS_CVAL_EL1;
3482 }
3483 break;
3484 }
3485 break;
3486 }
3487 break;
3488 case 15:
3489 switch (op1) {
3490 case 0:
3491 switch (crm) {
3492 case 0:
3493 switch (op2) {
3494 case 0:
3495 return MISCREG_IL1DATA0_EL1;
3496 case 1:
3497 return MISCREG_IL1DATA1_EL1;
3498 case 2:
3499 return MISCREG_IL1DATA2_EL1;
3500 case 3:
3501 return MISCREG_IL1DATA3_EL1;
3502 }
3503 break;
3504 case 1:
3505 switch (op2) {
3506 case 0:
3507 return MISCREG_DL1DATA0_EL1;
3508 case 1:
3509 return MISCREG_DL1DATA1_EL1;
3510 case 2:
3511 return MISCREG_DL1DATA2_EL1;
3512 case 3:
3513 return MISCREG_DL1DATA3_EL1;
3514 case 4:
3515 return MISCREG_DL1DATA4_EL1;
3516 }
3517 break;
3518 }
3519 break;
3520 case 1:
3521 switch (crm) {
3522 case 0:
3523 switch (op2) {
3524 case 0:
3525 return MISCREG_L2ACTLR_EL1;
3526 }
3527 break;
3528 case 2:
3529 switch (op2) {
3530 case 0:
3531 return MISCREG_CPUACTLR_EL1;
3532 case 1:
3533 return MISCREG_CPUECTLR_EL1;
3534 case 2:
3535 return MISCREG_CPUMERRSR_EL1;
3536 case 3:
3537 return MISCREG_L2MERRSR_EL1;
3538 }
3539 break;
3540 case 3:
3541 switch (op2) {
3542 case 0:
3543 return MISCREG_CBAR_EL1;
3544
3545 }
3546 break;
3547 }
3548 break;
3549 }
3550 break;
3551 }
3552 break;
3553 }
3554
3555 return MISCREG_UNKNOWN;
3556}
3557
3558} // namespace ArmISA
45#include "base/misc.hh"
46#include "cpu/thread_context.hh"
47#include "sim/full_system.hh"
48
49namespace ArmISA
50{
51
52MiscRegIndex
53decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
54{
55 switch(crn) {
56 case 0:
57 switch (opc1) {
58 case 0:
59 switch (opc2) {
60 case 0:
61 switch (crm) {
62 case 0:
63 return MISCREG_DBGDIDR;
64 case 1:
65 return MISCREG_DBGDSCRint;
66 }
67 break;
68 }
69 break;
70 case 7:
71 switch (opc2) {
72 case 0:
73 switch (crm) {
74 case 0:
75 return MISCREG_JIDR;
76 }
77 break;
78 }
79 break;
80 }
81 break;
82 case 1:
83 switch (opc1) {
84 case 6:
85 switch (crm) {
86 case 0:
87 switch (opc2) {
88 case 0:
89 return MISCREG_TEEHBR;
90 }
91 break;
92 }
93 break;
94 case 7:
95 switch (crm) {
96 case 0:
97 switch (opc2) {
98 case 0:
99 return MISCREG_JOSCR;
100 }
101 break;
102 }
103 break;
104 }
105 break;
106 case 2:
107 switch (opc1) {
108 case 7:
109 switch (crm) {
110 case 0:
111 switch (opc2) {
112 case 0:
113 return MISCREG_JMCR;
114 }
115 break;
116 }
117 break;
118 }
119 break;
120 }
121 // If we get here then it must be a register that we haven't implemented
122 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
123 crn, opc1, crm, opc2);
124 return MISCREG_CP14_UNIMPL;
125}
126
127using namespace std;
128
129bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS] = {
130 // MISCREG_CPSR
131 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
132 // MISCREG_SPSR
133 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
134 // MISCREG_SPSR_FIQ
135 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
136 // MISCREG_SPSR_IRQ
137 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
138 // MISCREG_SPSR_SVC
139 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
140 // MISCREG_SPSR_MON
141 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
142 // MISCREG_SPSR_ABT
143 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
144 // MISCREG_SPSR_HYP
145 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
146 // MISCREG_SPSR_UND
147 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
148 // MISCREG_ELR_HYP
149 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
150 // MISCREG_FPSID
151 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
152 // MISCREG_FPSCR
153 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
154 // MISCREG_MVFR1
155 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
156 // MISCREG_MVFR0
157 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
158 // MISCREG_FPEXC
159 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
160
161 // Helper registers
162 // MISCREG_CPSR_MODE
163 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
164 // MISCREG_CPSR_Q
165 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
166 // MISCREG_FPSCR_Q
167 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
168 // MISCREG_FPSCR_EXC
169 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
170 // MISCREG_LOCKADDR
171 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
172 // MISCREG_LOCKFLAG
173 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
174 // MISCREG_PRRR_MAIR0
175 bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
176 // MISCREG_PRRR_MAIR0_NS
177 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
178 // MISCREG_PRRR_MAIR0_S
179 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
180 // MISCREG_NMRR_MAIR1
181 bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
182 // MISCREG_NMRR_MAIR1_NS
183 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
184 // MISCREG_NMRR_MAIR1_S
185 bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
186 // MISCREG_PMXEVTYPER_PMCCFILTR
187 bitset<NUM_MISCREG_INFOS>(string("00000000000000001001")),
188 // MISCREG_SCTLR_RST
189 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
190 // MISCREG_SEV_MAILBOX
191 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
192
193 // AArch32 CP14 registers
194 // MISCREG_DBGDIDR
195 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
196 // MISCREG_DBGDSCRint
197 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
198 // MISCREG_DBGDCCINT
199 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
200 // MISCREG_DBGDTRTXint
201 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
202 // MISCREG_DBGDTRRXint
203 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
204 // MISCREG_DBGWFAR
205 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
206 // MISCREG_DBGVCR
207 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
208 // MISCREG_DBGDTRRXext
209 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
210 // MISCREG_DBGDSCRext
211 bitset<NUM_MISCREG_INFOS>(string("11111111111111000100")),
212 // MISCREG_DBGDTRTXext
213 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
214 // MISCREG_DBGOSECCR
215 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
216 // MISCREG_DBGBVR0
217 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
218 // MISCREG_DBGBVR1
219 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
220 // MISCREG_DBGBVR2
221 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
222 // MISCREG_DBGBVR3
223 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
224 // MISCREG_DBGBVR4
225 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
226 // MISCREG_DBGBVR5
227 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
228 // MISCREG_DBGBCR0
229 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
230 // MISCREG_DBGBCR1
231 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
232 // MISCREG_DBGBCR2
233 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
234 // MISCREG_DBGBCR3
235 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
236 // MISCREG_DBGBCR4
237 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
238 // MISCREG_DBGBCR5
239 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
240 // MISCREG_DBGWVR0
241 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
242 // MISCREG_DBGWVR1
243 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
244 // MISCREG_DBGWVR2
245 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
246 // MISCREG_DBGWVR3
247 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
248 // MISCREG_DBGWCR0
249 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
250 // MISCREG_DBGWCR1
251 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
252 // MISCREG_DBGWCR2
253 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
254 // MISCREG_DBGWCR3
255 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
256 // MISCREG_DBGDRAR
257 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
258 // MISCREG_DBGBXVR4
259 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
260 // MISCREG_DBGBXVR5
261 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
262 // MISCREG_DBGOSLAR
263 bitset<NUM_MISCREG_INFOS>(string("10101111111111000000")),
264 // MISCREG_DBGOSLSR
265 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
266 // MISCREG_DBGOSDLR
267 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
268 // MISCREG_DBGPRCR
269 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
270 // MISCREG_DBGDSAR
271 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
272 // MISCREG_DBGCLAIMSET
273 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
274 // MISCREG_DBGCLAIMCLR
275 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
276 // MISCREG_DBGAUTHSTATUS
277 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
278 // MISCREG_DBGDEVID2
279 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
280 // MISCREG_DBGDEVID1
281 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
282 // MISCREG_DBGDEVID0
283 bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
284 // MISCREG_TEECR
285 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
286 // MISCREG_JIDR
287 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
288 // MISCREG_TEEHBR
289 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
290 // MISCREG_JOSCR
291 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
292 // MISCREG_JMCR
293 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
294
295 // AArch32 CP15 registers
296 // MISCREG_MIDR
297 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
298 // MISCREG_CTR
299 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
300 // MISCREG_TCMTR
301 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
302 // MISCREG_TLBTR
303 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
304 // MISCREG_MPIDR
305 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
306 // MISCREG_REVIDR
307 bitset<NUM_MISCREG_INFOS>(string("01010101010000000100")),
308 // MISCREG_ID_PFR0
309 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
310 // MISCREG_ID_PFR1
311 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
312 // MISCREG_ID_DFR0
313 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
314 // MISCREG_ID_AFR0
315 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
316 // MISCREG_ID_MMFR0
317 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
318 // MISCREG_ID_MMFR1
319 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
320 // MISCREG_ID_MMFR2
321 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
322 // MISCREG_ID_MMFR3
323 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
324 // MISCREG_ID_ISAR0
325 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
326 // MISCREG_ID_ISAR1
327 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
328 // MISCREG_ID_ISAR2
329 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
330 // MISCREG_ID_ISAR3
331 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
332 // MISCREG_ID_ISAR4
333 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
334 // MISCREG_ID_ISAR5
335 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
336 // MISCREG_CCSIDR
337 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
338 // MISCREG_CLIDR
339 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
340 // MISCREG_AIDR
341 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
342 // MISCREG_CSSELR
343 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
344 // MISCREG_CSSELR_NS
345 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
346 // MISCREG_CSSELR_S
347 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
348 // MISCREG_VPIDR
349 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
350 // MISCREG_VMPIDR
351 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
352 // MISCREG_SCTLR
353 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
354 // MISCREG_SCTLR_NS
355 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
356 // MISCREG_SCTLR_S
357 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
358 // MISCREG_ACTLR
359 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
360 // MISCREG_ACTLR_NS
361 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
362 // MISCREG_ACTLR_S
363 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
364 // MISCREG_CPACR
365 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
366 // MISCREG_SCR
367 bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
368 // MISCREG_SDER
369 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
370 // MISCREG_NSACR
371 bitset<NUM_MISCREG_INFOS>(string("11110111010000000001")),
372 // MISCREG_HSCTLR
373 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
374 // MISCREG_HACTLR
375 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
376 // MISCREG_HCR
377 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
378 // MISCREG_HDCR
379 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
380 // MISCREG_HCPTR
381 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
382 // MISCREG_HSTR
383 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
384 // MISCREG_HACR
385 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
386 // MISCREG_TTBR0
387 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
388 // MISCREG_TTBR0_NS
389 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
390 // MISCREG_TTBR0_S
391 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
392 // MISCREG_TTBR1
393 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
394 // MISCREG_TTBR1_NS
395 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
396 // MISCREG_TTBR1_S
397 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
398 // MISCREG_TTBCR
399 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
400 // MISCREG_TTBCR_NS
401 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
402 // MISCREG_TTBCR_S
403 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
404 // MISCREG_HTCR
405 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
406 // MISCREG_VTCR
407 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
408 // MISCREG_DACR
409 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
410 // MISCREG_DACR_NS
411 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
412 // MISCREG_DACR_S
413 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
414 // MISCREG_DFSR
415 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
416 // MISCREG_DFSR_NS
417 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
418 // MISCREG_DFSR_S
419 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
420 // MISCREG_IFSR
421 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
422 // MISCREG_IFSR_NS
423 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
424 // MISCREG_IFSR_S
425 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
426 // MISCREG_ADFSR
427 bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
428 // MISCREG_ADFSR_NS
429 bitset<NUM_MISCREG_INFOS>(string("11001100110000100100")),
430 // MISCREG_ADFSR_S
431 bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
432 // MISCREG_AIFSR
433 bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
434 // MISCREG_AIFSR_NS
435 bitset<NUM_MISCREG_INFOS>(string("11001100110000100100")),
436 // MISCREG_AIFSR_S
437 bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
438 // MISCREG_HADFSR
439 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
440 // MISCREG_HAIFSR
441 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
442 // MISCREG_HSR
443 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
444 // MISCREG_DFAR
445 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
446 // MISCREG_DFAR_NS
447 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
448 // MISCREG_DFAR_S
449 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
450 // MISCREG_IFAR
451 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
452 // MISCREG_IFAR_NS
453 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
454 // MISCREG_IFAR_S
455 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
456 // MISCREG_HDFAR
457 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
458 // MISCREG_HIFAR
459 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
460 // MISCREG_HPFAR
461 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
462 // MISCREG_ICIALLUIS
463 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
464 // MISCREG_BPIALLIS
465 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
466 // MISCREG_PAR
467 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
468 // MISCREG_PAR_NS
469 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
470 // MISCREG_PAR_S
471 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
472 // MISCREG_ICIALLU
473 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
474 // MISCREG_ICIMVAU
475 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
476 // MISCREG_CP15ISB
477 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
478 // MISCREG_BPIALL
479 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
480 // MISCREG_BPIMVA
481 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
482 // MISCREG_DCIMVAC
483 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
484 // MISCREG_DCISW
485 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
486 // MISCREG_ATS1CPR
487 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
488 // MISCREG_ATS1CPW
489 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
490 // MISCREG_ATS1CUR
491 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
492 // MISCREG_ATS1CUW
493 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
494 // MISCREG_ATS12NSOPR
495 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
496 // MISCREG_ATS12NSOPW
497 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
498 // MISCREG_ATS12NSOUR
499 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
500 // MISCREG_ATS12NSOUW
501 bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
502 // MISCREG_DCCMVAC
503 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
504 // MISCREG_DCCSW
505 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
506 // MISCREG_CP15DSB
507 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
508 // MISCREG_CP15DMB
509 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
510 // MISCREG_DCCMVAU
511 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
512 // MISCREG_DCCIMVAC
513 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
514 // MISCREG_DCCISW
515 bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
516 // MISCREG_ATS1HR
517 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
518 // MISCREG_ATS1HW
519 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
520 // MISCREG_TLBIALLIS
521 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
522 // MISCREG_TLBIMVAIS
523 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
524 // MISCREG_TLBIASIDIS
525 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
526 // MISCREG_TLBIMVAAIS
527 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
528 // MISCREG_TLBIMVALIS
529 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
530 // MISCREG_TLBIMVAALIS
531 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
532 // MISCREG_ITLBIALL
533 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
534 // MISCREG_ITLBIMVA
535 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
536 // MISCREG_ITLBIASID
537 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
538 // MISCREG_DTLBIALL
539 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
540 // MISCREG_DTLBIMVA
541 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
542 // MISCREG_DTLBIASID
543 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
544 // MISCREG_TLBIALL
545 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
546 // MISCREG_TLBIMVA
547 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
548 // MISCREG_TLBIASID
549 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
550 // MISCREG_TLBIMVAA
551 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
552 // MISCREG_TLBIMVAL
553 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
554 // MISCREG_TLBIMVAAL
555 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
556 // MISCREG_TLBIIPAS2IS
557 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
558 // MISCREG_TLBIIPAS2LIS
559 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
560 // MISCREG_TLBIALLHIS
561 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
562 // MISCREG_TLBIMVAHIS
563 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
564 // MISCREG_TLBIALLNSNHIS
565 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
566 // MISCREG_TLBIMVALHIS
567 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
568 // MISCREG_TLBIIPAS2
569 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
570 // MISCREG_TLBIIPAS2L
571 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
572 // MISCREG_TLBIALLH
573 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
574 // MISCREG_TLBIMVAH
575 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
576 // MISCREG_TLBIALLNSNH
577 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
578 // MISCREG_TLBIMVALH
579 bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
580 // MISCREG_PMCR
581 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
582 // MISCREG_PMCNTENSET
583 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
584 // MISCREG_PMCNTENCLR
585 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
586 // MISCREG_PMOVSR
587 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
588 // MISCREG_PMSWINC
589 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
590 // MISCREG_PMSELR
591 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
592 // MISCREG_PMCEID0
593 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
594 // MISCREG_PMCEID1
595 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
596 // MISCREG_PMCCNTR
597 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
598 // MISCREG_PMXEVTYPER
599 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
600 // MISCREG_PMCCFILTR
601 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
602 // MISCREG_PMXEVCNTR
603 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
604 // MISCREG_PMUSERENR
605 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
606 // MISCREG_PMINTENSET
607 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
608 // MISCREG_PMINTENCLR
609 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
610 // MISCREG_PMOVSSET
611 bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
612 // MISCREG_L2CTLR
613 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
614 // MISCREG_L2ECTLR
615 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
616 // MISCREG_PRRR
617 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
618 // MISCREG_PRRR_NS
619 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
620 // MISCREG_PRRR_S
621 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
622 // MISCREG_MAIR0
623 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
624 // MISCREG_MAIR0_NS
625 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
626 // MISCREG_MAIR0_S
627 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
628 // MISCREG_NMRR
629 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
630 // MISCREG_NMRR_NS
631 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
632 // MISCREG_NMRR_S
633 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
634 // MISCREG_MAIR1
635 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
636 // MISCREG_MAIR1_NS
637 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
638 // MISCREG_MAIR1_S
639 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
640 // MISCREG_AMAIR0
641 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
642 // MISCREG_AMAIR0_NS
643 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
644 // MISCREG_AMAIR0_S
645 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
646 // MISCREG_AMAIR1
647 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
648 // MISCREG_AMAIR1_NS
649 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
650 // MISCREG_AMAIR1_S
651 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
652 // MISCREG_HMAIR0
653 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
654 // MISCREG_HMAIR1
655 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
656 // MISCREG_HAMAIR0
657 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
658 // MISCREG_HAMAIR1
659 bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
660 // MISCREG_VBAR
661 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
662 // MISCREG_VBAR_NS
663 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
664 // MISCREG_VBAR_S
665 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
666 // MISCREG_MVBAR
667 bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
668 // MISCREG_RMR
669 bitset<NUM_MISCREG_INFOS>(string("11110011000000000000")),
670 // MISCREG_ISR
671 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
672 // MISCREG_HVBAR
673 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
674 // MISCREG_FCSEIDR
675 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
676 // MISCREG_CONTEXTIDR
677 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
678 // MISCREG_CONTEXTIDR_NS
679 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
680 // MISCREG_CONTEXTIDR_S
681 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
682 // MISCREG_TPIDRURW
683 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
684 // MISCREG_TPIDRURW_NS
685 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
686 // MISCREG_TPIDRURW_S
687 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
688 // MISCREG_TPIDRURO
689 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
690 // MISCREG_TPIDRURO_NS
691 bitset<NUM_MISCREG_INFOS>(string("11001100110101100001")),
692 // MISCREG_TPIDRURO_S
693 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
694 // MISCREG_TPIDRPRW
695 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
696 // MISCREG_TPIDRPRW_NS
697 bitset<NUM_MISCREG_INFOS>(string("11001100110000100001")),
698 // MISCREG_TPIDRPRW_S
699 bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
700 // MISCREG_HTPIDR
701 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
702 // MISCREG_CNTFRQ
703 bitset<NUM_MISCREG_INFOS>(string("11110101010101000011")),
704 // MISCREG_CNTKCTL
705 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
706 // MISCREG_CNTP_TVAL
707 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
708 // MISCREG_CNTP_TVAL_NS
709 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
710 // MISCREG_CNTP_TVAL_S
711 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
712 // MISCREG_CNTP_CTL
713 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
714 // MISCREG_CNTP_CTL_NS
715 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
716 // MISCREG_CNTP_CTL_S
717 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
718 // MISCREG_CNTV_TVAL
719 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
720 // MISCREG_CNTV_CTL
721 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
722 // MISCREG_CNTHCTL
723 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
724 // MISCREG_CNTHP_TVAL
725 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
726 // MISCREG_CNTHP_CTL
727 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
728 // MISCREG_IL1DATA0
729 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
730 // MISCREG_IL1DATA1
731 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
732 // MISCREG_IL1DATA2
733 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
734 // MISCREG_IL1DATA3
735 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
736 // MISCREG_DL1DATA0
737 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
738 // MISCREG_DL1DATA1
739 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
740 // MISCREG_DL1DATA2
741 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
742 // MISCREG_DL1DATA3
743 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
744 // MISCREG_DL1DATA4
745 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
746 // MISCREG_RAMINDEX
747 bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
748 // MISCREG_L2ACTLR
749 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
750 // MISCREG_CBAR
751 bitset<NUM_MISCREG_INFOS>(string("01010101010000000000")),
752 // MISCREG_HTTBR
753 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
754 // MISCREG_VTTBR
755 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
756 // MISCREG_CNTPCT
757 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
758 // MISCREG_CNTVCT
759 bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
760 // MISCREG_CNTP_CVAL
761 bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
762 // MISCREG_CNTP_CVAL_NS
763 bitset<NUM_MISCREG_INFOS>(string("11001100111111100001")),
764 // MISCREG_CNTP_CVAL_S
765 bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
766 // MISCREG_CNTV_CVAL
767 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
768 // MISCREG_CNTVOFF
769 bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
770 // MISCREG_CNTHP_CVAL
771 bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
772 // MISCREG_CPUMERRSR
773 bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
774 // MISCREG_L2MERRSR
775 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
776
777 // AArch64 registers (Op0=2)
778 // MISCREG_MDCCINT_EL1
779 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
780 // MISCREG_OSDTRRX_EL1
781 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
782 // MISCREG_MDSCR_EL1
783 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
784 // MISCREG_OSDTRTX_EL1
785 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
786 // MISCREG_OSECCR_EL1
787 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
788 // MISCREG_DBGBVR0_EL1
789 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
790 // MISCREG_DBGBVR1_EL1
791 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
792 // MISCREG_DBGBVR2_EL1
793 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
794 // MISCREG_DBGBVR3_EL1
795 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
796 // MISCREG_DBGBVR4_EL1
797 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
798 // MISCREG_DBGBVR5_EL1
799 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
800 // MISCREG_DBGBCR0_EL1
801 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
802 // MISCREG_DBGBCR1_EL1
803 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
804 // MISCREG_DBGBCR2_EL1
805 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
806 // MISCREG_DBGBCR3_EL1
807 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
808 // MISCREG_DBGBCR4_EL1
809 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
810 // MISCREG_DBGBCR5_EL1
811 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
812 // MISCREG_DBGWVR0_EL1
813 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
814 // MISCREG_DBGWVR1_EL1
815 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
816 // MISCREG_DBGWVR2_EL1
817 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
818 // MISCREG_DBGWVR3_EL1
819 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
820 // MISCREG_DBGWCR0_EL1
821 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
822 // MISCREG_DBGWCR1_EL1
823 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
824 // MISCREG_DBGWCR2_EL1
825 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
826 // MISCREG_DBGWCR3_EL1
827 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
828 // MISCREG_MDCCSR_EL0
829 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
830 // MISCREG_MDDTR_EL0
831 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
832 // MISCREG_MDDTRTX_EL0
833 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
834 // MISCREG_MDDTRRX_EL0
835 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
836 // MISCREG_DBGVCR32_EL2
837 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
838 // MISCREG_MDRAR_EL1
839 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
840 // MISCREG_OSLAR_EL1
841 bitset<NUM_MISCREG_INFOS>(string("10101111111111000001")),
842 // MISCREG_OSLSR_EL1
843 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
844 // MISCREG_OSDLR_EL1
845 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
846 // MISCREG_DBGPRCR_EL1
847 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
848 // MISCREG_DBGCLAIMSET_EL1
849 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
850 // MISCREG_DBGCLAIMCLR_EL1
851 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
852 // MISCREG_DBGAUTHSTATUS_EL1
853 bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
854 // MISCREG_TEECR32_EL1
855 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
856 // MISCREG_TEEHBR32_EL1
857 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
858
859 // AArch64 registers (Op0=1,3)
860 // MISCREG_MIDR_EL1
861 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
862 // MISCREG_MPIDR_EL1
863 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
864 // MISCREG_REVIDR_EL1
865 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
866 // MISCREG_ID_PFR0_EL1
867 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
868 // MISCREG_ID_PFR1_EL1
869 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
870 // MISCREG_ID_DFR0_EL1
871 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
872 // MISCREG_ID_AFR0_EL1
873 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
874 // MISCREG_ID_MMFR0_EL1
875 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
876 // MISCREG_ID_MMFR1_EL1
877 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
878 // MISCREG_ID_MMFR2_EL1
879 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
880 // MISCREG_ID_MMFR3_EL1
881 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
882 // MISCREG_ID_ISAR0_EL1
883 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
884 // MISCREG_ID_ISAR1_EL1
885 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
886 // MISCREG_ID_ISAR2_EL1
887 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
888 // MISCREG_ID_ISAR3_EL1
889 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
890 // MISCREG_ID_ISAR4_EL1
891 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
892 // MISCREG_ID_ISAR5_EL1
893 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
894 // MISCREG_MVFR0_EL1
895 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
896 // MISCREG_MVFR1_EL1
897 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
898 // MISCREG_MVFR2_EL1
899 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
900 // MISCREG_ID_AA64PFR0_EL1
901 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
902 // MISCREG_ID_AA64PFR1_EL1
903 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
904 // MISCREG_ID_AA64DFR0_EL1
905 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
906 // MISCREG_ID_AA64DFR1_EL1
907 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
908 // MISCREG_ID_AA64AFR0_EL1
909 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
910 // MISCREG_ID_AA64AFR1_EL1
911 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
912 // MISCREG_ID_AA64ISAR0_EL1
913 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
914 // MISCREG_ID_AA64ISAR1_EL1
915 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
916 // MISCREG_ID_AA64MMFR0_EL1
917 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
918 // MISCREG_ID_AA64MMFR1_EL1
919 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
920 // MISCREG_CCSIDR_EL1
921 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
922 // MISCREG_CLIDR_EL1
923 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
924 // MISCREG_AIDR_EL1
925 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
926 // MISCREG_CSSELR_EL1
927 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
928 // MISCREG_CTR_EL0
929 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
930 // MISCREG_DCZID_EL0
931 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
932 // MISCREG_VPIDR_EL2
933 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
934 // MISCREG_VMPIDR_EL2
935 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
936 // MISCREG_SCTLR_EL1
937 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
938 // MISCREG_ACTLR_EL1
939 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
940 // MISCREG_CPACR_EL1
941 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
942 // MISCREG_SCTLR_EL2
943 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
944 // MISCREG_ACTLR_EL2
945 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
946 // MISCREG_HCR_EL2
947 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
948 // MISCREG_MDCR_EL2
949 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
950 // MISCREG_CPTR_EL2
951 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
952 // MISCREG_HSTR_EL2
953 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
954 // MISCREG_HACR_EL2
955 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
956 // MISCREG_SCTLR_EL3
957 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
958 // MISCREG_ACTLR_EL3
959 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
960 // MISCREG_SCR_EL3
961 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
962 // MISCREG_SDER32_EL3
963 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
964 // MISCREG_CPTR_EL3
965 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
966 // MISCREG_MDCR_EL3
967 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
968 // MISCREG_TTBR0_EL1
969 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
970 // MISCREG_TTBR1_EL1
971 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
972 // MISCREG_TCR_EL1
973 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
974 // MISCREG_TTBR0_EL2
975 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
976 // MISCREG_TCR_EL2
977 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
978 // MISCREG_VTTBR_EL2
979 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
980 // MISCREG_VTCR_EL2
981 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
982 // MISCREG_TTBR0_EL3
983 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
984 // MISCREG_TCR_EL3
985 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
986 // MISCREG_DACR32_EL2
987 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
988 // MISCREG_SPSR_EL1
989 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
990 // MISCREG_ELR_EL1
991 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
992 // MISCREG_SP_EL0
993 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
994 // MISCREG_SPSEL
995 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
996 // MISCREG_CURRENTEL
997 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
998 // MISCREG_NZCV
999 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1000 // MISCREG_DAIF
1001 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1002 // MISCREG_FPCR
1003 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1004 // MISCREG_FPSR
1005 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1006 // MISCREG_DSPSR_EL0
1007 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1008 // MISCREG_DLR_EL0
1009 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1010 // MISCREG_SPSR_EL2
1011 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1012 // MISCREG_ELR_EL2
1013 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1014 // MISCREG_SP_EL1
1015 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1016 // MISCREG_SPSR_IRQ_AA64
1017 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1018 // MISCREG_SPSR_ABT_AA64
1019 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1020 // MISCREG_SPSR_UND_AA64
1021 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1022 // MISCREG_SPSR_FIQ_AA64
1023 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1024 // MISCREG_SPSR_EL3
1025 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1026 // MISCREG_ELR_EL3
1027 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1028 // MISCREG_SP_EL2
1029 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1030 // MISCREG_AFSR0_EL1
1031 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1032 // MISCREG_AFSR1_EL1
1033 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1034 // MISCREG_ESR_EL1
1035 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1036 // MISCREG_IFSR32_EL2
1037 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1038 // MISCREG_AFSR0_EL2
1039 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1040 // MISCREG_AFSR1_EL2
1041 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1042 // MISCREG_ESR_EL2
1043 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1044 // MISCREG_FPEXC32_EL2
1045 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1046 // MISCREG_AFSR0_EL3
1047 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1048 // MISCREG_AFSR1_EL3
1049 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1050 // MISCREG_ESR_EL3
1051 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1052 // MISCREG_FAR_EL1
1053 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1054 // MISCREG_FAR_EL2
1055 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1056 // MISCREG_HPFAR_EL2
1057 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1058 // MISCREG_FAR_EL3
1059 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1060 // MISCREG_IC_IALLUIS
1061 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1062 // MISCREG_PAR_EL1
1063 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1064 // MISCREG_IC_IALLU
1065 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1066 // MISCREG_DC_IVAC_Xt
1067 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1068 // MISCREG_DC_ISW_Xt
1069 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1070 // MISCREG_AT_S1E1R_Xt
1071 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1072 // MISCREG_AT_S1E1W_Xt
1073 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1074 // MISCREG_AT_S1E0R_Xt
1075 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1076 // MISCREG_AT_S1E0W_Xt
1077 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1078 // MISCREG_DC_CSW_Xt
1079 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1080 // MISCREG_DC_CISW_Xt
1081 bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
1082 // MISCREG_DC_ZVA_Xt
1083 bitset<NUM_MISCREG_INFOS>(string("10101010100010000101")),
1084 // MISCREG_IC_IVAU_Xt
1085 bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
1086 // MISCREG_DC_CVAC_Xt
1087 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1088 // MISCREG_DC_CVAU_Xt
1089 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1090 // MISCREG_DC_CIVAC_Xt
1091 bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
1092 // MISCREG_AT_S1E2R_Xt
1093 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1094 // MISCREG_AT_S1E2W_Xt
1095 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1096 // MISCREG_AT_S12E1R_Xt
1097 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1098 // MISCREG_AT_S12E1W_Xt
1099 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1100 // MISCREG_AT_S12E0R_Xt
1101 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1102 // MISCREG_AT_S12E0W_Xt
1103 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1104 // MISCREG_AT_S1E3R_Xt
1105 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1106 // MISCREG_AT_S1E3W_Xt
1107 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1108 // MISCREG_TLBI_VMALLE1IS
1109 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1110 // MISCREG_TLBI_VAE1IS_Xt
1111 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1112 // MISCREG_TLBI_ASIDE1IS_Xt
1113 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1114 // MISCREG_TLBI_VAAE1IS_Xt
1115 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1116 // MISCREG_TLBI_VALE1IS_Xt
1117 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1118 // MISCREG_TLBI_VAALE1IS_Xt
1119 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1120 // MISCREG_TLBI_VMALLE1
1121 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1122 // MISCREG_TLBI_VAE1_Xt
1123 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1124 // MISCREG_TLBI_ASIDE1_Xt
1125 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1126 // MISCREG_TLBI_VAAE1_Xt
1127 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1128 // MISCREG_TLBI_VALE1_Xt
1129 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1130 // MISCREG_TLBI_VAALE1_Xt
1131 bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
1132 // MISCREG_TLBI_IPAS2E1IS_Xt
1133 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1134 // MISCREG_TLBI_IPAS2LE1IS_Xt
1135 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1136 // MISCREG_TLBI_ALLE2IS
1137 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1138 // MISCREG_TLBI_VAE2IS_Xt
1139 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1140 // MISCREG_TLBI_ALLE1IS
1141 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1142 // MISCREG_TLBI_VALE2IS_Xt
1143 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1144 // MISCREG_TLBI_VMALLS12E1IS
1145 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1146 // MISCREG_TLBI_IPAS2E1_Xt
1147 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1148 // MISCREG_TLBI_IPAS2LE1_Xt
1149 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1150 // MISCREG_TLBI_ALLE2
1151 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1152 // MISCREG_TLBI_VAE2_Xt
1153 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1154 // MISCREG_TLBI_ALLE1
1155 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1156 // MISCREG_TLBI_VALE2_Xt
1157 bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
1158 // MISCREG_TLBI_VMALLS12E1
1159 bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
1160 // MISCREG_TLBI_ALLE3IS
1161 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1162 // MISCREG_TLBI_VAE3IS_Xt
1163 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1164 // MISCREG_TLBI_VALE3IS_Xt
1165 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1166 // MISCREG_TLBI_ALLE3
1167 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1168 // MISCREG_TLBI_VAE3_Xt
1169 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1170 // MISCREG_TLBI_VALE3_Xt
1171 bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
1172 // MISCREG_PMINTENSET_EL1
1173 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1174 // MISCREG_PMINTENCLR_EL1
1175 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1176 // MISCREG_PMCR_EL0
1177 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1178 // MISCREG_PMCNTENSET_EL0
1179 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1180 // MISCREG_PMCNTENCLR_EL0
1181 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1182 // MISCREG_PMOVSCLR_EL0
1183 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1184 // MISCREG_PMSWINC_EL0
1185 bitset<NUM_MISCREG_INFOS>(string("10101010101111000001")),
1186 // MISCREG_PMSELR_EL0
1187 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1188 // MISCREG_PMCEID0_EL0
1189 bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
1190 // MISCREG_PMCEID1_EL0
1191 bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
1192 // MISCREG_PMCCNTR_EL0
1193 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1194 // MISCREG_PMXEVTYPER_EL0
1195 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1196 // MISCREG_PMCCFILTR_EL0
1197 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1198 // MISCREG_PMXEVCNTR_EL0
1199 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1200 // MISCREG_PMUSERENR_EL0
1201 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
1202 // MISCREG_PMOVSSET_EL0
1203 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1204 // MISCREG_MAIR_EL1
1205 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1206 // MISCREG_AMAIR_EL1
1207 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1208 // MISCREG_MAIR_EL2
1209 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1210 // MISCREG_AMAIR_EL2
1211 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1212 // MISCREG_MAIR_EL3
1213 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1214 // MISCREG_AMAIR_EL3
1215 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1216 // MISCREG_L2CTLR_EL1
1217 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1218 // MISCREG_L2ECTLR_EL1
1219 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1220 // MISCREG_VBAR_EL1
1221 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1222 // MISCREG_RVBAR_EL1
1223 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1224 // MISCREG_ISR_EL1
1225 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1226 // MISCREG_VBAR_EL2
1227 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1228 // MISCREG_RVBAR_EL2
1229 bitset<NUM_MISCREG_INFOS>(string("01010100000000000001")),
1230 // MISCREG_VBAR_EL3
1231 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1232 // MISCREG_RVBAR_EL3
1233 bitset<NUM_MISCREG_INFOS>(string("01010000000000000001")),
1234 // MISCREG_RMR_EL3
1235 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1236 // MISCREG_CONTEXTIDR_EL1
1237 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1238 // MISCREG_TPIDR_EL1
1239 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1240 // MISCREG_TPIDR_EL0
1241 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1242 // MISCREG_TPIDRRO_EL0
1243 bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
1244 // MISCREG_TPIDR_EL2
1245 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1246 // MISCREG_TPIDR_EL3
1247 bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
1248 // MISCREG_CNTKCTL_EL1
1249 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1250 // MISCREG_CNTFRQ_EL0
1251 bitset<NUM_MISCREG_INFOS>(string("11110101010101000001")),
1252 // MISCREG_CNTPCT_EL0
1253 bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
1254 // MISCREG_CNTVCT_EL0
1255 bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
1256 // MISCREG_CNTP_TVAL_EL0
1257 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1258 // MISCREG_CNTP_CTL_EL0
1259 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1260 // MISCREG_CNTP_CVAL_EL0
1261 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1262 // MISCREG_CNTV_TVAL_EL0
1263 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1264 // MISCREG_CNTV_CTL_EL0
1265 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1266 // MISCREG_CNTV_CVAL_EL0
1267 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1268 // MISCREG_PMEVCNTR0_EL0
1269 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1270 // MISCREG_PMEVCNTR1_EL0
1271 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1272 // MISCREG_PMEVCNTR2_EL0
1273 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1274 // MISCREG_PMEVCNTR3_EL0
1275 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1276 // MISCREG_PMEVCNTR4_EL0
1277 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1278 // MISCREG_PMEVCNTR5_EL0
1279 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1280 // MISCREG_PMEVTYPER0_EL0
1281 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1282 // MISCREG_PMEVTYPER1_EL0
1283 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1284 // MISCREG_PMEVTYPER2_EL0
1285 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1286 // MISCREG_PMEVTYPER3_EL0
1287 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1288 // MISCREG_PMEVTYPER4_EL0
1289 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1290 // MISCREG_PMEVTYPER5_EL0
1291 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1292 // MISCREG_CNTVOFF_EL2
1293 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1294 // MISCREG_CNTHCTL_EL2
1295 bitset<NUM_MISCREG_INFOS>(string("01111000000000000100")),
1296 // MISCREG_CNTHP_TVAL_EL2
1297 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1298 // MISCREG_CNTHP_CTL_EL2
1299 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1300 // MISCREG_CNTHP_CVAL_EL2
1301 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1302 // MISCREG_CNTPS_TVAL_EL1
1303 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1304 // MISCREG_CNTPS_CTL_EL1
1305 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1306 // MISCREG_CNTPS_CVAL_EL1
1307 bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
1308 // MISCREG_IL1DATA0_EL1
1309 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1310 // MISCREG_IL1DATA1_EL1
1311 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1312 // MISCREG_IL1DATA2_EL1
1313 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1314 // MISCREG_IL1DATA3_EL1
1315 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1316 // MISCREG_DL1DATA0_EL1
1317 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1318 // MISCREG_DL1DATA1_EL1
1319 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1320 // MISCREG_DL1DATA2_EL1
1321 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1322 // MISCREG_DL1DATA3_EL1
1323 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1324 // MISCREG_DL1DATA4_EL1
1325 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1326 // MISCREG_L2ACTLR_EL1
1327 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1328 // MISCREG_CPUACTLR_EL1
1329 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1330 // MISCREG_CPUECTLR_EL1
1331 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1332 // MISCREG_CPUMERRSR_EL1
1333 bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
1334 // MISCREG_L2MERRSR_EL1
1335 bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
1336 // MISCREG_CBAR_EL1
1337 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1338 // MISCREG_CONTEXTIDR_EL2
1339 bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
1340
1341 // Dummy registers
1342 // MISCREG_NOP
1343 bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
1344 // MISCREG_RAZ
1345 bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
1346 // MISCREG_CP14_UNIMPL
1347 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1348 // MISCREG_CP15_UNIMPL
1349 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1350 // MISCREG_A64_UNIMPL
1351 bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
1352 // MISCREG_UNKNOWN
1353 bitset<NUM_MISCREG_INFOS>(string("00000000000000000001"))
1354};
1355
1356MiscRegIndex
1357decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
1358{
1359 switch (crn) {
1360 case 0:
1361 switch (opc1) {
1362 case 0:
1363 switch (crm) {
1364 case 0:
1365 switch (opc2) {
1366 case 1:
1367 return MISCREG_CTR;
1368 case 2:
1369 return MISCREG_TCMTR;
1370 case 3:
1371 return MISCREG_TLBTR;
1372 case 5:
1373 return MISCREG_MPIDR;
1374 case 6:
1375 return MISCREG_REVIDR;
1376 default:
1377 return MISCREG_MIDR;
1378 }
1379 break;
1380 case 1:
1381 switch (opc2) {
1382 case 0:
1383 return MISCREG_ID_PFR0;
1384 case 1:
1385 return MISCREG_ID_PFR1;
1386 case 2:
1387 return MISCREG_ID_DFR0;
1388 case 3:
1389 return MISCREG_ID_AFR0;
1390 case 4:
1391 return MISCREG_ID_MMFR0;
1392 case 5:
1393 return MISCREG_ID_MMFR1;
1394 case 6:
1395 return MISCREG_ID_MMFR2;
1396 case 7:
1397 return MISCREG_ID_MMFR3;
1398 }
1399 break;
1400 case 2:
1401 switch (opc2) {
1402 case 0:
1403 return MISCREG_ID_ISAR0;
1404 case 1:
1405 return MISCREG_ID_ISAR1;
1406 case 2:
1407 return MISCREG_ID_ISAR2;
1408 case 3:
1409 return MISCREG_ID_ISAR3;
1410 case 4:
1411 return MISCREG_ID_ISAR4;
1412 case 5:
1413 return MISCREG_ID_ISAR5;
1414 case 6:
1415 case 7:
1416 return MISCREG_RAZ; // read as zero
1417 }
1418 break;
1419 default:
1420 return MISCREG_RAZ; // read as zero
1421 }
1422 break;
1423 case 1:
1424 if (crm == 0) {
1425 switch (opc2) {
1426 case 0:
1427 return MISCREG_CCSIDR;
1428 case 1:
1429 return MISCREG_CLIDR;
1430 case 7:
1431 return MISCREG_AIDR;
1432 }
1433 }
1434 break;
1435 case 2:
1436 if (crm == 0 && opc2 == 0) {
1437 return MISCREG_CSSELR;
1438 }
1439 break;
1440 case 4:
1441 if (crm == 0) {
1442 if (opc2 == 0)
1443 return MISCREG_VPIDR;
1444 else if (opc2 == 5)
1445 return MISCREG_VMPIDR;
1446 }
1447 break;
1448 }
1449 break;
1450 case 1:
1451 if (opc1 == 0) {
1452 if (crm == 0) {
1453 switch (opc2) {
1454 case 0:
1455 return MISCREG_SCTLR;
1456 case 1:
1457 return MISCREG_ACTLR;
1458 case 0x2:
1459 return MISCREG_CPACR;
1460 }
1461 } else if (crm == 1) {
1462 switch (opc2) {
1463 case 0:
1464 return MISCREG_SCR;
1465 case 1:
1466 return MISCREG_SDER;
1467 case 2:
1468 return MISCREG_NSACR;
1469 }
1470 }
1471 } else if (opc1 == 4) {
1472 if (crm == 0) {
1473 if (opc2 == 0)
1474 return MISCREG_HSCTLR;
1475 else if (opc2 == 1)
1476 return MISCREG_HACTLR;
1477 } else if (crm == 1) {
1478 switch (opc2) {
1479 case 0:
1480 return MISCREG_HCR;
1481 case 1:
1482 return MISCREG_HDCR;
1483 case 2:
1484 return MISCREG_HCPTR;
1485 case 3:
1486 return MISCREG_HSTR;
1487 case 7:
1488 return MISCREG_HACR;
1489 }
1490 }
1491 }
1492 break;
1493 case 2:
1494 if (opc1 == 0 && crm == 0) {
1495 switch (opc2) {
1496 case 0:
1497 return MISCREG_TTBR0;
1498 case 1:
1499 return MISCREG_TTBR1;
1500 case 2:
1501 return MISCREG_TTBCR;
1502 }
1503 } else if (opc1 == 4) {
1504 if (crm == 0 && opc2 == 2)
1505 return MISCREG_HTCR;
1506 else if (crm == 1 && opc2 == 2)
1507 return MISCREG_VTCR;
1508 }
1509 break;
1510 case 3:
1511 if (opc1 == 0 && crm == 0 && opc2 == 0) {
1512 return MISCREG_DACR;
1513 }
1514 break;
1515 case 5:
1516 if (opc1 == 0) {
1517 if (crm == 0) {
1518 if (opc2 == 0) {
1519 return MISCREG_DFSR;
1520 } else if (opc2 == 1) {
1521 return MISCREG_IFSR;
1522 }
1523 } else if (crm == 1) {
1524 if (opc2 == 0) {
1525 return MISCREG_ADFSR;
1526 } else if (opc2 == 1) {
1527 return MISCREG_AIFSR;
1528 }
1529 }
1530 } else if (opc1 == 4) {
1531 if (crm == 1) {
1532 if (opc2 == 0)
1533 return MISCREG_HADFSR;
1534 else if (opc2 == 1)
1535 return MISCREG_HAIFSR;
1536 } else if (crm == 2 && opc2 == 0) {
1537 return MISCREG_HSR;
1538 }
1539 }
1540 break;
1541 case 6:
1542 if (opc1 == 0 && crm == 0) {
1543 switch (opc2) {
1544 case 0:
1545 return MISCREG_DFAR;
1546 case 2:
1547 return MISCREG_IFAR;
1548 }
1549 } else if (opc1 == 4 && crm == 0) {
1550 switch (opc2) {
1551 case 0:
1552 return MISCREG_HDFAR;
1553 case 2:
1554 return MISCREG_HIFAR;
1555 case 4:
1556 return MISCREG_HPFAR;
1557 }
1558 }
1559 break;
1560 case 7:
1561 if (opc1 == 0) {
1562 switch (crm) {
1563 case 0:
1564 if (opc2 == 4) {
1565 return MISCREG_NOP;
1566 }
1567 break;
1568 case 1:
1569 switch (opc2) {
1570 case 0:
1571 return MISCREG_ICIALLUIS;
1572 case 6:
1573 return MISCREG_BPIALLIS;
1574 }
1575 break;
1576 case 4:
1577 if (opc2 == 0) {
1578 return MISCREG_PAR;
1579 }
1580 break;
1581 case 5:
1582 switch (opc2) {
1583 case 0:
1584 return MISCREG_ICIALLU;
1585 case 1:
1586 return MISCREG_ICIMVAU;
1587 case 4:
1588 return MISCREG_CP15ISB;
1589 case 6:
1590 return MISCREG_BPIALL;
1591 case 7:
1592 return MISCREG_BPIMVA;
1593 }
1594 break;
1595 case 6:
1596 if (opc2 == 1) {
1597 return MISCREG_DCIMVAC;
1598 } else if (opc2 == 2) {
1599 return MISCREG_DCISW;
1600 }
1601 break;
1602 case 8:
1603 switch (opc2) {
1604 case 0:
1605 return MISCREG_ATS1CPR;
1606 case 1:
1607 return MISCREG_ATS1CPW;
1608 case 2:
1609 return MISCREG_ATS1CUR;
1610 case 3:
1611 return MISCREG_ATS1CUW;
1612 case 4:
1613 return MISCREG_ATS12NSOPR;
1614 case 5:
1615 return MISCREG_ATS12NSOPW;
1616 case 6:
1617 return MISCREG_ATS12NSOUR;
1618 case 7:
1619 return MISCREG_ATS12NSOUW;
1620 }
1621 break;
1622 case 10:
1623 switch (opc2) {
1624 case 1:
1625 return MISCREG_DCCMVAC;
1626 case 2:
1627 return MISCREG_DCCSW;
1628 case 4:
1629 return MISCREG_CP15DSB;
1630 case 5:
1631 return MISCREG_CP15DMB;
1632 }
1633 break;
1634 case 11:
1635 if (opc2 == 1) {
1636 return MISCREG_DCCMVAU;
1637 }
1638 break;
1639 case 13:
1640 if (opc2 == 1) {
1641 return MISCREG_NOP;
1642 }
1643 break;
1644 case 14:
1645 if (opc2 == 1) {
1646 return MISCREG_DCCIMVAC;
1647 } else if (opc2 == 2) {
1648 return MISCREG_DCCISW;
1649 }
1650 break;
1651 }
1652 } else if (opc1 == 4 && crm == 8) {
1653 if (opc2 == 0)
1654 return MISCREG_ATS1HR;
1655 else if (opc2 == 1)
1656 return MISCREG_ATS1HW;
1657 }
1658 break;
1659 case 8:
1660 if (opc1 == 0) {
1661 switch (crm) {
1662 case 3:
1663 switch (opc2) {
1664 case 0:
1665 return MISCREG_TLBIALLIS;
1666 case 1:
1667 return MISCREG_TLBIMVAIS;
1668 case 2:
1669 return MISCREG_TLBIASIDIS;
1670 case 3:
1671 return MISCREG_TLBIMVAAIS;
1672 }
1673 break;
1674 case 5:
1675 switch (opc2) {
1676 case 0:
1677 return MISCREG_ITLBIALL;
1678 case 1:
1679 return MISCREG_ITLBIMVA;
1680 case 2:
1681 return MISCREG_ITLBIASID;
1682 }
1683 break;
1684 case 6:
1685 switch (opc2) {
1686 case 0:
1687 return MISCREG_DTLBIALL;
1688 case 1:
1689 return MISCREG_DTLBIMVA;
1690 case 2:
1691 return MISCREG_DTLBIASID;
1692 }
1693 break;
1694 case 7:
1695 switch (opc2) {
1696 case 0:
1697 return MISCREG_TLBIALL;
1698 case 1:
1699 return MISCREG_TLBIMVA;
1700 case 2:
1701 return MISCREG_TLBIASID;
1702 case 3:
1703 return MISCREG_TLBIMVAA;
1704 }
1705 break;
1706 }
1707 } else if (opc1 == 4) {
1708 if (crm == 3) {
1709 switch (opc2) {
1710 case 0:
1711 return MISCREG_TLBIALLHIS;
1712 case 1:
1713 return MISCREG_TLBIMVAHIS;
1714 case 4:
1715 return MISCREG_TLBIALLNSNHIS;
1716 }
1717 } else if (crm == 7) {
1718 switch (opc2) {
1719 case 0:
1720 return MISCREG_TLBIALLH;
1721 case 1:
1722 return MISCREG_TLBIMVAH;
1723 case 4:
1724 return MISCREG_TLBIALLNSNH;
1725 }
1726 }
1727 }
1728 break;
1729 case 9:
1730 if (opc1 == 0) {
1731 switch (crm) {
1732 case 12:
1733 switch (opc2) {
1734 case 0:
1735 return MISCREG_PMCR;
1736 case 1:
1737 return MISCREG_PMCNTENSET;
1738 case 2:
1739 return MISCREG_PMCNTENCLR;
1740 case 3:
1741 return MISCREG_PMOVSR;
1742 case 4:
1743 return MISCREG_PMSWINC;
1744 case 5:
1745 return MISCREG_PMSELR;
1746 case 6:
1747 return MISCREG_PMCEID0;
1748 case 7:
1749 return MISCREG_PMCEID1;
1750 }
1751 break;
1752 case 13:
1753 switch (opc2) {
1754 case 0:
1755 return MISCREG_PMCCNTR;
1756 case 1:
1757 // Selector is PMSELR.SEL
1758 return MISCREG_PMXEVTYPER_PMCCFILTR;
1759 case 2:
1760 return MISCREG_PMXEVCNTR;
1761 }
1762 break;
1763 case 14:
1764 switch (opc2) {
1765 case 0:
1766 return MISCREG_PMUSERENR;
1767 case 1:
1768 return MISCREG_PMINTENSET;
1769 case 2:
1770 return MISCREG_PMINTENCLR;
1771 case 3:
1772 return MISCREG_PMOVSSET;
1773 }
1774 break;
1775 }
1776 } else if (opc1 == 1) {
1777 switch (crm) {
1778 case 0:
1779 switch (opc2) {
1780 case 2: // L2CTLR, L2 Control Register
1781 return MISCREG_L2CTLR;
1782 case 3:
1783 return MISCREG_L2ECTLR;
1784 }
1785 break;
1786 break;
1787 }
1788 }
1789 break;
1790 case 10:
1791 if (opc1 == 0) {
1792 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
1793 if (crm == 2) { // TEX Remap Registers
1794 if (opc2 == 0) {
1795 // Selector is TTBCR.EAE
1796 return MISCREG_PRRR_MAIR0;
1797 } else if (opc2 == 1) {
1798 // Selector is TTBCR.EAE
1799 return MISCREG_NMRR_MAIR1;
1800 }
1801 } else if (crm == 3) {
1802 if (opc2 == 0) {
1803 return MISCREG_AMAIR0;
1804 } else if (opc2 == 1) {
1805 return MISCREG_AMAIR1;
1806 }
1807 }
1808 } else if (opc1 == 4) {
1809 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
1810 if (crm == 2) {
1811 if (opc2 == 0)
1812 return MISCREG_HMAIR0;
1813 else if (opc2 == 1)
1814 return MISCREG_HMAIR1;
1815 } else if (crm == 3) {
1816 if (opc2 == 0)
1817 return MISCREG_HAMAIR0;
1818 else if (opc2 == 1)
1819 return MISCREG_HAMAIR1;
1820 }
1821 }
1822 break;
1823 case 11:
1824 if (opc1 <=7) {
1825 switch (crm) {
1826 case 0:
1827 case 1:
1828 case 2:
1829 case 3:
1830 case 4:
1831 case 5:
1832 case 6:
1833 case 7:
1834 case 8:
1835 case 15:
1836 // Reserved for DMA operations for TCM access
1837 break;
1838 }
1839 }
1840 break;
1841 case 12:
1842 if (opc1 == 0) {
1843 if (crm == 0) {
1844 if (opc2 == 0) {
1845 return MISCREG_VBAR;
1846 } else if (opc2 == 1) {
1847 return MISCREG_MVBAR;
1848 }
1849 } else if (crm == 1) {
1850 if (opc2 == 0) {
1851 return MISCREG_ISR;
1852 }
1853 }
1854 } else if (opc1 == 4) {
1855 if (crm == 0 && opc2 == 0)
1856 return MISCREG_HVBAR;
1857 }
1858 break;
1859 case 13:
1860 if (opc1 == 0) {
1861 if (crm == 0) {
1862 switch (opc2) {
1863 case 0:
1864 return MISCREG_FCSEIDR;
1865 case 1:
1866 return MISCREG_CONTEXTIDR;
1867 case 2:
1868 return MISCREG_TPIDRURW;
1869 case 3:
1870 return MISCREG_TPIDRURO;
1871 case 4:
1872 return MISCREG_TPIDRPRW;
1873 }
1874 }
1875 } else if (opc1 == 4) {
1876 if (crm == 0 && opc2 == 2)
1877 return MISCREG_HTPIDR;
1878 }
1879 break;
1880 case 14:
1881 if (opc1 == 0) {
1882 switch (crm) {
1883 case 0:
1884 if (opc2 == 0)
1885 return MISCREG_CNTFRQ;
1886 break;
1887 case 1:
1888 if (opc2 == 0)
1889 return MISCREG_CNTKCTL;
1890 break;
1891 case 2:
1892 if (opc2 == 0)
1893 return MISCREG_CNTP_TVAL;
1894 else if (opc2 == 1)
1895 return MISCREG_CNTP_CTL;
1896 break;
1897 case 3:
1898 if (opc2 == 0)
1899 return MISCREG_CNTV_TVAL;
1900 else if (opc2 == 1)
1901 return MISCREG_CNTV_CTL;
1902 break;
1903 }
1904 } else if (opc1 == 4) {
1905 if (crm == 1 && opc2 == 0) {
1906 return MISCREG_CNTHCTL;
1907 } else if (crm == 2) {
1908 if (opc2 == 0)
1909 return MISCREG_CNTHP_TVAL;
1910 else if (opc2 == 1)
1911 return MISCREG_CNTHP_CTL;
1912 }
1913 }
1914 break;
1915 case 15:
1916 // Implementation defined
1917 return MISCREG_CP15_UNIMPL;
1918 }
1919 // Unrecognized register
1920 return MISCREG_CP15_UNIMPL;
1921}
1922
1923MiscRegIndex
1924decodeCP15Reg64(unsigned crm, unsigned opc1)
1925{
1926 switch (crm) {
1927 case 2:
1928 switch (opc1) {
1929 case 0:
1930 return MISCREG_TTBR0;
1931 case 1:
1932 return MISCREG_TTBR1;
1933 case 4:
1934 return MISCREG_HTTBR;
1935 case 6:
1936 return MISCREG_VTTBR;
1937 }
1938 break;
1939 case 7:
1940 if (opc1 == 0)
1941 return MISCREG_PAR;
1942 break;
1943 case 14:
1944 switch (opc1) {
1945 case 0:
1946 return MISCREG_CNTPCT;
1947 case 1:
1948 return MISCREG_CNTVCT;
1949 case 2:
1950 return MISCREG_CNTP_CVAL;
1951 case 3:
1952 return MISCREG_CNTV_CVAL;
1953 case 4:
1954 return MISCREG_CNTVOFF;
1955 case 6:
1956 return MISCREG_CNTHP_CVAL;
1957 }
1958 break;
1959 case 15:
1960 if (opc1 == 0)
1961 return MISCREG_CPUMERRSR;
1962 else if (opc1 == 1)
1963 return MISCREG_L2MERRSR;
1964 break;
1965 }
1966 // Unrecognized register
1967 return MISCREG_CP15_UNIMPL;
1968}
1969
1970bool
1971canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
1972{
1973 bool secure = !scr.ns;
1974 bool canRead;
1975
1976 switch (cpsr.mode) {
1977 case MODE_USER:
1978 canRead = secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
1979 miscRegInfo[reg][MISCREG_USR_NS_RD];
1980 break;
1981 case MODE_FIQ:
1982 case MODE_IRQ:
1983 case MODE_SVC:
1984 case MODE_ABORT:
1985 case MODE_UNDEFINED:
1986 case MODE_SYSTEM:
1987 canRead = secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
1988 miscRegInfo[reg][MISCREG_PRI_NS_RD];
1989 break;
1990 case MODE_MON:
1991 canRead = secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
1992 miscRegInfo[reg][MISCREG_MON_NS1_RD];
1993 break;
1994 case MODE_HYP:
1995 canRead = miscRegInfo[reg][MISCREG_HYP_RD];
1996 break;
1997 default:
1998 panic("Unrecognized mode setting in CPSR.\n");
1999 }
2000 // can't do permissions checkes on the root of a banked pair of regs
2001 assert(!miscRegInfo[reg][MISCREG_BANKED]);
2002 return canRead;
2003}
2004
2005bool
2006canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2007{
2008 bool secure = !scr.ns;
2009 bool canWrite;
2010
2011 switch (cpsr.mode) {
2012 case MODE_USER:
2013 canWrite = secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
2014 miscRegInfo[reg][MISCREG_USR_NS_WR];
2015 break;
2016 case MODE_FIQ:
2017 case MODE_IRQ:
2018 case MODE_SVC:
2019 case MODE_ABORT:
2020 case MODE_UNDEFINED:
2021 case MODE_SYSTEM:
2022 canWrite = secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
2023 miscRegInfo[reg][MISCREG_PRI_NS_WR];
2024 break;
2025 case MODE_MON:
2026 canWrite = secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
2027 miscRegInfo[reg][MISCREG_MON_NS1_WR];
2028 break;
2029 case MODE_HYP:
2030 canWrite = miscRegInfo[reg][MISCREG_HYP_WR];
2031 break;
2032 default:
2033 panic("Unrecognized mode setting in CPSR.\n");
2034 }
2035 // can't do permissions checkes on the root of a banked pair of regs
2036 assert(!miscRegInfo[reg][MISCREG_BANKED]);
2037 return canWrite;
2038}
2039
2040int
2041flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc)
2042{
2043 SCR scr = tc->readMiscReg(MISCREG_SCR);
2044 return flattenMiscRegNsBanked(reg, tc, scr.ns);
2045}
2046
2047int
2048flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc, bool ns)
2049{
2050 int reg_as_int = static_cast<int>(reg);
2051 if (miscRegInfo[reg][MISCREG_BANKED]) {
2052 reg_as_int += (ArmSystem::haveSecurity(tc) &&
2053 !ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1;
2054 }
2055 return reg_as_int;
2056}
2057
2058
2059/**
2060 * If the reg is a child reg of a banked set, then the parent is the last
2061 * banked one in the list. This is messy, and the wish is to eventually have
2062 * the bitmap replaced with a better data structure. the preUnflatten function
2063 * initializes a lookup table to speed up the search for these banked
2064 * registers.
2065 */
2066
2067int unflattenResultMiscReg[NUM_MISCREGS];
2068
2069void
2070preUnflattenMiscReg()
2071{
2072 int reg = -1;
2073 for (int i = 0 ; i < NUM_MISCREGS; i++){
2074 if (miscRegInfo[i][MISCREG_BANKED])
2075 reg = i;
2076 if (miscRegInfo[i][MISCREG_BANKED_CHILD])
2077 unflattenResultMiscReg[i] = reg;
2078 else
2079 unflattenResultMiscReg[i] = i;
2080 // if this assert fails, no parent was found, and something is broken
2081 assert(unflattenResultMiscReg[i] > -1);
2082 }
2083}
2084
2085int
2086unflattenMiscReg(int reg)
2087{
2088 return unflattenResultMiscReg[reg];
2089}
2090
2091bool
2092canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2093{
2094 // Check for SP_EL0 access while SPSEL == 0
2095 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2096 return false;
2097
2098 // Check for RVBAR access
2099 if (reg == MISCREG_RVBAR_EL1) {
2100 ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2101 if (highest_el == EL2 || highest_el == EL3)
2102 return false;
2103 }
2104 if (reg == MISCREG_RVBAR_EL2) {
2105 ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2106 if (highest_el == EL3)
2107 return false;
2108 }
2109
2110 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2111
2112 switch (opModeToEL((OperatingMode) (uint8_t) cpsr.mode)) {
2113 case EL0:
2114 return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
2115 miscRegInfo[reg][MISCREG_USR_NS_RD];
2116 case EL1:
2117 return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
2118 miscRegInfo[reg][MISCREG_PRI_NS_RD];
2119 case EL2:
2120 return miscRegInfo[reg][MISCREG_HYP_RD];
2121 case EL3:
2122 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
2123 miscRegInfo[reg][MISCREG_MON_NS1_RD];
2124 default:
2125 panic("Invalid exception level");
2126 }
2127}
2128
2129bool
2130canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2131{
2132 // Check for SP_EL0 access while SPSEL == 0
2133 if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2134 return false;
2135 ExceptionLevel el = opModeToEL((OperatingMode) (uint8_t) cpsr.mode);
2136 if (reg == MISCREG_DAIF) {
2137 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2138 if (el == EL0 && !sctlr.uma)
2139 return false;
2140 }
2141 if (FullSystem && reg == MISCREG_DC_ZVA_Xt) {
2142 // In syscall-emulation mode, this test is skipped and DCZVA is always
2143 // allowed at EL0
2144 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2145 if (el == EL0 && !sctlr.dze)
2146 return false;
2147 }
2148 if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) {
2149 SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2150 if (el == EL0 && !sctlr.uci)
2151 return false;
2152 }
2153
2154 bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2155
2156 switch (el) {
2157 case EL0:
2158 return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
2159 miscRegInfo[reg][MISCREG_USR_NS_WR];
2160 case EL1:
2161 return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
2162 miscRegInfo[reg][MISCREG_PRI_NS_WR];
2163 case EL2:
2164 return miscRegInfo[reg][MISCREG_HYP_WR];
2165 case EL3:
2166 return secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
2167 miscRegInfo[reg][MISCREG_MON_NS1_WR];
2168 default:
2169 panic("Invalid exception level");
2170 }
2171}
2172
2173MiscRegIndex
2174decodeAArch64SysReg(unsigned op0, unsigned op1,
2175 unsigned crn, unsigned crm,
2176 unsigned op2)
2177{
2178 switch (op0) {
2179 case 1:
2180 switch (crn) {
2181 case 7:
2182 switch (op1) {
2183 case 0:
2184 switch (crm) {
2185 case 1:
2186 switch (op2) {
2187 case 0:
2188 return MISCREG_IC_IALLUIS;
2189 }
2190 break;
2191 case 5:
2192 switch (op2) {
2193 case 0:
2194 return MISCREG_IC_IALLU;
2195 }
2196 break;
2197 case 6:
2198 switch (op2) {
2199 case 1:
2200 return MISCREG_DC_IVAC_Xt;
2201 case 2:
2202 return MISCREG_DC_ISW_Xt;
2203 }
2204 break;
2205 case 8:
2206 switch (op2) {
2207 case 0:
2208 return MISCREG_AT_S1E1R_Xt;
2209 case 1:
2210 return MISCREG_AT_S1E1W_Xt;
2211 case 2:
2212 return MISCREG_AT_S1E0R_Xt;
2213 case 3:
2214 return MISCREG_AT_S1E0W_Xt;
2215 }
2216 break;
2217 case 10:
2218 switch (op2) {
2219 case 2:
2220 return MISCREG_DC_CSW_Xt;
2221 }
2222 break;
2223 case 14:
2224 switch (op2) {
2225 case 2:
2226 return MISCREG_DC_CISW_Xt;
2227 }
2228 break;
2229 }
2230 break;
2231 case 3:
2232 switch (crm) {
2233 case 4:
2234 switch (op2) {
2235 case 1:
2236 return MISCREG_DC_ZVA_Xt;
2237 }
2238 break;
2239 case 5:
2240 switch (op2) {
2241 case 1:
2242 return MISCREG_IC_IVAU_Xt;
2243 }
2244 break;
2245 case 10:
2246 switch (op2) {
2247 case 1:
2248 return MISCREG_DC_CVAC_Xt;
2249 }
2250 break;
2251 case 11:
2252 switch (op2) {
2253 case 1:
2254 return MISCREG_DC_CVAU_Xt;
2255 }
2256 break;
2257 case 14:
2258 switch (op2) {
2259 case 1:
2260 return MISCREG_DC_CIVAC_Xt;
2261 }
2262 break;
2263 }
2264 break;
2265 case 4:
2266 switch (crm) {
2267 case 8:
2268 switch (op2) {
2269 case 0:
2270 return MISCREG_AT_S1E2R_Xt;
2271 case 1:
2272 return MISCREG_AT_S1E2W_Xt;
2273 case 4:
2274 return MISCREG_AT_S12E1R_Xt;
2275 case 5:
2276 return MISCREG_AT_S12E1W_Xt;
2277 case 6:
2278 return MISCREG_AT_S12E0R_Xt;
2279 case 7:
2280 return MISCREG_AT_S12E0W_Xt;
2281 }
2282 break;
2283 }
2284 break;
2285 case 6:
2286 switch (crm) {
2287 case 8:
2288 switch (op2) {
2289 case 0:
2290 return MISCREG_AT_S1E3R_Xt;
2291 case 1:
2292 return MISCREG_AT_S1E3W_Xt;
2293 }
2294 break;
2295 }
2296 break;
2297 }
2298 break;
2299 case 8:
2300 switch (op1) {
2301 case 0:
2302 switch (crm) {
2303 case 3:
2304 switch (op2) {
2305 case 0:
2306 return MISCREG_TLBI_VMALLE1IS;
2307 case 1:
2308 return MISCREG_TLBI_VAE1IS_Xt;
2309 case 2:
2310 return MISCREG_TLBI_ASIDE1IS_Xt;
2311 case 3:
2312 return MISCREG_TLBI_VAAE1IS_Xt;
2313 case 5:
2314 return MISCREG_TLBI_VALE1IS_Xt;
2315 case 7:
2316 return MISCREG_TLBI_VAALE1IS_Xt;
2317 }
2318 break;
2319 case 7:
2320 switch (op2) {
2321 case 0:
2322 return MISCREG_TLBI_VMALLE1;
2323 case 1:
2324 return MISCREG_TLBI_VAE1_Xt;
2325 case 2:
2326 return MISCREG_TLBI_ASIDE1_Xt;
2327 case 3:
2328 return MISCREG_TLBI_VAAE1_Xt;
2329 case 5:
2330 return MISCREG_TLBI_VALE1_Xt;
2331 case 7:
2332 return MISCREG_TLBI_VAALE1_Xt;
2333 }
2334 break;
2335 }
2336 break;
2337 case 4:
2338 switch (crm) {
2339 case 0:
2340 switch (op2) {
2341 case 1:
2342 return MISCREG_TLBI_IPAS2E1IS_Xt;
2343 case 5:
2344 return MISCREG_TLBI_IPAS2LE1IS_Xt;
2345 }
2346 break;
2347 case 3:
2348 switch (op2) {
2349 case 0:
2350 return MISCREG_TLBI_ALLE2IS;
2351 case 1:
2352 return MISCREG_TLBI_VAE2IS_Xt;
2353 case 4:
2354 return MISCREG_TLBI_ALLE1IS;
2355 case 5:
2356 return MISCREG_TLBI_VALE2IS_Xt;
2357 case 6:
2358 return MISCREG_TLBI_VMALLS12E1IS;
2359 }
2360 break;
2361 case 4:
2362 switch (op2) {
2363 case 1:
2364 return MISCREG_TLBI_IPAS2E1_Xt;
2365 case 5:
2366 return MISCREG_TLBI_IPAS2LE1_Xt;
2367 }
2368 break;
2369 case 7:
2370 switch (op2) {
2371 case 0:
2372 return MISCREG_TLBI_ALLE2;
2373 case 1:
2374 return MISCREG_TLBI_VAE2_Xt;
2375 case 4:
2376 return MISCREG_TLBI_ALLE1;
2377 case 5:
2378 return MISCREG_TLBI_VALE2_Xt;
2379 case 6:
2380 return MISCREG_TLBI_VMALLS12E1;
2381 }
2382 break;
2383 }
2384 break;
2385 case 6:
2386 switch (crm) {
2387 case 3:
2388 switch (op2) {
2389 case 0:
2390 return MISCREG_TLBI_ALLE3IS;
2391 case 1:
2392 return MISCREG_TLBI_VAE3IS_Xt;
2393 case 5:
2394 return MISCREG_TLBI_VALE3IS_Xt;
2395 }
2396 break;
2397 case 7:
2398 switch (op2) {
2399 case 0:
2400 return MISCREG_TLBI_ALLE3;
2401 case 1:
2402 return MISCREG_TLBI_VAE3_Xt;
2403 case 5:
2404 return MISCREG_TLBI_VALE3_Xt;
2405 }
2406 break;
2407 }
2408 break;
2409 }
2410 break;
2411 }
2412 break;
2413 case 2:
2414 switch (crn) {
2415 case 0:
2416 switch (op1) {
2417 case 0:
2418 switch (crm) {
2419 case 0:
2420 switch (op2) {
2421 case 2:
2422 return MISCREG_OSDTRRX_EL1;
2423 case 4:
2424 return MISCREG_DBGBVR0_EL1;
2425 case 5:
2426 return MISCREG_DBGBCR0_EL1;
2427 case 6:
2428 return MISCREG_DBGWVR0_EL1;
2429 case 7:
2430 return MISCREG_DBGWCR0_EL1;
2431 }
2432 break;
2433 case 1:
2434 switch (op2) {
2435 case 4:
2436 return MISCREG_DBGBVR1_EL1;
2437 case 5:
2438 return MISCREG_DBGBCR1_EL1;
2439 case 6:
2440 return MISCREG_DBGWVR1_EL1;
2441 case 7:
2442 return MISCREG_DBGWCR1_EL1;
2443 }
2444 break;
2445 case 2:
2446 switch (op2) {
2447 case 0:
2448 return MISCREG_MDCCINT_EL1;
2449 case 2:
2450 return MISCREG_MDSCR_EL1;
2451 case 4:
2452 return MISCREG_DBGBVR2_EL1;
2453 case 5:
2454 return MISCREG_DBGBCR2_EL1;
2455 case 6:
2456 return MISCREG_DBGWVR2_EL1;
2457 case 7:
2458 return MISCREG_DBGWCR2_EL1;
2459 }
2460 break;
2461 case 3:
2462 switch (op2) {
2463 case 2:
2464 return MISCREG_OSDTRTX_EL1;
2465 case 4:
2466 return MISCREG_DBGBVR3_EL1;
2467 case 5:
2468 return MISCREG_DBGBCR3_EL1;
2469 case 6:
2470 return MISCREG_DBGWVR3_EL1;
2471 case 7:
2472 return MISCREG_DBGWCR3_EL1;
2473 }
2474 break;
2475 case 4:
2476 switch (op2) {
2477 case 4:
2478 return MISCREG_DBGBVR4_EL1;
2479 case 5:
2480 return MISCREG_DBGBCR4_EL1;
2481 }
2482 break;
2483 case 5:
2484 switch (op2) {
2485 case 4:
2486 return MISCREG_DBGBVR5_EL1;
2487 case 5:
2488 return MISCREG_DBGBCR5_EL1;
2489 }
2490 break;
2491 case 6:
2492 switch (op2) {
2493 case 2:
2494 return MISCREG_OSECCR_EL1;
2495 }
2496 break;
2497 }
2498 break;
2499 case 2:
2500 switch (crm) {
2501 case 0:
2502 switch (op2) {
2503 case 0:
2504 return MISCREG_TEECR32_EL1;
2505 }
2506 break;
2507 }
2508 break;
2509 case 3:
2510 switch (crm) {
2511 case 1:
2512 switch (op2) {
2513 case 0:
2514 return MISCREG_MDCCSR_EL0;
2515 }
2516 break;
2517 case 4:
2518 switch (op2) {
2519 case 0:
2520 return MISCREG_MDDTR_EL0;
2521 }
2522 break;
2523 case 5:
2524 switch (op2) {
2525 case 0:
2526 return MISCREG_MDDTRRX_EL0;
2527 }
2528 break;
2529 }
2530 break;
2531 case 4:
2532 switch (crm) {
2533 case 7:
2534 switch (op2) {
2535 case 0:
2536 return MISCREG_DBGVCR32_EL2;
2537 }
2538 break;
2539 }
2540 break;
2541 }
2542 break;
2543 case 1:
2544 switch (op1) {
2545 case 0:
2546 switch (crm) {
2547 case 0:
2548 switch (op2) {
2549 case 0:
2550 return MISCREG_MDRAR_EL1;
2551 case 4:
2552 return MISCREG_OSLAR_EL1;
2553 }
2554 break;
2555 case 1:
2556 switch (op2) {
2557 case 4:
2558 return MISCREG_OSLSR_EL1;
2559 }
2560 break;
2561 case 3:
2562 switch (op2) {
2563 case 4:
2564 return MISCREG_OSDLR_EL1;
2565 }
2566 break;
2567 case 4:
2568 switch (op2) {
2569 case 4:
2570 return MISCREG_DBGPRCR_EL1;
2571 }
2572 break;
2573 }
2574 break;
2575 case 2:
2576 switch (crm) {
2577 case 0:
2578 switch (op2) {
2579 case 0:
2580 return MISCREG_TEEHBR32_EL1;
2581 }
2582 break;
2583 }
2584 break;
2585 }
2586 break;
2587 case 7:
2588 switch (op1) {
2589 case 0:
2590 switch (crm) {
2591 case 8:
2592 switch (op2) {
2593 case 6:
2594 return MISCREG_DBGCLAIMSET_EL1;
2595 }
2596 break;
2597 case 9:
2598 switch (op2) {
2599 case 6:
2600 return MISCREG_DBGCLAIMCLR_EL1;
2601 }
2602 break;
2603 case 14:
2604 switch (op2) {
2605 case 6:
2606 return MISCREG_DBGAUTHSTATUS_EL1;
2607 }
2608 break;
2609 }
2610 break;
2611 }
2612 break;
2613 }
2614 break;
2615 case 3:
2616 switch (crn) {
2617 case 0:
2618 switch (op1) {
2619 case 0:
2620 switch (crm) {
2621 case 0:
2622 switch (op2) {
2623 case 0:
2624 return MISCREG_MIDR_EL1;
2625 case 5:
2626 return MISCREG_MPIDR_EL1;
2627 case 6:
2628 return MISCREG_REVIDR_EL1;
2629 }
2630 break;
2631 case 1:
2632 switch (op2) {
2633 case 0:
2634 return MISCREG_ID_PFR0_EL1;
2635 case 1:
2636 return MISCREG_ID_PFR1_EL1;
2637 case 2:
2638 return MISCREG_ID_DFR0_EL1;
2639 case 3:
2640 return MISCREG_ID_AFR0_EL1;
2641 case 4:
2642 return MISCREG_ID_MMFR0_EL1;
2643 case 5:
2644 return MISCREG_ID_MMFR1_EL1;
2645 case 6:
2646 return MISCREG_ID_MMFR2_EL1;
2647 case 7:
2648 return MISCREG_ID_MMFR3_EL1;
2649 }
2650 break;
2651 case 2:
2652 switch (op2) {
2653 case 0:
2654 return MISCREG_ID_ISAR0_EL1;
2655 case 1:
2656 return MISCREG_ID_ISAR1_EL1;
2657 case 2:
2658 return MISCREG_ID_ISAR2_EL1;
2659 case 3:
2660 return MISCREG_ID_ISAR3_EL1;
2661 case 4:
2662 return MISCREG_ID_ISAR4_EL1;
2663 case 5:
2664 return MISCREG_ID_ISAR5_EL1;
2665 }
2666 break;
2667 case 3:
2668 switch (op2) {
2669 case 0:
2670 return MISCREG_MVFR0_EL1;
2671 case 1:
2672 return MISCREG_MVFR1_EL1;
2673 case 2:
2674 return MISCREG_MVFR2_EL1;
2675 case 3 ... 7:
2676 return MISCREG_RAZ;
2677 }
2678 break;
2679 case 4:
2680 switch (op2) {
2681 case 0:
2682 return MISCREG_ID_AA64PFR0_EL1;
2683 case 1:
2684 return MISCREG_ID_AA64PFR1_EL1;
2685 case 2 ... 7:
2686 return MISCREG_RAZ;
2687 }
2688 break;
2689 case 5:
2690 switch (op2) {
2691 case 0:
2692 return MISCREG_ID_AA64DFR0_EL1;
2693 case 1:
2694 return MISCREG_ID_AA64DFR1_EL1;
2695 case 4:
2696 return MISCREG_ID_AA64AFR0_EL1;
2697 case 5:
2698 return MISCREG_ID_AA64AFR1_EL1;
2699 case 2:
2700 case 3:
2701 case 6:
2702 case 7:
2703 return MISCREG_RAZ;
2704 }
2705 break;
2706 case 6:
2707 switch (op2) {
2708 case 0:
2709 return MISCREG_ID_AA64ISAR0_EL1;
2710 case 1:
2711 return MISCREG_ID_AA64ISAR1_EL1;
2712 case 2 ... 7:
2713 return MISCREG_RAZ;
2714 }
2715 break;
2716 case 7:
2717 switch (op2) {
2718 case 0:
2719 return MISCREG_ID_AA64MMFR0_EL1;
2720 case 1:
2721 return MISCREG_ID_AA64MMFR1_EL1;
2722 case 2 ... 7:
2723 return MISCREG_RAZ;
2724 }
2725 break;
2726 }
2727 break;
2728 case 1:
2729 switch (crm) {
2730 case 0:
2731 switch (op2) {
2732 case 0:
2733 return MISCREG_CCSIDR_EL1;
2734 case 1:
2735 return MISCREG_CLIDR_EL1;
2736 case 7:
2737 return MISCREG_AIDR_EL1;
2738 }
2739 break;
2740 }
2741 break;
2742 case 2:
2743 switch (crm) {
2744 case 0:
2745 switch (op2) {
2746 case 0:
2747 return MISCREG_CSSELR_EL1;
2748 }
2749 break;
2750 }
2751 break;
2752 case 3:
2753 switch (crm) {
2754 case 0:
2755 switch (op2) {
2756 case 1:
2757 return MISCREG_CTR_EL0;
2758 case 7:
2759 return MISCREG_DCZID_EL0;
2760 }
2761 break;
2762 }
2763 break;
2764 case 4:
2765 switch (crm) {
2766 case 0:
2767 switch (op2) {
2768 case 0:
2769 return MISCREG_VPIDR_EL2;
2770 case 5:
2771 return MISCREG_VMPIDR_EL2;
2772 }
2773 break;
2774 }
2775 break;
2776 }
2777 break;
2778 case 1:
2779 switch (op1) {
2780 case 0:
2781 switch (crm) {
2782 case 0:
2783 switch (op2) {
2784 case 0:
2785 return MISCREG_SCTLR_EL1;
2786 case 1:
2787 return MISCREG_ACTLR_EL1;
2788 case 2:
2789 return MISCREG_CPACR_EL1;
2790 }
2791 break;
2792 }
2793 break;
2794 case 4:
2795 switch (crm) {
2796 case 0:
2797 switch (op2) {
2798 case 0:
2799 return MISCREG_SCTLR_EL2;
2800 case 1:
2801 return MISCREG_ACTLR_EL2;
2802 }
2803 break;
2804 case 1:
2805 switch (op2) {
2806 case 0:
2807 return MISCREG_HCR_EL2;
2808 case 1:
2809 return MISCREG_MDCR_EL2;
2810 case 2:
2811 return MISCREG_CPTR_EL2;
2812 case 3:
2813 return MISCREG_HSTR_EL2;
2814 case 7:
2815 return MISCREG_HACR_EL2;
2816 }
2817 break;
2818 }
2819 break;
2820 case 6:
2821 switch (crm) {
2822 case 0:
2823 switch (op2) {
2824 case 0:
2825 return MISCREG_SCTLR_EL3;
2826 case 1:
2827 return MISCREG_ACTLR_EL3;
2828 }
2829 break;
2830 case 1:
2831 switch (op2) {
2832 case 0:
2833 return MISCREG_SCR_EL3;
2834 case 1:
2835 return MISCREG_SDER32_EL3;
2836 case 2:
2837 return MISCREG_CPTR_EL3;
2838 }
2839 break;
2840 case 3:
2841 switch (op2) {
2842 case 1:
2843 return MISCREG_MDCR_EL3;
2844 }
2845 break;
2846 }
2847 break;
2848 }
2849 break;
2850 case 2:
2851 switch (op1) {
2852 case 0:
2853 switch (crm) {
2854 case 0:
2855 switch (op2) {
2856 case 0:
2857 return MISCREG_TTBR0_EL1;
2858 case 1:
2859 return MISCREG_TTBR1_EL1;
2860 case 2:
2861 return MISCREG_TCR_EL1;
2862 }
2863 break;
2864 }
2865 break;
2866 case 4:
2867 switch (crm) {
2868 case 0:
2869 switch (op2) {
2870 case 0:
2871 return MISCREG_TTBR0_EL2;
2872 case 2:
2873 return MISCREG_TCR_EL2;
2874 }
2875 break;
2876 case 1:
2877 switch (op2) {
2878 case 0:
2879 return MISCREG_VTTBR_EL2;
2880 case 2:
2881 return MISCREG_VTCR_EL2;
2882 }
2883 break;
2884 }
2885 break;
2886 case 6:
2887 switch (crm) {
2888 case 0:
2889 switch (op2) {
2890 case 0:
2891 return MISCREG_TTBR0_EL3;
2892 case 2:
2893 return MISCREG_TCR_EL3;
2894 }
2895 break;
2896 }
2897 break;
2898 }
2899 break;
2900 case 3:
2901 switch (op1) {
2902 case 4:
2903 switch (crm) {
2904 case 0:
2905 switch (op2) {
2906 case 0:
2907 return MISCREG_DACR32_EL2;
2908 }
2909 break;
2910 }
2911 break;
2912 }
2913 break;
2914 case 4:
2915 switch (op1) {
2916 case 0:
2917 switch (crm) {
2918 case 0:
2919 switch (op2) {
2920 case 0:
2921 return MISCREG_SPSR_EL1;
2922 case 1:
2923 return MISCREG_ELR_EL1;
2924 }
2925 break;
2926 case 1:
2927 switch (op2) {
2928 case 0:
2929 return MISCREG_SP_EL0;
2930 }
2931 break;
2932 case 2:
2933 switch (op2) {
2934 case 0:
2935 return MISCREG_SPSEL;
2936 case 2:
2937 return MISCREG_CURRENTEL;
2938 }
2939 break;
2940 }
2941 break;
2942 case 3:
2943 switch (crm) {
2944 case 2:
2945 switch (op2) {
2946 case 0:
2947 return MISCREG_NZCV;
2948 case 1:
2949 return MISCREG_DAIF;
2950 }
2951 break;
2952 case 4:
2953 switch (op2) {
2954 case 0:
2955 return MISCREG_FPCR;
2956 case 1:
2957 return MISCREG_FPSR;
2958 }
2959 break;
2960 case 5:
2961 switch (op2) {
2962 case 0:
2963 return MISCREG_DSPSR_EL0;
2964 case 1:
2965 return MISCREG_DLR_EL0;
2966 }
2967 break;
2968 }
2969 break;
2970 case 4:
2971 switch (crm) {
2972 case 0:
2973 switch (op2) {
2974 case 0:
2975 return MISCREG_SPSR_EL2;
2976 case 1:
2977 return MISCREG_ELR_EL2;
2978 }
2979 break;
2980 case 1:
2981 switch (op2) {
2982 case 0:
2983 return MISCREG_SP_EL1;
2984 }
2985 break;
2986 case 3:
2987 switch (op2) {
2988 case 0:
2989 return MISCREG_SPSR_IRQ_AA64;
2990 case 1:
2991 return MISCREG_SPSR_ABT_AA64;
2992 case 2:
2993 return MISCREG_SPSR_UND_AA64;
2994 case 3:
2995 return MISCREG_SPSR_FIQ_AA64;
2996 }
2997 break;
2998 }
2999 break;
3000 case 6:
3001 switch (crm) {
3002 case 0:
3003 switch (op2) {
3004 case 0:
3005 return MISCREG_SPSR_EL3;
3006 case 1:
3007 return MISCREG_ELR_EL3;
3008 }
3009 break;
3010 case 1:
3011 switch (op2) {
3012 case 0:
3013 return MISCREG_SP_EL2;
3014 }
3015 break;
3016 }
3017 break;
3018 }
3019 break;
3020 case 5:
3021 switch (op1) {
3022 case 0:
3023 switch (crm) {
3024 case 1:
3025 switch (op2) {
3026 case 0:
3027 return MISCREG_AFSR0_EL1;
3028 case 1:
3029 return MISCREG_AFSR1_EL1;
3030 }
3031 break;
3032 case 2:
3033 switch (op2) {
3034 case 0:
3035 return MISCREG_ESR_EL1;
3036 }
3037 break;
3038 }
3039 break;
3040 case 4:
3041 switch (crm) {
3042 case 0:
3043 switch (op2) {
3044 case 1:
3045 return MISCREG_IFSR32_EL2;
3046 }
3047 break;
3048 case 1:
3049 switch (op2) {
3050 case 0:
3051 return MISCREG_AFSR0_EL2;
3052 case 1:
3053 return MISCREG_AFSR1_EL2;
3054 }
3055 break;
3056 case 2:
3057 switch (op2) {
3058 case 0:
3059 return MISCREG_ESR_EL2;
3060 }
3061 break;
3062 case 3:
3063 switch (op2) {
3064 case 0:
3065 return MISCREG_FPEXC32_EL2;
3066 }
3067 break;
3068 }
3069 break;
3070 case 6:
3071 switch (crm) {
3072 case 1:
3073 switch (op2) {
3074 case 0:
3075 return MISCREG_AFSR0_EL3;
3076 case 1:
3077 return MISCREG_AFSR1_EL3;
3078 }
3079 break;
3080 case 2:
3081 switch (op2) {
3082 case 0:
3083 return MISCREG_ESR_EL3;
3084 }
3085 break;
3086 }
3087 break;
3088 }
3089 break;
3090 case 6:
3091 switch (op1) {
3092 case 0:
3093 switch (crm) {
3094 case 0:
3095 switch (op2) {
3096 case 0:
3097 return MISCREG_FAR_EL1;
3098 }
3099 break;
3100 }
3101 break;
3102 case 4:
3103 switch (crm) {
3104 case 0:
3105 switch (op2) {
3106 case 0:
3107 return MISCREG_FAR_EL2;
3108 case 4:
3109 return MISCREG_HPFAR_EL2;
3110 }
3111 break;
3112 }
3113 break;
3114 case 6:
3115 switch (crm) {
3116 case 0:
3117 switch (op2) {
3118 case 0:
3119 return MISCREG_FAR_EL3;
3120 }
3121 break;
3122 }
3123 break;
3124 }
3125 break;
3126 case 7:
3127 switch (op1) {
3128 case 0:
3129 switch (crm) {
3130 case 4:
3131 switch (op2) {
3132 case 0:
3133 return MISCREG_PAR_EL1;
3134 }
3135 break;
3136 }
3137 break;
3138 }
3139 break;
3140 case 9:
3141 switch (op1) {
3142 case 0:
3143 switch (crm) {
3144 case 14:
3145 switch (op2) {
3146 case 1:
3147 return MISCREG_PMINTENSET_EL1;
3148 case 2:
3149 return MISCREG_PMINTENCLR_EL1;
3150 }
3151 break;
3152 }
3153 break;
3154 case 3:
3155 switch (crm) {
3156 case 12:
3157 switch (op2) {
3158 case 0:
3159 return MISCREG_PMCR_EL0;
3160 case 1:
3161 return MISCREG_PMCNTENSET_EL0;
3162 case 2:
3163 return MISCREG_PMCNTENCLR_EL0;
3164 case 3:
3165 return MISCREG_PMOVSCLR_EL0;
3166 case 4:
3167 return MISCREG_PMSWINC_EL0;
3168 case 5:
3169 return MISCREG_PMSELR_EL0;
3170 case 6:
3171 return MISCREG_PMCEID0_EL0;
3172 case 7:
3173 return MISCREG_PMCEID1_EL0;
3174 }
3175 break;
3176 case 13:
3177 switch (op2) {
3178 case 0:
3179 return MISCREG_PMCCNTR_EL0;
3180 case 1:
3181 return MISCREG_PMXEVTYPER_EL0;
3182 case 2:
3183 return MISCREG_PMXEVCNTR_EL0;
3184 }
3185 break;
3186 case 14:
3187 switch (op2) {
3188 case 0:
3189 return MISCREG_PMUSERENR_EL0;
3190 case 3:
3191 return MISCREG_PMOVSSET_EL0;
3192 }
3193 break;
3194 }
3195 break;
3196 }
3197 break;
3198 case 10:
3199 switch (op1) {
3200 case 0:
3201 switch (crm) {
3202 case 2:
3203 switch (op2) {
3204 case 0:
3205 return MISCREG_MAIR_EL1;
3206 }
3207 break;
3208 case 3:
3209 switch (op2) {
3210 case 0:
3211 return MISCREG_AMAIR_EL1;
3212 }
3213 break;
3214 }
3215 break;
3216 case 4:
3217 switch (crm) {
3218 case 2:
3219 switch (op2) {
3220 case 0:
3221 return MISCREG_MAIR_EL2;
3222 }
3223 break;
3224 case 3:
3225 switch (op2) {
3226 case 0:
3227 return MISCREG_AMAIR_EL2;
3228 }
3229 break;
3230 }
3231 break;
3232 case 6:
3233 switch (crm) {
3234 case 2:
3235 switch (op2) {
3236 case 0:
3237 return MISCREG_MAIR_EL3;
3238 }
3239 break;
3240 case 3:
3241 switch (op2) {
3242 case 0:
3243 return MISCREG_AMAIR_EL3;
3244 }
3245 break;
3246 }
3247 break;
3248 }
3249 break;
3250 case 11:
3251 switch (op1) {
3252 case 1:
3253 switch (crm) {
3254 case 0:
3255 switch (op2) {
3256 case 2:
3257 return MISCREG_L2CTLR_EL1;
3258 case 3:
3259 return MISCREG_L2ECTLR_EL1;
3260 }
3261 break;
3262 }
3263 break;
3264 }
3265 break;
3266 case 12:
3267 switch (op1) {
3268 case 0:
3269 switch (crm) {
3270 case 0:
3271 switch (op2) {
3272 case 0:
3273 return MISCREG_VBAR_EL1;
3274 case 1:
3275 return MISCREG_RVBAR_EL1;
3276 }
3277 break;
3278 case 1:
3279 switch (op2) {
3280 case 0:
3281 return MISCREG_ISR_EL1;
3282 }
3283 break;
3284 }
3285 break;
3286 case 4:
3287 switch (crm) {
3288 case 0:
3289 switch (op2) {
3290 case 0:
3291 return MISCREG_VBAR_EL2;
3292 case 1:
3293 return MISCREG_RVBAR_EL2;
3294 }
3295 break;
3296 }
3297 break;
3298 case 6:
3299 switch (crm) {
3300 case 0:
3301 switch (op2) {
3302 case 0:
3303 return MISCREG_VBAR_EL3;
3304 case 1:
3305 return MISCREG_RVBAR_EL3;
3306 case 2:
3307 return MISCREG_RMR_EL3;
3308 }
3309 break;
3310 }
3311 break;
3312 }
3313 break;
3314 case 13:
3315 switch (op1) {
3316 case 0:
3317 switch (crm) {
3318 case 0:
3319 switch (op2) {
3320 case 1:
3321 return MISCREG_CONTEXTIDR_EL1;
3322 case 4:
3323 return MISCREG_TPIDR_EL1;
3324 }
3325 break;
3326 }
3327 break;
3328 case 3:
3329 switch (crm) {
3330 case 0:
3331 switch (op2) {
3332 case 2:
3333 return MISCREG_TPIDR_EL0;
3334 case 3:
3335 return MISCREG_TPIDRRO_EL0;
3336 }
3337 break;
3338 }
3339 break;
3340 case 4:
3341 switch (crm) {
3342 case 0:
3343 switch (op2) {
3344 case 1:
3345 return MISCREG_CONTEXTIDR_EL2;
3346 case 2:
3347 return MISCREG_TPIDR_EL2;
3348 }
3349 break;
3350 }
3351 break;
3352 case 6:
3353 switch (crm) {
3354 case 0:
3355 switch (op2) {
3356 case 2:
3357 return MISCREG_TPIDR_EL3;
3358 }
3359 break;
3360 }
3361 break;
3362 }
3363 break;
3364 case 14:
3365 switch (op1) {
3366 case 0:
3367 switch (crm) {
3368 case 1:
3369 switch (op2) {
3370 case 0:
3371 return MISCREG_CNTKCTL_EL1;
3372 }
3373 break;
3374 }
3375 break;
3376 case 3:
3377 switch (crm) {
3378 case 0:
3379 switch (op2) {
3380 case 0:
3381 return MISCREG_CNTFRQ_EL0;
3382 case 1:
3383 return MISCREG_CNTPCT_EL0;
3384 case 2:
3385 return MISCREG_CNTVCT_EL0;
3386 }
3387 break;
3388 case 2:
3389 switch (op2) {
3390 case 0:
3391 return MISCREG_CNTP_TVAL_EL0;
3392 case 1:
3393 return MISCREG_CNTP_CTL_EL0;
3394 case 2:
3395 return MISCREG_CNTP_CVAL_EL0;
3396 }
3397 break;
3398 case 3:
3399 switch (op2) {
3400 case 0:
3401 return MISCREG_CNTV_TVAL_EL0;
3402 case 1:
3403 return MISCREG_CNTV_CTL_EL0;
3404 case 2:
3405 return MISCREG_CNTV_CVAL_EL0;
3406 }
3407 break;
3408 case 8:
3409 switch (op2) {
3410 case 0:
3411 return MISCREG_PMEVCNTR0_EL0;
3412 case 1:
3413 return MISCREG_PMEVCNTR1_EL0;
3414 case 2:
3415 return MISCREG_PMEVCNTR2_EL0;
3416 case 3:
3417 return MISCREG_PMEVCNTR3_EL0;
3418 case 4:
3419 return MISCREG_PMEVCNTR4_EL0;
3420 case 5:
3421 return MISCREG_PMEVCNTR5_EL0;
3422 }
3423 break;
3424 case 12:
3425 switch (op2) {
3426 case 0:
3427 return MISCREG_PMEVTYPER0_EL0;
3428 case 1:
3429 return MISCREG_PMEVTYPER1_EL0;
3430 case 2:
3431 return MISCREG_PMEVTYPER2_EL0;
3432 case 3:
3433 return MISCREG_PMEVTYPER3_EL0;
3434 case 4:
3435 return MISCREG_PMEVTYPER4_EL0;
3436 case 5:
3437 return MISCREG_PMEVTYPER5_EL0;
3438 }
3439 break;
3440 case 15:
3441 switch (op2) {
3442 case 7:
3443 return MISCREG_PMCCFILTR_EL0;
3444 }
3445 }
3446 break;
3447 case 4:
3448 switch (crm) {
3449 case 0:
3450 switch (op2) {
3451 case 3:
3452 return MISCREG_CNTVOFF_EL2;
3453 }
3454 break;
3455 case 1:
3456 switch (op2) {
3457 case 0:
3458 return MISCREG_CNTHCTL_EL2;
3459 }
3460 break;
3461 case 2:
3462 switch (op2) {
3463 case 0:
3464 return MISCREG_CNTHP_TVAL_EL2;
3465 case 1:
3466 return MISCREG_CNTHP_CTL_EL2;
3467 case 2:
3468 return MISCREG_CNTHP_CVAL_EL2;
3469 }
3470 break;
3471 }
3472 break;
3473 case 7:
3474 switch (crm) {
3475 case 2:
3476 switch (op2) {
3477 case 0:
3478 return MISCREG_CNTPS_TVAL_EL1;
3479 case 1:
3480 return MISCREG_CNTPS_CTL_EL1;
3481 case 2:
3482 return MISCREG_CNTPS_CVAL_EL1;
3483 }
3484 break;
3485 }
3486 break;
3487 }
3488 break;
3489 case 15:
3490 switch (op1) {
3491 case 0:
3492 switch (crm) {
3493 case 0:
3494 switch (op2) {
3495 case 0:
3496 return MISCREG_IL1DATA0_EL1;
3497 case 1:
3498 return MISCREG_IL1DATA1_EL1;
3499 case 2:
3500 return MISCREG_IL1DATA2_EL1;
3501 case 3:
3502 return MISCREG_IL1DATA3_EL1;
3503 }
3504 break;
3505 case 1:
3506 switch (op2) {
3507 case 0:
3508 return MISCREG_DL1DATA0_EL1;
3509 case 1:
3510 return MISCREG_DL1DATA1_EL1;
3511 case 2:
3512 return MISCREG_DL1DATA2_EL1;
3513 case 3:
3514 return MISCREG_DL1DATA3_EL1;
3515 case 4:
3516 return MISCREG_DL1DATA4_EL1;
3517 }
3518 break;
3519 }
3520 break;
3521 case 1:
3522 switch (crm) {
3523 case 0:
3524 switch (op2) {
3525 case 0:
3526 return MISCREG_L2ACTLR_EL1;
3527 }
3528 break;
3529 case 2:
3530 switch (op2) {
3531 case 0:
3532 return MISCREG_CPUACTLR_EL1;
3533 case 1:
3534 return MISCREG_CPUECTLR_EL1;
3535 case 2:
3536 return MISCREG_CPUMERRSR_EL1;
3537 case 3:
3538 return MISCREG_L2MERRSR_EL1;
3539 }
3540 break;
3541 case 3:
3542 switch (op2) {
3543 case 0:
3544 return MISCREG_CBAR_EL1;
3545
3546 }
3547 break;
3548 }
3549 break;
3550 }
3551 break;
3552 }
3553 break;
3554 }
3555
3556 return MISCREG_UNKNOWN;
3557}
3558
3559} // namespace ArmISA