miscregs.cc revision 10856:d02b45a554b5
1/*
2 * Copyright (c) 2010-2013, 2015 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"
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("01111000000000000000")),
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    int reg_as_int = static_cast<int>(reg);
2043    if (miscRegInfo[reg][MISCREG_BANKED]) {
2044        SCR scr = tc->readMiscReg(MISCREG_SCR);
2045        reg_as_int += (ArmSystem::haveSecurity(tc) && !scr.ns) ? 2 : 1;
2046    }
2047    return reg_as_int;
2048}
2049
2050int
2051flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc, bool ns)
2052{
2053    int reg_as_int = static_cast<int>(reg);
2054    if (miscRegInfo[reg][MISCREG_BANKED]) {
2055        reg_as_int += (ArmSystem::haveSecurity(tc) && !ns) ? 2 : 1;
2056    }
2057    return reg_as_int;
2058}
2059
2060
2061/**
2062 * If the reg is a child reg of a banked set, then the parent is the last
2063 * banked one in the list. This is messy, and the wish is to eventually have
2064 * the bitmap replaced with a better data structure. the preUnflatten function
2065 * initializes a lookup table to speed up the search for these banked
2066 * registers.
2067 */
2068
2069int unflattenResultMiscReg[NUM_MISCREGS];
2070
2071void
2072preUnflattenMiscReg()
2073{
2074    int reg = -1;
2075    for (int i = 0 ; i < NUM_MISCREGS; i++){
2076        if (miscRegInfo[i][MISCREG_BANKED])
2077            reg = i;
2078        if (miscRegInfo[i][MISCREG_BANKED_CHILD])
2079            unflattenResultMiscReg[i] = reg;
2080        else
2081            unflattenResultMiscReg[i] = i;
2082        // if this assert fails, no parent was found, and something is broken
2083        assert(unflattenResultMiscReg[i] > -1);
2084    }
2085}
2086
2087int
2088unflattenMiscReg(int reg)
2089{
2090    return unflattenResultMiscReg[reg];
2091}
2092
2093bool
2094canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2095{
2096    // Check for SP_EL0 access while SPSEL == 0
2097    if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2098        return false;
2099
2100    // Check for RVBAR access
2101    if (reg == MISCREG_RVBAR_EL1) {
2102        ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2103        if (highest_el == EL2 || highest_el == EL3)
2104            return false;
2105    }
2106    if (reg == MISCREG_RVBAR_EL2) {
2107        ExceptionLevel highest_el = ArmSystem::highestEL(tc);
2108        if (highest_el == EL3)
2109            return false;
2110    }
2111
2112    bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2113
2114    switch (opModeToEL((OperatingMode) (uint8_t) cpsr.mode)) {
2115      case EL0:
2116        return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
2117            miscRegInfo[reg][MISCREG_USR_NS_RD];
2118      case EL1:
2119        return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
2120            miscRegInfo[reg][MISCREG_PRI_NS_RD];
2121      // @todo: uncomment this to enable Virtualization
2122      // case EL2:
2123      //   return miscRegInfo[reg][MISCREG_HYP_RD];
2124      case EL3:
2125        return secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
2126            miscRegInfo[reg][MISCREG_MON_NS1_RD];
2127      default:
2128        panic("Invalid exception level");
2129    }
2130}
2131
2132bool
2133canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
2134{
2135    // Check for SP_EL0 access while SPSEL == 0
2136    if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
2137        return false;
2138    ExceptionLevel el = opModeToEL((OperatingMode) (uint8_t) cpsr.mode);
2139    if (reg == MISCREG_DAIF) {
2140        SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2141        if (el == EL0 && !sctlr.uma)
2142            return false;
2143    }
2144    if (FullSystem && reg == MISCREG_DC_ZVA_Xt) {
2145        // In syscall-emulation mode, this test is skipped and DCZVA is always
2146        // allowed at EL0
2147        SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2148        if (el == EL0 && !sctlr.dze)
2149            return false;
2150    }
2151    if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) {
2152        SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
2153        if (el == EL0 && !sctlr.uci)
2154            return false;
2155    }
2156
2157    bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
2158
2159    switch (el) {
2160      case EL0:
2161        return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
2162            miscRegInfo[reg][MISCREG_USR_NS_WR];
2163      case EL1:
2164        return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
2165            miscRegInfo[reg][MISCREG_PRI_NS_WR];
2166      // @todo: uncomment this to enable Virtualization
2167      // case EL2:
2168      //   return miscRegInfo[reg][MISCREG_HYP_WR];
2169      case EL3:
2170        return secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
2171            miscRegInfo[reg][MISCREG_MON_NS1_WR];
2172      default:
2173        panic("Invalid exception level");
2174    }
2175}
2176
2177MiscRegIndex
2178decodeAArch64SysReg(unsigned op0, unsigned op1,
2179                    unsigned crn, unsigned crm,
2180                    unsigned op2)
2181{
2182    switch (op0) {
2183      case 1:
2184        switch (crn) {
2185          case 7:
2186            switch (op1) {
2187              case 0:
2188                switch (crm) {
2189                  case 1:
2190                    switch (op2) {
2191                      case 0:
2192                        return MISCREG_IC_IALLUIS;
2193                    }
2194                    break;
2195                  case 5:
2196                    switch (op2) {
2197                      case 0:
2198                        return MISCREG_IC_IALLU;
2199                    }
2200                    break;
2201                  case 6:
2202                    switch (op2) {
2203                      case 1:
2204                        return MISCREG_DC_IVAC_Xt;
2205                      case 2:
2206                        return MISCREG_DC_ISW_Xt;
2207                    }
2208                    break;
2209                  case 8:
2210                    switch (op2) {
2211                      case 0:
2212                        return MISCREG_AT_S1E1R_Xt;
2213                      case 1:
2214                        return MISCREG_AT_S1E1W_Xt;
2215                      case 2:
2216                        return MISCREG_AT_S1E0R_Xt;
2217                      case 3:
2218                        return MISCREG_AT_S1E0W_Xt;
2219                    }
2220                    break;
2221                  case 10:
2222                    switch (op2) {
2223                      case 2:
2224                        return MISCREG_DC_CSW_Xt;
2225                    }
2226                    break;
2227                  case 14:
2228                    switch (op2) {
2229                      case 2:
2230                        return MISCREG_DC_CISW_Xt;
2231                    }
2232                    break;
2233                }
2234                break;
2235              case 3:
2236                switch (crm) {
2237                  case 4:
2238                    switch (op2) {
2239                      case 1:
2240                        return MISCREG_DC_ZVA_Xt;
2241                    }
2242                    break;
2243                  case 5:
2244                    switch (op2) {
2245                      case 1:
2246                        return MISCREG_IC_IVAU_Xt;
2247                    }
2248                    break;
2249                  case 10:
2250                    switch (op2) {
2251                      case 1:
2252                        return MISCREG_DC_CVAC_Xt;
2253                    }
2254                    break;
2255                  case 11:
2256                    switch (op2) {
2257                      case 1:
2258                        return MISCREG_DC_CVAU_Xt;
2259                    }
2260                    break;
2261                  case 14:
2262                    switch (op2) {
2263                      case 1:
2264                        return MISCREG_DC_CIVAC_Xt;
2265                    }
2266                    break;
2267                }
2268                break;
2269              case 4:
2270                switch (crm) {
2271                  case 8:
2272                    switch (op2) {
2273                      case 0:
2274                        return MISCREG_AT_S1E2R_Xt;
2275                      case 1:
2276                        return MISCREG_AT_S1E2W_Xt;
2277                      case 4:
2278                        return MISCREG_AT_S12E1R_Xt;
2279                      case 5:
2280                        return MISCREG_AT_S12E1W_Xt;
2281                      case 6:
2282                        return MISCREG_AT_S12E0R_Xt;
2283                      case 7:
2284                        return MISCREG_AT_S12E0W_Xt;
2285                    }
2286                    break;
2287                }
2288                break;
2289              case 6:
2290                switch (crm) {
2291                  case 8:
2292                    switch (op2) {
2293                      case 0:
2294                        return MISCREG_AT_S1E3R_Xt;
2295                      case 1:
2296                        return MISCREG_AT_S1E3W_Xt;
2297                    }
2298                    break;
2299                }
2300                break;
2301            }
2302            break;
2303          case 8:
2304            switch (op1) {
2305              case 0:
2306                switch (crm) {
2307                  case 3:
2308                    switch (op2) {
2309                      case 0:
2310                        return MISCREG_TLBI_VMALLE1IS;
2311                      case 1:
2312                        return MISCREG_TLBI_VAE1IS_Xt;
2313                      case 2:
2314                        return MISCREG_TLBI_ASIDE1IS_Xt;
2315                      case 3:
2316                        return MISCREG_TLBI_VAAE1IS_Xt;
2317                      case 5:
2318                        return MISCREG_TLBI_VALE1IS_Xt;
2319                      case 7:
2320                        return MISCREG_TLBI_VAALE1IS_Xt;
2321                    }
2322                    break;
2323                  case 7:
2324                    switch (op2) {
2325                      case 0:
2326                        return MISCREG_TLBI_VMALLE1;
2327                      case 1:
2328                        return MISCREG_TLBI_VAE1_Xt;
2329                      case 2:
2330                        return MISCREG_TLBI_ASIDE1_Xt;
2331                      case 3:
2332                        return MISCREG_TLBI_VAAE1_Xt;
2333                      case 5:
2334                        return MISCREG_TLBI_VALE1_Xt;
2335                      case 7:
2336                        return MISCREG_TLBI_VAALE1_Xt;
2337                    }
2338                    break;
2339                }
2340                break;
2341              case 4:
2342                switch (crm) {
2343                  case 0:
2344                    switch (op2) {
2345                      case 1:
2346                        return MISCREG_TLBI_IPAS2E1IS_Xt;
2347                      case 5:
2348                        return MISCREG_TLBI_IPAS2LE1IS_Xt;
2349                    }
2350                    break;
2351                  case 3:
2352                    switch (op2) {
2353                      case 0:
2354                        return MISCREG_TLBI_ALLE2IS;
2355                      case 1:
2356                        return MISCREG_TLBI_VAE2IS_Xt;
2357                      case 4:
2358                        return MISCREG_TLBI_ALLE1IS;
2359                      case 5:
2360                        return MISCREG_TLBI_VALE2IS_Xt;
2361                      case 6:
2362                        return MISCREG_TLBI_VMALLS12E1IS;
2363                    }
2364                    break;
2365                  case 4:
2366                    switch (op2) {
2367                      case 1:
2368                        return MISCREG_TLBI_IPAS2E1_Xt;
2369                      case 5:
2370                        return MISCREG_TLBI_IPAS2LE1_Xt;
2371                    }
2372                    break;
2373                  case 7:
2374                    switch (op2) {
2375                      case 0:
2376                        return MISCREG_TLBI_ALLE2;
2377                      case 1:
2378                        return MISCREG_TLBI_VAE2_Xt;
2379                      case 4:
2380                        return MISCREG_TLBI_ALLE1;
2381                      case 5:
2382                        return MISCREG_TLBI_VALE2_Xt;
2383                      case 6:
2384                        return MISCREG_TLBI_VMALLS12E1;
2385                    }
2386                    break;
2387                }
2388                break;
2389              case 6:
2390                switch (crm) {
2391                  case 3:
2392                    switch (op2) {
2393                      case 0:
2394                        return MISCREG_TLBI_ALLE3IS;
2395                      case 1:
2396                        return MISCREG_TLBI_VAE3IS_Xt;
2397                      case 5:
2398                        return MISCREG_TLBI_VALE3IS_Xt;
2399                    }
2400                    break;
2401                  case 7:
2402                    switch (op2) {
2403                      case 0:
2404                        return MISCREG_TLBI_ALLE3;
2405                      case 1:
2406                        return MISCREG_TLBI_VAE3_Xt;
2407                      case 5:
2408                        return MISCREG_TLBI_VALE3_Xt;
2409                    }
2410                    break;
2411                }
2412                break;
2413            }
2414            break;
2415        }
2416        break;
2417      case 2:
2418        switch (crn) {
2419          case 0:
2420            switch (op1) {
2421              case 0:
2422                switch (crm) {
2423                  case 0:
2424                    switch (op2) {
2425                      case 2:
2426                        return MISCREG_OSDTRRX_EL1;
2427                      case 4:
2428                        return MISCREG_DBGBVR0_EL1;
2429                      case 5:
2430                        return MISCREG_DBGBCR0_EL1;
2431                      case 6:
2432                        return MISCREG_DBGWVR0_EL1;
2433                      case 7:
2434                        return MISCREG_DBGWCR0_EL1;
2435                    }
2436                    break;
2437                  case 1:
2438                    switch (op2) {
2439                      case 4:
2440                        return MISCREG_DBGBVR1_EL1;
2441                      case 5:
2442                        return MISCREG_DBGBCR1_EL1;
2443                      case 6:
2444                        return MISCREG_DBGWVR1_EL1;
2445                      case 7:
2446                        return MISCREG_DBGWCR1_EL1;
2447                    }
2448                    break;
2449                  case 2:
2450                    switch (op2) {
2451                      case 0:
2452                        return MISCREG_MDCCINT_EL1;
2453                      case 2:
2454                        return MISCREG_MDSCR_EL1;
2455                      case 4:
2456                        return MISCREG_DBGBVR2_EL1;
2457                      case 5:
2458                        return MISCREG_DBGBCR2_EL1;
2459                      case 6:
2460                        return MISCREG_DBGWVR2_EL1;
2461                      case 7:
2462                        return MISCREG_DBGWCR2_EL1;
2463                    }
2464                    break;
2465                  case 3:
2466                    switch (op2) {
2467                      case 2:
2468                        return MISCREG_OSDTRTX_EL1;
2469                      case 4:
2470                        return MISCREG_DBGBVR3_EL1;
2471                      case 5:
2472                        return MISCREG_DBGBCR3_EL1;
2473                      case 6:
2474                        return MISCREG_DBGWVR3_EL1;
2475                      case 7:
2476                        return MISCREG_DBGWCR3_EL1;
2477                    }
2478                    break;
2479                  case 4:
2480                    switch (op2) {
2481                      case 4:
2482                        return MISCREG_DBGBVR4_EL1;
2483                      case 5:
2484                        return MISCREG_DBGBCR4_EL1;
2485                    }
2486                    break;
2487                  case 5:
2488                    switch (op2) {
2489                      case 4:
2490                        return MISCREG_DBGBVR5_EL1;
2491                      case 5:
2492                        return MISCREG_DBGBCR5_EL1;
2493                    }
2494                    break;
2495                  case 6:
2496                    switch (op2) {
2497                      case 2:
2498                        return MISCREG_OSECCR_EL1;
2499                    }
2500                    break;
2501                }
2502                break;
2503              case 2:
2504                switch (crm) {
2505                  case 0:
2506                    switch (op2) {
2507                      case 0:
2508                        return MISCREG_TEECR32_EL1;
2509                    }
2510                    break;
2511                }
2512                break;
2513              case 3:
2514                switch (crm) {
2515                  case 1:
2516                    switch (op2) {
2517                      case 0:
2518                        return MISCREG_MDCCSR_EL0;
2519                    }
2520                    break;
2521                  case 4:
2522                    switch (op2) {
2523                      case 0:
2524                        return MISCREG_MDDTR_EL0;
2525                    }
2526                    break;
2527                  case 5:
2528                    switch (op2) {
2529                      case 0:
2530                        return MISCREG_MDDTRRX_EL0;
2531                    }
2532                    break;
2533                }
2534                break;
2535              case 4:
2536                switch (crm) {
2537                  case 7:
2538                    switch (op2) {
2539                      case 0:
2540                        return MISCREG_DBGVCR32_EL2;
2541                    }
2542                    break;
2543                }
2544                break;
2545            }
2546            break;
2547          case 1:
2548            switch (op1) {
2549              case 0:
2550                switch (crm) {
2551                  case 0:
2552                    switch (op2) {
2553                      case 0:
2554                        return MISCREG_MDRAR_EL1;
2555                      case 4:
2556                        return MISCREG_OSLAR_EL1;
2557                    }
2558                    break;
2559                  case 1:
2560                    switch (op2) {
2561                      case 4:
2562                        return MISCREG_OSLSR_EL1;
2563                    }
2564                    break;
2565                  case 3:
2566                    switch (op2) {
2567                      case 4:
2568                        return MISCREG_OSDLR_EL1;
2569                    }
2570                    break;
2571                  case 4:
2572                    switch (op2) {
2573                      case 4:
2574                        return MISCREG_DBGPRCR_EL1;
2575                    }
2576                    break;
2577                }
2578                break;
2579              case 2:
2580                switch (crm) {
2581                  case 0:
2582                    switch (op2) {
2583                      case 0:
2584                        return MISCREG_TEEHBR32_EL1;
2585                    }
2586                    break;
2587                }
2588                break;
2589            }
2590            break;
2591          case 7:
2592            switch (op1) {
2593              case 0:
2594                switch (crm) {
2595                  case 8:
2596                    switch (op2) {
2597                      case 6:
2598                        return MISCREG_DBGCLAIMSET_EL1;
2599                    }
2600                    break;
2601                  case 9:
2602                    switch (op2) {
2603                      case 6:
2604                        return MISCREG_DBGCLAIMCLR_EL1;
2605                    }
2606                    break;
2607                  case 14:
2608                    switch (op2) {
2609                      case 6:
2610                        return MISCREG_DBGAUTHSTATUS_EL1;
2611                    }
2612                    break;
2613                }
2614                break;
2615            }
2616            break;
2617        }
2618        break;
2619      case 3:
2620        switch (crn) {
2621          case 0:
2622            switch (op1) {
2623              case 0:
2624                switch (crm) {
2625                  case 0:
2626                    switch (op2) {
2627                      case 0:
2628                        return MISCREG_MIDR_EL1;
2629                      case 5:
2630                        return MISCREG_MPIDR_EL1;
2631                      case 6:
2632                        return MISCREG_REVIDR_EL1;
2633                    }
2634                    break;
2635                  case 1:
2636                    switch (op2) {
2637                      case 0:
2638                        return MISCREG_ID_PFR0_EL1;
2639                      case 1:
2640                        return MISCREG_ID_PFR1_EL1;
2641                      case 2:
2642                        return MISCREG_ID_DFR0_EL1;
2643                      case 3:
2644                        return MISCREG_ID_AFR0_EL1;
2645                      case 4:
2646                        return MISCREG_ID_MMFR0_EL1;
2647                      case 5:
2648                        return MISCREG_ID_MMFR1_EL1;
2649                      case 6:
2650                        return MISCREG_ID_MMFR2_EL1;
2651                      case 7:
2652                        return MISCREG_ID_MMFR3_EL1;
2653                    }
2654                    break;
2655                  case 2:
2656                    switch (op2) {
2657                      case 0:
2658                        return MISCREG_ID_ISAR0_EL1;
2659                      case 1:
2660                        return MISCREG_ID_ISAR1_EL1;
2661                      case 2:
2662                        return MISCREG_ID_ISAR2_EL1;
2663                      case 3:
2664                        return MISCREG_ID_ISAR3_EL1;
2665                      case 4:
2666                        return MISCREG_ID_ISAR4_EL1;
2667                      case 5:
2668                        return MISCREG_ID_ISAR5_EL1;
2669                    }
2670                    break;
2671                  case 3:
2672                    switch (op2) {
2673                      case 0:
2674                        return MISCREG_MVFR0_EL1;
2675                      case 1:
2676                        return MISCREG_MVFR1_EL1;
2677                      case 2:
2678                        return MISCREG_MVFR2_EL1;
2679                      case 3 ... 7:
2680                        return MISCREG_RAZ;
2681                    }
2682                    break;
2683                  case 4:
2684                    switch (op2) {
2685                      case 0:
2686                        return MISCREG_ID_AA64PFR0_EL1;
2687                      case 1:
2688                        return MISCREG_ID_AA64PFR1_EL1;
2689                      case 2 ... 7:
2690                        return MISCREG_RAZ;
2691                    }
2692                    break;
2693                  case 5:
2694                    switch (op2) {
2695                      case 0:
2696                        return MISCREG_ID_AA64DFR0_EL1;
2697                      case 1:
2698                        return MISCREG_ID_AA64DFR1_EL1;
2699                      case 4:
2700                        return MISCREG_ID_AA64AFR0_EL1;
2701                      case 5:
2702                        return MISCREG_ID_AA64AFR1_EL1;
2703                      case 2:
2704                      case 3:
2705                      case 6:
2706                      case 7:
2707                        return MISCREG_RAZ;
2708                    }
2709                    break;
2710                  case 6:
2711                    switch (op2) {
2712                      case 0:
2713                        return MISCREG_ID_AA64ISAR0_EL1;
2714                      case 1:
2715                        return MISCREG_ID_AA64ISAR1_EL1;
2716                      case 2 ... 7:
2717                        return MISCREG_RAZ;
2718                    }
2719                    break;
2720                  case 7:
2721                    switch (op2) {
2722                      case 0:
2723                        return MISCREG_ID_AA64MMFR0_EL1;
2724                      case 1:
2725                        return MISCREG_ID_AA64MMFR1_EL1;
2726                      case 2 ... 7:
2727                        return MISCREG_RAZ;
2728                    }
2729                    break;
2730                }
2731                break;
2732              case 1:
2733                switch (crm) {
2734                  case 0:
2735                    switch (op2) {
2736                      case 0:
2737                        return MISCREG_CCSIDR_EL1;
2738                      case 1:
2739                        return MISCREG_CLIDR_EL1;
2740                      case 7:
2741                        return MISCREG_AIDR_EL1;
2742                    }
2743                    break;
2744                }
2745                break;
2746              case 2:
2747                switch (crm) {
2748                  case 0:
2749                    switch (op2) {
2750                      case 0:
2751                        return MISCREG_CSSELR_EL1;
2752                    }
2753                    break;
2754                }
2755                break;
2756              case 3:
2757                switch (crm) {
2758                  case 0:
2759                    switch (op2) {
2760                      case 1:
2761                        return MISCREG_CTR_EL0;
2762                      case 7:
2763                        return MISCREG_DCZID_EL0;
2764                    }
2765                    break;
2766                }
2767                break;
2768              case 4:
2769                switch (crm) {
2770                  case 0:
2771                    switch (op2) {
2772                      case 0:
2773                        return MISCREG_VPIDR_EL2;
2774                      case 5:
2775                        return MISCREG_VMPIDR_EL2;
2776                    }
2777                    break;
2778                }
2779                break;
2780            }
2781            break;
2782          case 1:
2783            switch (op1) {
2784              case 0:
2785                switch (crm) {
2786                  case 0:
2787                    switch (op2) {
2788                      case 0:
2789                        return MISCREG_SCTLR_EL1;
2790                      case 1:
2791                        return MISCREG_ACTLR_EL1;
2792                      case 2:
2793                        return MISCREG_CPACR_EL1;
2794                    }
2795                    break;
2796                }
2797                break;
2798              case 4:
2799                switch (crm) {
2800                  case 0:
2801                    switch (op2) {
2802                      case 0:
2803                        return MISCREG_SCTLR_EL2;
2804                      case 1:
2805                        return MISCREG_ACTLR_EL2;
2806                    }
2807                    break;
2808                  case 1:
2809                    switch (op2) {
2810                      case 0:
2811                        return MISCREG_HCR_EL2;
2812                      case 1:
2813                        return MISCREG_MDCR_EL2;
2814                      case 2:
2815                        return MISCREG_CPTR_EL2;
2816                      case 3:
2817                        return MISCREG_HSTR_EL2;
2818                      case 7:
2819                        return MISCREG_HACR_EL2;
2820                    }
2821                    break;
2822                }
2823                break;
2824              case 6:
2825                switch (crm) {
2826                  case 0:
2827                    switch (op2) {
2828                      case 0:
2829                        return MISCREG_SCTLR_EL3;
2830                      case 1:
2831                        return MISCREG_ACTLR_EL3;
2832                    }
2833                    break;
2834                  case 1:
2835                    switch (op2) {
2836                      case 0:
2837                        return MISCREG_SCR_EL3;
2838                      case 1:
2839                        return MISCREG_SDER32_EL3;
2840                      case 2:
2841                        return MISCREG_CPTR_EL3;
2842                    }
2843                    break;
2844                  case 3:
2845                    switch (op2) {
2846                      case 1:
2847                        return MISCREG_MDCR_EL3;
2848                    }
2849                    break;
2850                }
2851                break;
2852            }
2853            break;
2854          case 2:
2855            switch (op1) {
2856              case 0:
2857                switch (crm) {
2858                  case 0:
2859                    switch (op2) {
2860                      case 0:
2861                        return MISCREG_TTBR0_EL1;
2862                      case 1:
2863                        return MISCREG_TTBR1_EL1;
2864                      case 2:
2865                        return MISCREG_TCR_EL1;
2866                    }
2867                    break;
2868                }
2869                break;
2870              case 4:
2871                switch (crm) {
2872                  case 0:
2873                    switch (op2) {
2874                      case 0:
2875                        return MISCREG_TTBR0_EL2;
2876                      case 2:
2877                        return MISCREG_TCR_EL2;
2878                    }
2879                    break;
2880                  case 1:
2881                    switch (op2) {
2882                      case 0:
2883                        return MISCREG_VTTBR_EL2;
2884                      case 2:
2885                        return MISCREG_VTCR_EL2;
2886                    }
2887                    break;
2888                }
2889                break;
2890              case 6:
2891                switch (crm) {
2892                  case 0:
2893                    switch (op2) {
2894                      case 0:
2895                        return MISCREG_TTBR0_EL3;
2896                      case 2:
2897                        return MISCREG_TCR_EL3;
2898                    }
2899                    break;
2900                }
2901                break;
2902            }
2903            break;
2904          case 3:
2905            switch (op1) {
2906              case 4:
2907                switch (crm) {
2908                  case 0:
2909                    switch (op2) {
2910                      case 0:
2911                        return MISCREG_DACR32_EL2;
2912                    }
2913                    break;
2914                }
2915                break;
2916            }
2917            break;
2918          case 4:
2919            switch (op1) {
2920              case 0:
2921                switch (crm) {
2922                  case 0:
2923                    switch (op2) {
2924                      case 0:
2925                        return MISCREG_SPSR_EL1;
2926                      case 1:
2927                        return MISCREG_ELR_EL1;
2928                    }
2929                    break;
2930                  case 1:
2931                    switch (op2) {
2932                      case 0:
2933                        return MISCREG_SP_EL0;
2934                    }
2935                    break;
2936                  case 2:
2937                    switch (op2) {
2938                      case 0:
2939                        return MISCREG_SPSEL;
2940                      case 2:
2941                        return MISCREG_CURRENTEL;
2942                    }
2943                    break;
2944                }
2945                break;
2946              case 3:
2947                switch (crm) {
2948                  case 2:
2949                    switch (op2) {
2950                      case 0:
2951                        return MISCREG_NZCV;
2952                      case 1:
2953                        return MISCREG_DAIF;
2954                    }
2955                    break;
2956                  case 4:
2957                    switch (op2) {
2958                      case 0:
2959                        return MISCREG_FPCR;
2960                      case 1:
2961                        return MISCREG_FPSR;
2962                    }
2963                    break;
2964                  case 5:
2965                    switch (op2) {
2966                      case 0:
2967                        return MISCREG_DSPSR_EL0;
2968                      case 1:
2969                        return MISCREG_DLR_EL0;
2970                    }
2971                    break;
2972                }
2973                break;
2974              case 4:
2975                switch (crm) {
2976                  case 0:
2977                    switch (op2) {
2978                      case 0:
2979                        return MISCREG_SPSR_EL2;
2980                      case 1:
2981                        return MISCREG_ELR_EL2;
2982                    }
2983                    break;
2984                  case 1:
2985                    switch (op2) {
2986                      case 0:
2987                        return MISCREG_SP_EL1;
2988                    }
2989                    break;
2990                  case 3:
2991                    switch (op2) {
2992                      case 0:
2993                        return MISCREG_SPSR_IRQ_AA64;
2994                      case 1:
2995                        return MISCREG_SPSR_ABT_AA64;
2996                      case 2:
2997                        return MISCREG_SPSR_UND_AA64;
2998                      case 3:
2999                        return MISCREG_SPSR_FIQ_AA64;
3000                    }
3001                    break;
3002                }
3003                break;
3004              case 6:
3005                switch (crm) {
3006                  case 0:
3007                    switch (op2) {
3008                      case 0:
3009                        return MISCREG_SPSR_EL3;
3010                      case 1:
3011                        return MISCREG_ELR_EL3;
3012                    }
3013                    break;
3014                  case 1:
3015                    switch (op2) {
3016                      case 0:
3017                        return MISCREG_SP_EL2;
3018                    }
3019                    break;
3020                }
3021                break;
3022            }
3023            break;
3024          case 5:
3025            switch (op1) {
3026              case 0:
3027                switch (crm) {
3028                  case 1:
3029                    switch (op2) {
3030                      case 0:
3031                        return MISCREG_AFSR0_EL1;
3032                      case 1:
3033                        return MISCREG_AFSR1_EL1;
3034                    }
3035                    break;
3036                  case 2:
3037                    switch (op2) {
3038                      case 0:
3039                        return MISCREG_ESR_EL1;
3040                    }
3041                    break;
3042                }
3043                break;
3044              case 4:
3045                switch (crm) {
3046                  case 0:
3047                    switch (op2) {
3048                      case 1:
3049                        return MISCREG_IFSR32_EL2;
3050                    }
3051                    break;
3052                  case 1:
3053                    switch (op2) {
3054                      case 0:
3055                        return MISCREG_AFSR0_EL2;
3056                      case 1:
3057                        return MISCREG_AFSR1_EL2;
3058                    }
3059                    break;
3060                  case 2:
3061                    switch (op2) {
3062                      case 0:
3063                        return MISCREG_ESR_EL2;
3064                    }
3065                    break;
3066                  case 3:
3067                    switch (op2) {
3068                      case 0:
3069                        return MISCREG_FPEXC32_EL2;
3070                    }
3071                    break;
3072                }
3073                break;
3074              case 6:
3075                switch (crm) {
3076                  case 1:
3077                    switch (op2) {
3078                      case 0:
3079                        return MISCREG_AFSR0_EL3;
3080                      case 1:
3081                        return MISCREG_AFSR1_EL3;
3082                    }
3083                    break;
3084                  case 2:
3085                    switch (op2) {
3086                      case 0:
3087                        return MISCREG_ESR_EL3;
3088                    }
3089                    break;
3090                }
3091                break;
3092            }
3093            break;
3094          case 6:
3095            switch (op1) {
3096              case 0:
3097                switch (crm) {
3098                  case 0:
3099                    switch (op2) {
3100                      case 0:
3101                        return MISCREG_FAR_EL1;
3102                    }
3103                    break;
3104                }
3105                break;
3106              case 4:
3107                switch (crm) {
3108                  case 0:
3109                    switch (op2) {
3110                      case 0:
3111                        return MISCREG_FAR_EL2;
3112                      case 4:
3113                        return MISCREG_HPFAR_EL2;
3114                    }
3115                    break;
3116                }
3117                break;
3118              case 6:
3119                switch (crm) {
3120                  case 0:
3121                    switch (op2) {
3122                      case 0:
3123                        return MISCREG_FAR_EL3;
3124                    }
3125                    break;
3126                }
3127                break;
3128            }
3129            break;
3130          case 7:
3131            switch (op1) {
3132              case 0:
3133                switch (crm) {
3134                  case 4:
3135                    switch (op2) {
3136                      case 0:
3137                        return MISCREG_PAR_EL1;
3138                    }
3139                    break;
3140                }
3141                break;
3142            }
3143            break;
3144          case 9:
3145            switch (op1) {
3146              case 0:
3147                switch (crm) {
3148                  case 14:
3149                    switch (op2) {
3150                      case 1:
3151                        return MISCREG_PMINTENSET_EL1;
3152                      case 2:
3153                        return MISCREG_PMINTENCLR_EL1;
3154                    }
3155                    break;
3156                }
3157                break;
3158              case 3:
3159                switch (crm) {
3160                  case 12:
3161                    switch (op2) {
3162                      case 0:
3163                        return MISCREG_PMCR_EL0;
3164                      case 1:
3165                        return MISCREG_PMCNTENSET_EL0;
3166                      case 2:
3167                        return MISCREG_PMCNTENCLR_EL0;
3168                      case 3:
3169                        return MISCREG_PMOVSCLR_EL0;
3170                      case 4:
3171                        return MISCREG_PMSWINC_EL0;
3172                      case 5:
3173                        return MISCREG_PMSELR_EL0;
3174                      case 6:
3175                        return MISCREG_PMCEID0_EL0;
3176                      case 7:
3177                        return MISCREG_PMCEID1_EL0;
3178                    }
3179                    break;
3180                  case 13:
3181                    switch (op2) {
3182                      case 0:
3183                        return MISCREG_PMCCNTR_EL0;
3184                      case 1:
3185                        return MISCREG_PMXEVTYPER_EL0;
3186                      case 2:
3187                        return MISCREG_PMXEVCNTR_EL0;
3188                    }
3189                    break;
3190                  case 14:
3191                    switch (op2) {
3192                      case 0:
3193                        return MISCREG_PMUSERENR_EL0;
3194                      case 3:
3195                        return MISCREG_PMOVSSET_EL0;
3196                    }
3197                    break;
3198                }
3199                break;
3200            }
3201            break;
3202          case 10:
3203            switch (op1) {
3204              case 0:
3205                switch (crm) {
3206                  case 2:
3207                    switch (op2) {
3208                      case 0:
3209                        return MISCREG_MAIR_EL1;
3210                    }
3211                    break;
3212                  case 3:
3213                    switch (op2) {
3214                      case 0:
3215                        return MISCREG_AMAIR_EL1;
3216                    }
3217                    break;
3218                }
3219                break;
3220              case 4:
3221                switch (crm) {
3222                  case 2:
3223                    switch (op2) {
3224                      case 0:
3225                        return MISCREG_MAIR_EL2;
3226                    }
3227                    break;
3228                  case 3:
3229                    switch (op2) {
3230                      case 0:
3231                        return MISCREG_AMAIR_EL2;
3232                    }
3233                    break;
3234                }
3235                break;
3236              case 6:
3237                switch (crm) {
3238                  case 2:
3239                    switch (op2) {
3240                      case 0:
3241                        return MISCREG_MAIR_EL3;
3242                    }
3243                    break;
3244                  case 3:
3245                    switch (op2) {
3246                      case 0:
3247                        return MISCREG_AMAIR_EL3;
3248                    }
3249                    break;
3250                }
3251                break;
3252            }
3253            break;
3254          case 11:
3255            switch (op1) {
3256              case 1:
3257                switch (crm) {
3258                  case 0:
3259                    switch (op2) {
3260                      case 2:
3261                        return MISCREG_L2CTLR_EL1;
3262                      case 3:
3263                        return MISCREG_L2ECTLR_EL1;
3264                    }
3265                    break;
3266                }
3267                break;
3268            }
3269            break;
3270          case 12:
3271            switch (op1) {
3272              case 0:
3273                switch (crm) {
3274                  case 0:
3275                    switch (op2) {
3276                      case 0:
3277                        return MISCREG_VBAR_EL1;
3278                      case 1:
3279                        return MISCREG_RVBAR_EL1;
3280                    }
3281                    break;
3282                  case 1:
3283                    switch (op2) {
3284                      case 0:
3285                        return MISCREG_ISR_EL1;
3286                    }
3287                    break;
3288                }
3289                break;
3290              case 4:
3291                switch (crm) {
3292                  case 0:
3293                    switch (op2) {
3294                      case 0:
3295                        return MISCREG_VBAR_EL2;
3296                      case 1:
3297                        return MISCREG_RVBAR_EL2;
3298                    }
3299                    break;
3300                }
3301                break;
3302              case 6:
3303                switch (crm) {
3304                  case 0:
3305                    switch (op2) {
3306                      case 0:
3307                        return MISCREG_VBAR_EL3;
3308                      case 1:
3309                        return MISCREG_RVBAR_EL3;
3310                      case 2:
3311                        return MISCREG_RMR_EL3;
3312                    }
3313                    break;
3314                }
3315                break;
3316            }
3317            break;
3318          case 13:
3319            switch (op1) {
3320              case 0:
3321                switch (crm) {
3322                  case 0:
3323                    switch (op2) {
3324                      case 1:
3325                        return MISCREG_CONTEXTIDR_EL1;
3326                      case 4:
3327                        return MISCREG_TPIDR_EL1;
3328                    }
3329                    break;
3330                }
3331                break;
3332              case 3:
3333                switch (crm) {
3334                  case 0:
3335                    switch (op2) {
3336                      case 2:
3337                        return MISCREG_TPIDR_EL0;
3338                      case 3:
3339                        return MISCREG_TPIDRRO_EL0;
3340                    }
3341                    break;
3342                }
3343                break;
3344              case 4:
3345                switch (crm) {
3346                  case 0:
3347                    switch (op2) {
3348                      case 1:
3349                        return MISCREG_CONTEXTIDR_EL2;
3350                      case 2:
3351                        return MISCREG_TPIDR_EL2;
3352                    }
3353                    break;
3354                }
3355                break;
3356              case 6:
3357                switch (crm) {
3358                  case 0:
3359                    switch (op2) {
3360                      case 2:
3361                        return MISCREG_TPIDR_EL3;
3362                    }
3363                    break;
3364                }
3365                break;
3366            }
3367            break;
3368          case 14:
3369            switch (op1) {
3370              case 0:
3371                switch (crm) {
3372                  case 1:
3373                    switch (op2) {
3374                      case 0:
3375                        return MISCREG_CNTKCTL_EL1;
3376                    }
3377                    break;
3378                }
3379                break;
3380              case 3:
3381                switch (crm) {
3382                  case 0:
3383                    switch (op2) {
3384                      case 0:
3385                        return MISCREG_CNTFRQ_EL0;
3386                      case 1:
3387                        return MISCREG_CNTPCT_EL0;
3388                      case 2:
3389                        return MISCREG_CNTVCT_EL0;
3390                    }
3391                    break;
3392                  case 2:
3393                    switch (op2) {
3394                      case 0:
3395                        return MISCREG_CNTP_TVAL_EL0;
3396                      case 1:
3397                        return MISCREG_CNTP_CTL_EL0;
3398                      case 2:
3399                        return MISCREG_CNTP_CVAL_EL0;
3400                    }
3401                    break;
3402                  case 3:
3403                    switch (op2) {
3404                      case 0:
3405                        return MISCREG_CNTV_TVAL_EL0;
3406                      case 1:
3407                        return MISCREG_CNTV_CTL_EL0;
3408                      case 2:
3409                        return MISCREG_CNTV_CVAL_EL0;
3410                    }
3411                    break;
3412                  case 8:
3413                    switch (op2) {
3414                      case 0:
3415                        return MISCREG_PMEVCNTR0_EL0;
3416                      case 1:
3417                        return MISCREG_PMEVCNTR1_EL0;
3418                      case 2:
3419                        return MISCREG_PMEVCNTR2_EL0;
3420                      case 3:
3421                        return MISCREG_PMEVCNTR3_EL0;
3422                      case 4:
3423                        return MISCREG_PMEVCNTR4_EL0;
3424                      case 5:
3425                        return MISCREG_PMEVCNTR5_EL0;
3426                    }
3427                    break;
3428                  case 12:
3429                    switch (op2) {
3430                      case 0:
3431                        return MISCREG_PMEVTYPER0_EL0;
3432                      case 1:
3433                        return MISCREG_PMEVTYPER1_EL0;
3434                      case 2:
3435                        return MISCREG_PMEVTYPER2_EL0;
3436                      case 3:
3437                        return MISCREG_PMEVTYPER3_EL0;
3438                      case 4:
3439                        return MISCREG_PMEVTYPER4_EL0;
3440                      case 5:
3441                        return MISCREG_PMEVTYPER5_EL0;
3442                    }
3443                    break;
3444                  case 15:
3445                    switch (op2) {
3446                      case 7:
3447                        return MISCREG_PMCCFILTR_EL0;
3448                    }
3449                }
3450                break;
3451              case 4:
3452                switch (crm) {
3453                  case 0:
3454                    switch (op2) {
3455                      case 3:
3456                        return MISCREG_CNTVOFF_EL2;
3457                    }
3458                    break;
3459                  case 1:
3460                    switch (op2) {
3461                      case 0:
3462                        return MISCREG_CNTHCTL_EL2;
3463                    }
3464                    break;
3465                  case 2:
3466                    switch (op2) {
3467                      case 0:
3468                        return MISCREG_CNTHP_TVAL_EL2;
3469                      case 1:
3470                        return MISCREG_CNTHP_CTL_EL2;
3471                      case 2:
3472                        return MISCREG_CNTHP_CVAL_EL2;
3473                    }
3474                    break;
3475                }
3476                break;
3477              case 7:
3478                switch (crm) {
3479                  case 2:
3480                    switch (op2) {
3481                      case 0:
3482                        return MISCREG_CNTPS_TVAL_EL1;
3483                      case 1:
3484                        return MISCREG_CNTPS_CTL_EL1;
3485                      case 2:
3486                        return MISCREG_CNTPS_CVAL_EL1;
3487                    }
3488                    break;
3489                }
3490                break;
3491            }
3492            break;
3493          case 15:
3494            switch (op1) {
3495              case 0:
3496                switch (crm) {
3497                  case 0:
3498                    switch (op2) {
3499                      case 0:
3500                        return MISCREG_IL1DATA0_EL1;
3501                      case 1:
3502                        return MISCREG_IL1DATA1_EL1;
3503                      case 2:
3504                        return MISCREG_IL1DATA2_EL1;
3505                      case 3:
3506                        return MISCREG_IL1DATA3_EL1;
3507                    }
3508                    break;
3509                  case 1:
3510                    switch (op2) {
3511                      case 0:
3512                        return MISCREG_DL1DATA0_EL1;
3513                      case 1:
3514                        return MISCREG_DL1DATA1_EL1;
3515                      case 2:
3516                        return MISCREG_DL1DATA2_EL1;
3517                      case 3:
3518                        return MISCREG_DL1DATA3_EL1;
3519                      case 4:
3520                        return MISCREG_DL1DATA4_EL1;
3521                    }
3522                    break;
3523                }
3524                break;
3525              case 1:
3526                switch (crm) {
3527                  case 0:
3528                    switch (op2) {
3529                      case 0:
3530                        return MISCREG_L2ACTLR_EL1;
3531                    }
3532                    break;
3533                  case 2:
3534                    switch (op2) {
3535                      case 0:
3536                        return MISCREG_CPUACTLR_EL1;
3537                      case 1:
3538                        return MISCREG_CPUECTLR_EL1;
3539                      case 2:
3540                        return MISCREG_CPUMERRSR_EL1;
3541                      case 3:
3542                        return MISCREG_L2MERRSR_EL1;
3543                    }
3544                    break;
3545                  case 3:
3546                    switch (op2) {
3547                      case 0:
3548                        return MISCREG_CBAR_EL1;
3549
3550                    }
3551                    break;
3552                }
3553                break;
3554            }
3555            break;
3556        }
3557        break;
3558    }
3559
3560    return MISCREG_UNKNOWN;
3561}
3562
3563} // namespace ArmISA
3564