miscregs.hh revision 10324:f40134eb3f85
1/*
2 * Copyright (c) 2010-2014 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 * Copyright (c) 2009 The Regents of The University of Michigan
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions are
19 * met: redistributions of source code must retain the above copyright
20 * notice, this list of conditions and the following disclaimer;
21 * redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the distribution;
24 * neither the name of the copyright holders nor the names of its
25 * contributors may be used to endorse or promote products derived from
26 * this software without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Authors: Gabe Black
41 *          Giacomo Gabrielli
42 */
43#ifndef __ARCH_ARM_MISCREGS_HH__
44#define __ARCH_ARM_MISCREGS_HH__
45
46#include <bitset>
47
48#include "base/bitunion.hh"
49#include "base/compiler.hh"
50
51class ThreadContext;
52
53
54namespace ArmISA
55{
56    enum ConditionCode {
57        COND_EQ  =   0,
58        COND_NE, //  1
59        COND_CS, //  2
60        COND_CC, //  3
61        COND_MI, //  4
62        COND_PL, //  5
63        COND_VS, //  6
64        COND_VC, //  7
65        COND_HI, //  8
66        COND_LS, //  9
67        COND_GE, // 10
68        COND_LT, // 11
69        COND_GT, // 12
70        COND_LE, // 13
71        COND_AL, // 14
72        COND_UC  // 15
73    };
74
75    enum MiscRegIndex {
76        MISCREG_CPSR = 0,               //   0
77        MISCREG_SPSR,                   //   1
78        MISCREG_SPSR_FIQ,               //   2
79        MISCREG_SPSR_IRQ,               //   3
80        MISCREG_SPSR_SVC,               //   4
81        MISCREG_SPSR_MON,               //   5
82        MISCREG_SPSR_ABT,               //   6
83        MISCREG_SPSR_HYP,               //   7
84        MISCREG_SPSR_UND,               //   8
85        MISCREG_ELR_HYP,                //   9
86        MISCREG_FPSID,                  //  10
87        MISCREG_FPSCR,                  //  11
88        MISCREG_MVFR1,                  //  12
89        MISCREG_MVFR0,                  //  13
90        MISCREG_FPEXC,                  //  14
91
92        // Helper registers
93        MISCREG_CPSR_MODE,              //  15
94        MISCREG_CPSR_Q,                 //  16
95        MISCREG_FPSCR_EXC,              //  17
96        MISCREG_FPSCR_QC,               //  18
97        MISCREG_LOCKADDR,               //  19
98        MISCREG_LOCKFLAG,               //  20
99        MISCREG_PRRR_MAIR0,             //  21
100        MISCREG_PRRR_MAIR0_NS,          //  22
101        MISCREG_PRRR_MAIR0_S,           //  23
102        MISCREG_NMRR_MAIR1,             //  24
103        MISCREG_NMRR_MAIR1_NS,          //  25
104        MISCREG_NMRR_MAIR1_S,           //  26
105        MISCREG_PMXEVTYPER_PMCCFILTR,   //  27
106        MISCREG_SCTLR_RST,              //  28
107        MISCREG_SEV_MAILBOX,            //  29
108
109        // AArch32 CP14 registers (debug/trace/ThumbEE/Jazelle control)
110        MISCREG_DBGDIDR,                //  30
111        MISCREG_DBGDSCRint,             //  31
112        MISCREG_DBGDCCINT,              //  32
113        MISCREG_DBGDTRTXint,            //  33
114        MISCREG_DBGDTRRXint,            //  34
115        MISCREG_DBGWFAR,                //  35
116        MISCREG_DBGVCR,                 //  36
117        MISCREG_DBGDTRRXext,            //  37
118        MISCREG_DBGDSCRext,             //  38
119        MISCREG_DBGDTRTXext,            //  39
120        MISCREG_DBGOSECCR,              //  40
121        MISCREG_DBGBVR0,                //  41
122        MISCREG_DBGBVR1,                //  42
123        MISCREG_DBGBVR2,                //  43
124        MISCREG_DBGBVR3,                //  44
125        MISCREG_DBGBVR4,                //  45
126        MISCREG_DBGBVR5,                //  46
127        MISCREG_DBGBCR0,                //  47
128        MISCREG_DBGBCR1,                //  48
129        MISCREG_DBGBCR2,                //  49
130        MISCREG_DBGBCR3,                //  50
131        MISCREG_DBGBCR4,                //  51
132        MISCREG_DBGBCR5,                //  52
133        MISCREG_DBGWVR0,                //  53
134        MISCREG_DBGWVR1,                //  54
135        MISCREG_DBGWVR2,                //  55
136        MISCREG_DBGWVR3,                //  56
137        MISCREG_DBGWCR0,                //  57
138        MISCREG_DBGWCR1,                //  58
139        MISCREG_DBGWCR2,                //  59
140        MISCREG_DBGWCR3,                //  60
141        MISCREG_DBGDRAR,                //  61
142        MISCREG_DBGBXVR4,               //  62
143        MISCREG_DBGBXVR5,               //  63
144        MISCREG_DBGOSLAR,               //  64
145        MISCREG_DBGOSLSR,               //  65
146        MISCREG_DBGOSDLR,               //  66
147        MISCREG_DBGPRCR,                //  67
148        MISCREG_DBGDSAR,                //  68
149        MISCREG_DBGCLAIMSET,            //  69
150        MISCREG_DBGCLAIMCLR,            //  70
151        MISCREG_DBGAUTHSTATUS,          //  71
152        MISCREG_DBGDEVID2,              //  72
153        MISCREG_DBGDEVID1,              //  73
154        MISCREG_DBGDEVID0,              //  74
155        MISCREG_TEECR,                  //  75
156        MISCREG_JIDR,                   //  76
157        MISCREG_TEEHBR,                 //  77
158        MISCREG_JOSCR,                  //  78
159        MISCREG_JMCR,                   //  79
160
161        // AArch32 CP15 registers (system control)
162        MISCREG_MIDR,                   //  80
163        MISCREG_CTR,                    //  81
164        MISCREG_TCMTR,                  //  82
165        MISCREG_TLBTR,                  //  83
166        MISCREG_MPIDR,                  //  84
167        MISCREG_REVIDR,                 //  85
168        MISCREG_ID_PFR0,                //  86
169        MISCREG_ID_PFR1,                //  87
170        MISCREG_ID_DFR0,                //  88
171        MISCREG_ID_AFR0,                //  89
172        MISCREG_ID_MMFR0,               //  90
173        MISCREG_ID_MMFR1,               //  91
174        MISCREG_ID_MMFR2,               //  92
175        MISCREG_ID_MMFR3,               //  93
176        MISCREG_ID_ISAR0,               //  94
177        MISCREG_ID_ISAR1,               //  95
178        MISCREG_ID_ISAR2,               //  96
179        MISCREG_ID_ISAR3,               //  97
180        MISCREG_ID_ISAR4,               //  98
181        MISCREG_ID_ISAR5,               //  99
182        MISCREG_CCSIDR,                 // 100
183        MISCREG_CLIDR,                  // 101
184        MISCREG_AIDR,                   // 102
185        MISCREG_CSSELR,                 // 103
186        MISCREG_CSSELR_NS,              // 104
187        MISCREG_CSSELR_S,               // 105
188        MISCREG_VPIDR,                  // 106
189        MISCREG_VMPIDR,                 // 107
190        MISCREG_SCTLR,                  // 108
191        MISCREG_SCTLR_NS,               // 109
192        MISCREG_SCTLR_S,                // 110
193        MISCREG_ACTLR,                  // 111
194        MISCREG_ACTLR_NS,               // 112
195        MISCREG_ACTLR_S,                // 113
196        MISCREG_CPACR,                  // 114
197        MISCREG_SCR,                    // 115
198        MISCREG_SDER,                   // 116
199        MISCREG_NSACR,                  // 117
200        MISCREG_HSCTLR,                 // 118
201        MISCREG_HACTLR,                 // 119
202        MISCREG_HCR,                    // 120
203        MISCREG_HDCR,                   // 121
204        MISCREG_HCPTR,                  // 122
205        MISCREG_HSTR,                   // 123
206        MISCREG_HACR,                   // 124
207        MISCREG_TTBR0,                  // 125
208        MISCREG_TTBR0_NS,               // 126
209        MISCREG_TTBR0_S,                // 127
210        MISCREG_TTBR1,                  // 128
211        MISCREG_TTBR1_NS,               // 129
212        MISCREG_TTBR1_S,                // 130
213        MISCREG_TTBCR,                  // 131
214        MISCREG_TTBCR_NS,               // 132
215        MISCREG_TTBCR_S,                // 133
216        MISCREG_HTCR,                   // 134
217        MISCREG_VTCR,                   // 135
218        MISCREG_DACR,                   // 136
219        MISCREG_DACR_NS,                // 137
220        MISCREG_DACR_S,                 // 138
221        MISCREG_DFSR,                   // 139
222        MISCREG_DFSR_NS,                // 140
223        MISCREG_DFSR_S,                 // 141
224        MISCREG_IFSR,                   // 142
225        MISCREG_IFSR_NS,                // 143
226        MISCREG_IFSR_S,                 // 144
227        MISCREG_ADFSR,                  // 145
228        MISCREG_ADFSR_NS,               // 146
229        MISCREG_ADFSR_S,                // 147
230        MISCREG_AIFSR,                  // 148
231        MISCREG_AIFSR_NS,               // 149
232        MISCREG_AIFSR_S,                // 150
233        MISCREG_HADFSR,                 // 151
234        MISCREG_HAIFSR,                 // 152
235        MISCREG_HSR,                    // 153
236        MISCREG_DFAR,                   // 154
237        MISCREG_DFAR_NS,                // 155
238        MISCREG_DFAR_S,                 // 156
239        MISCREG_IFAR,                   // 157
240        MISCREG_IFAR_NS,                // 158
241        MISCREG_IFAR_S,                 // 159
242        MISCREG_HDFAR,                  // 160
243        MISCREG_HIFAR,                  // 161
244        MISCREG_HPFAR,                  // 162
245        MISCREG_ICIALLUIS,              // 163
246        MISCREG_BPIALLIS,               // 164
247        MISCREG_PAR,                    // 165
248        MISCREG_PAR_NS,                 // 166
249        MISCREG_PAR_S,                  // 167
250        MISCREG_ICIALLU,                // 168
251        MISCREG_ICIMVAU,                // 169
252        MISCREG_CP15ISB,                // 170
253        MISCREG_BPIALL,                 // 171
254        MISCREG_BPIMVA,                 // 172
255        MISCREG_DCIMVAC,                // 173
256        MISCREG_DCISW,                  // 174
257        MISCREG_ATS1CPR,                // 175
258        MISCREG_ATS1CPW,                // 176
259        MISCREG_ATS1CUR,                // 177
260        MISCREG_ATS1CUW,                // 178
261        MISCREG_ATS12NSOPR,             // 179
262        MISCREG_ATS12NSOPW,             // 180
263        MISCREG_ATS12NSOUR,             // 181
264        MISCREG_ATS12NSOUW,             // 182
265        MISCREG_DCCMVAC,                // 183
266        MISCREG_DCCSW,                  // 184
267        MISCREG_CP15DSB,                // 185
268        MISCREG_CP15DMB,                // 186
269        MISCREG_DCCMVAU,                // 187
270        MISCREG_DCCIMVAC,               // 188
271        MISCREG_DCCISW,                 // 189
272        MISCREG_ATS1HR,                 // 190
273        MISCREG_ATS1HW,                 // 191
274        MISCREG_TLBIALLIS,              // 192
275        MISCREG_TLBIMVAIS,              // 193
276        MISCREG_TLBIASIDIS,             // 194
277        MISCREG_TLBIMVAAIS,             // 195
278        MISCREG_TLBIMVALIS,             // 196
279        MISCREG_TLBIMVAALIS,            // 197
280        MISCREG_ITLBIALL,               // 198
281        MISCREG_ITLBIMVA,               // 199
282        MISCREG_ITLBIASID,              // 200
283        MISCREG_DTLBIALL,               // 201
284        MISCREG_DTLBIMVA,               // 202
285        MISCREG_DTLBIASID,              // 203
286        MISCREG_TLBIALL,                // 204
287        MISCREG_TLBIMVA,                // 205
288        MISCREG_TLBIASID,               // 206
289        MISCREG_TLBIMVAA,               // 207
290        MISCREG_TLBIMVAL,               // 208
291        MISCREG_TLBIMVAAL,              // 209
292        MISCREG_TLBIIPAS2IS,            // 210
293        MISCREG_TLBIIPAS2LIS,           // 211
294        MISCREG_TLBIALLHIS,             // 212
295        MISCREG_TLBIMVAHIS,             // 213
296        MISCREG_TLBIALLNSNHIS,          // 214
297        MISCREG_TLBIMVALHIS,            // 215
298        MISCREG_TLBIIPAS2,              // 216
299        MISCREG_TLBIIPAS2L,             // 217
300        MISCREG_TLBIALLH,               // 218
301        MISCREG_TLBIMVAH,               // 219
302        MISCREG_TLBIALLNSNH,            // 220
303        MISCREG_TLBIMVALH,              // 221
304        MISCREG_PMCR,                   // 222
305        MISCREG_PMCNTENSET,             // 223
306        MISCREG_PMCNTENCLR,             // 224
307        MISCREG_PMOVSR,                 // 225
308        MISCREG_PMSWINC,                // 226
309        MISCREG_PMSELR,                 // 227
310        MISCREG_PMCEID0,                // 228
311        MISCREG_PMCEID1,                // 229
312        MISCREG_PMCCNTR,                // 230
313        MISCREG_PMXEVTYPER,             // 231
314        MISCREG_PMCCFILTR,              // 232
315        MISCREG_PMXEVCNTR,              // 233
316        MISCREG_PMUSERENR,              // 234
317        MISCREG_PMINTENSET,             // 235
318        MISCREG_PMINTENCLR,             // 236
319        MISCREG_PMOVSSET,               // 237
320        MISCREG_L2CTLR,                 // 238
321        MISCREG_L2ECTLR,                // 239
322        MISCREG_PRRR,                   // 240
323        MISCREG_PRRR_NS,                // 241
324        MISCREG_PRRR_S,                 // 242
325        MISCREG_MAIR0,                  // 243
326        MISCREG_MAIR0_NS,               // 244
327        MISCREG_MAIR0_S,                // 245
328        MISCREG_NMRR,                   // 246
329        MISCREG_NMRR_NS,                // 247
330        MISCREG_NMRR_S,                 // 248
331        MISCREG_MAIR1,                  // 249
332        MISCREG_MAIR1_NS,               // 250
333        MISCREG_MAIR1_S,                // 251
334        MISCREG_AMAIR0,                 // 252
335        MISCREG_AMAIR0_NS,              // 253
336        MISCREG_AMAIR0_S,               // 254
337        MISCREG_AMAIR1,                 // 255
338        MISCREG_AMAIR1_NS,              // 256
339        MISCREG_AMAIR1_S,               // 257
340        MISCREG_HMAIR0,                 // 258
341        MISCREG_HMAIR1,                 // 259
342        MISCREG_HAMAIR0,                // 260
343        MISCREG_HAMAIR1,                // 261
344        MISCREG_VBAR,                   // 262
345        MISCREG_VBAR_NS,                // 263
346        MISCREG_VBAR_S,                 // 264
347        MISCREG_MVBAR,                  // 265
348        MISCREG_RMR,                    // 266
349        MISCREG_ISR,                    // 267
350        MISCREG_HVBAR,                  // 268
351        MISCREG_FCSEIDR,                // 269
352        MISCREG_CONTEXTIDR,             // 270
353        MISCREG_CONTEXTIDR_NS,          // 271
354        MISCREG_CONTEXTIDR_S,           // 272
355        MISCREG_TPIDRURW,               // 273
356        MISCREG_TPIDRURW_NS,            // 274
357        MISCREG_TPIDRURW_S,             // 275
358        MISCREG_TPIDRURO,               // 276
359        MISCREG_TPIDRURO_NS,            // 277
360        MISCREG_TPIDRURO_S,             // 278
361        MISCREG_TPIDRPRW,               // 279
362        MISCREG_TPIDRPRW_NS,            // 280
363        MISCREG_TPIDRPRW_S,             // 281
364        MISCREG_HTPIDR,                 // 282
365        MISCREG_CNTFRQ,                 // 283
366        MISCREG_CNTKCTL,                // 284
367        MISCREG_CNTP_TVAL,              // 285
368        MISCREG_CNTP_TVAL_NS,           // 286
369        MISCREG_CNTP_TVAL_S,            // 287
370        MISCREG_CNTP_CTL,               // 288
371        MISCREG_CNTP_CTL_NS,            // 289
372        MISCREG_CNTP_CTL_S,             // 290
373        MISCREG_CNTV_TVAL,              // 291
374        MISCREG_CNTV_CTL,               // 292
375        MISCREG_CNTHCTL,                // 293
376        MISCREG_CNTHP_TVAL,             // 294
377        MISCREG_CNTHP_CTL,              // 295
378        MISCREG_IL1DATA0,               // 296
379        MISCREG_IL1DATA1,               // 297
380        MISCREG_IL1DATA2,               // 298
381        MISCREG_IL1DATA3,               // 299
382        MISCREG_DL1DATA0,               // 300
383        MISCREG_DL1DATA1,               // 301
384        MISCREG_DL1DATA2,               // 302
385        MISCREG_DL1DATA3,               // 303
386        MISCREG_DL1DATA4,               // 304
387        MISCREG_RAMINDEX,               // 305
388        MISCREG_L2ACTLR,                // 306
389        MISCREG_CBAR,                   // 307
390        MISCREG_HTTBR,                  // 308
391        MISCREG_VTTBR,                  // 309
392        MISCREG_CNTPCT,                 // 310
393        MISCREG_CNTVCT,                 // 311
394        MISCREG_CNTP_CVAL,              // 312
395        MISCREG_CNTP_CVAL_NS,           // 313
396        MISCREG_CNTP_CVAL_S,            // 314
397        MISCREG_CNTV_CVAL,              // 315
398        MISCREG_CNTVOFF,                // 316
399        MISCREG_CNTHP_CVAL,             // 317
400        MISCREG_CPUMERRSR,              // 318
401        MISCREG_L2MERRSR,               // 319
402
403        // AArch64 registers (Op0=2)
404        MISCREG_MDCCINT_EL1,            // 320
405        MISCREG_OSDTRRX_EL1,            // 321
406        MISCREG_MDSCR_EL1,              // 322
407        MISCREG_OSDTRTX_EL1,            // 323
408        MISCREG_OSECCR_EL1,             // 324
409        MISCREG_DBGBVR0_EL1,            // 325
410        MISCREG_DBGBVR1_EL1,            // 326
411        MISCREG_DBGBVR2_EL1,            // 327
412        MISCREG_DBGBVR3_EL1,            // 328
413        MISCREG_DBGBVR4_EL1,            // 329
414        MISCREG_DBGBVR5_EL1,            // 330
415        MISCREG_DBGBCR0_EL1,            // 331
416        MISCREG_DBGBCR1_EL1,            // 332
417        MISCREG_DBGBCR2_EL1,            // 333
418        MISCREG_DBGBCR3_EL1,            // 334
419        MISCREG_DBGBCR4_EL1,            // 335
420        MISCREG_DBGBCR5_EL1,            // 336
421        MISCREG_DBGWVR0_EL1,            // 337
422        MISCREG_DBGWVR1_EL1,            // 338
423        MISCREG_DBGWVR2_EL1,            // 339
424        MISCREG_DBGWVR3_EL1,            // 340
425        MISCREG_DBGWCR0_EL1,            // 341
426        MISCREG_DBGWCR1_EL1,            // 342
427        MISCREG_DBGWCR2_EL1,            // 343
428        MISCREG_DBGWCR3_EL1,            // 344
429        MISCREG_MDCCSR_EL0,             // 345
430        MISCREG_MDDTR_EL0,              // 346
431        MISCREG_MDDTRTX_EL0,            // 347
432        MISCREG_MDDTRRX_EL0,            // 348
433        MISCREG_DBGVCR32_EL2,           // 349
434        MISCREG_MDRAR_EL1,              // 350
435        MISCREG_OSLAR_EL1,              // 351
436        MISCREG_OSLSR_EL1,              // 352
437        MISCREG_OSDLR_EL1,              // 353
438        MISCREG_DBGPRCR_EL1,            // 354
439        MISCREG_DBGCLAIMSET_EL1,        // 355
440        MISCREG_DBGCLAIMCLR_EL1,        // 356
441        MISCREG_DBGAUTHSTATUS_EL1,      // 357
442        MISCREG_TEECR32_EL1,            // 358
443        MISCREG_TEEHBR32_EL1,           // 359
444
445        // AArch64 registers (Op0=1,3)
446        MISCREG_MIDR_EL1,               // 360
447        MISCREG_MPIDR_EL1,              // 361
448        MISCREG_REVIDR_EL1,             // 362
449        MISCREG_ID_PFR0_EL1,            // 363
450        MISCREG_ID_PFR1_EL1,            // 364
451        MISCREG_ID_DFR0_EL1,            // 365
452        MISCREG_ID_AFR0_EL1,            // 366
453        MISCREG_ID_MMFR0_EL1,           // 367
454        MISCREG_ID_MMFR1_EL1,           // 368
455        MISCREG_ID_MMFR2_EL1,           // 369
456        MISCREG_ID_MMFR3_EL1,           // 370
457        MISCREG_ID_ISAR0_EL1,           // 371
458        MISCREG_ID_ISAR1_EL1,           // 372
459        MISCREG_ID_ISAR2_EL1,           // 373
460        MISCREG_ID_ISAR3_EL1,           // 374
461        MISCREG_ID_ISAR4_EL1,           // 375
462        MISCREG_ID_ISAR5_EL1,           // 376
463        MISCREG_MVFR0_EL1,              // 377
464        MISCREG_MVFR1_EL1,              // 378
465        MISCREG_MVFR2_EL1,              // 379
466        MISCREG_ID_AA64PFR0_EL1,        // 380
467        MISCREG_ID_AA64PFR1_EL1,        // 381
468        MISCREG_ID_AA64DFR0_EL1,        // 382
469        MISCREG_ID_AA64DFR1_EL1,        // 383
470        MISCREG_ID_AA64AFR0_EL1,        // 384
471        MISCREG_ID_AA64AFR1_EL1,        // 385
472        MISCREG_ID_AA64ISAR0_EL1,       // 386
473        MISCREG_ID_AA64ISAR1_EL1,       // 387
474        MISCREG_ID_AA64MMFR0_EL1,       // 388
475        MISCREG_ID_AA64MMFR1_EL1,       // 389
476        MISCREG_CCSIDR_EL1,             // 390
477        MISCREG_CLIDR_EL1,              // 391
478        MISCREG_AIDR_EL1,               // 392
479        MISCREG_CSSELR_EL1,             // 393
480        MISCREG_CTR_EL0,                // 394
481        MISCREG_DCZID_EL0,              // 395
482        MISCREG_VPIDR_EL2,              // 396
483        MISCREG_VMPIDR_EL2,             // 397
484        MISCREG_SCTLR_EL1,              // 398
485        MISCREG_ACTLR_EL1,              // 399
486        MISCREG_CPACR_EL1,              // 400
487        MISCREG_SCTLR_EL2,              // 401
488        MISCREG_ACTLR_EL2,              // 402
489        MISCREG_HCR_EL2,                // 403
490        MISCREG_MDCR_EL2,               // 404
491        MISCREG_CPTR_EL2,               // 405
492        MISCREG_HSTR_EL2,               // 406
493        MISCREG_HACR_EL2,               // 407
494        MISCREG_SCTLR_EL3,              // 408
495        MISCREG_ACTLR_EL3,              // 409
496        MISCREG_SCR_EL3,                // 410
497        MISCREG_SDER32_EL3,             // 411
498        MISCREG_CPTR_EL3,               // 412
499        MISCREG_MDCR_EL3,               // 413
500        MISCREG_TTBR0_EL1,              // 414
501        MISCREG_TTBR1_EL1,              // 415
502        MISCREG_TCR_EL1,                // 416
503        MISCREG_TTBR0_EL2,              // 417
504        MISCREG_TCR_EL2,                // 418
505        MISCREG_VTTBR_EL2,              // 419
506        MISCREG_VTCR_EL2,               // 420
507        MISCREG_TTBR0_EL3,              // 421
508        MISCREG_TCR_EL3,                // 422
509        MISCREG_DACR32_EL2,             // 423
510        MISCREG_SPSR_EL1,               // 424
511        MISCREG_ELR_EL1,                // 425
512        MISCREG_SP_EL0,                 // 426
513        MISCREG_SPSEL,                  // 427
514        MISCREG_CURRENTEL,              // 428
515        MISCREG_NZCV,                   // 429
516        MISCREG_DAIF,                   // 430
517        MISCREG_FPCR,                   // 431
518        MISCREG_FPSR,                   // 432
519        MISCREG_DSPSR_EL0,              // 433
520        MISCREG_DLR_EL0,                // 434
521        MISCREG_SPSR_EL2,               // 435
522        MISCREG_ELR_EL2,                // 436
523        MISCREG_SP_EL1,                 // 437
524        MISCREG_SPSR_IRQ_AA64,          // 438
525        MISCREG_SPSR_ABT_AA64,          // 439
526        MISCREG_SPSR_UND_AA64,          // 440
527        MISCREG_SPSR_FIQ_AA64,          // 441
528        MISCREG_SPSR_EL3,               // 442
529        MISCREG_ELR_EL3,                // 443
530        MISCREG_SP_EL2,                 // 444
531        MISCREG_AFSR0_EL1,              // 445
532        MISCREG_AFSR1_EL1,              // 446
533        MISCREG_ESR_EL1,                // 447
534        MISCREG_IFSR32_EL2,             // 448
535        MISCREG_AFSR0_EL2,              // 449
536        MISCREG_AFSR1_EL2,              // 450
537        MISCREG_ESR_EL2,                // 451
538        MISCREG_FPEXC32_EL2,            // 452
539        MISCREG_AFSR0_EL3,              // 453
540        MISCREG_AFSR1_EL3,              // 454
541        MISCREG_ESR_EL3,                // 455
542        MISCREG_FAR_EL1,                // 456
543        MISCREG_FAR_EL2,                // 457
544        MISCREG_HPFAR_EL2,              // 458
545        MISCREG_FAR_EL3,                // 459
546        MISCREG_IC_IALLUIS,             // 460
547        MISCREG_PAR_EL1,                // 461
548        MISCREG_IC_IALLU,               // 462
549        MISCREG_DC_IVAC_Xt,             // 463
550        MISCREG_DC_ISW_Xt,              // 464
551        MISCREG_AT_S1E1R_Xt,            // 465
552        MISCREG_AT_S1E1W_Xt,            // 466
553        MISCREG_AT_S1E0R_Xt,            // 467
554        MISCREG_AT_S1E0W_Xt,            // 468
555        MISCREG_DC_CSW_Xt,              // 469
556        MISCREG_DC_CISW_Xt,             // 470
557        MISCREG_DC_ZVA_Xt,              // 471
558        MISCREG_IC_IVAU_Xt,             // 472
559        MISCREG_DC_CVAC_Xt,             // 473
560        MISCREG_DC_CVAU_Xt,             // 474
561        MISCREG_DC_CIVAC_Xt,            // 475
562        MISCREG_AT_S1E2R_Xt,            // 476
563        MISCREG_AT_S1E2W_Xt,            // 477
564        MISCREG_AT_S12E1R_Xt,           // 478
565        MISCREG_AT_S12E1W_Xt,           // 479
566        MISCREG_AT_S12E0R_Xt,           // 480
567        MISCREG_AT_S12E0W_Xt,           // 481
568        MISCREG_AT_S1E3R_Xt,            // 482
569        MISCREG_AT_S1E3W_Xt,            // 483
570        MISCREG_TLBI_VMALLE1IS,         // 484
571        MISCREG_TLBI_VAE1IS_Xt,         // 485
572        MISCREG_TLBI_ASIDE1IS_Xt,       // 486
573        MISCREG_TLBI_VAAE1IS_Xt,        // 487
574        MISCREG_TLBI_VALE1IS_Xt,        // 488
575        MISCREG_TLBI_VAALE1IS_Xt,       // 489
576        MISCREG_TLBI_VMALLE1,           // 490
577        MISCREG_TLBI_VAE1_Xt,           // 491
578        MISCREG_TLBI_ASIDE1_Xt,         // 492
579        MISCREG_TLBI_VAAE1_Xt,          // 493
580        MISCREG_TLBI_VALE1_Xt,          // 494
581        MISCREG_TLBI_VAALE1_Xt,         // 495
582        MISCREG_TLBI_IPAS2E1IS_Xt,      // 496
583        MISCREG_TLBI_IPAS2LE1IS_Xt,     // 497
584        MISCREG_TLBI_ALLE2IS,           // 498
585        MISCREG_TLBI_VAE2IS_Xt,         // 499
586        MISCREG_TLBI_ALLE1IS,           // 500
587        MISCREG_TLBI_VALE2IS_Xt,        // 501
588        MISCREG_TLBI_VMALLS12E1IS,      // 502
589        MISCREG_TLBI_IPAS2E1_Xt,        // 503
590        MISCREG_TLBI_IPAS2LE1_Xt,       // 504
591        MISCREG_TLBI_ALLE2,             // 505
592        MISCREG_TLBI_VAE2_Xt,           // 506
593        MISCREG_TLBI_ALLE1,             // 507
594        MISCREG_TLBI_VALE2_Xt,          // 508
595        MISCREG_TLBI_VMALLS12E1,        // 509
596        MISCREG_TLBI_ALLE3IS,           // 510
597        MISCREG_TLBI_VAE3IS_Xt,         // 511
598        MISCREG_TLBI_VALE3IS_Xt,        // 512
599        MISCREG_TLBI_ALLE3,             // 513
600        MISCREG_TLBI_VAE3_Xt,           // 514
601        MISCREG_TLBI_VALE3_Xt,          // 515
602        MISCREG_PMINTENSET_EL1,         // 516
603        MISCREG_PMINTENCLR_EL1,         // 517
604        MISCREG_PMCR_EL0,               // 518
605        MISCREG_PMCNTENSET_EL0,         // 519
606        MISCREG_PMCNTENCLR_EL0,         // 520
607        MISCREG_PMOVSCLR_EL0,           // 521
608        MISCREG_PMSWINC_EL0,            // 522
609        MISCREG_PMSELR_EL0,             // 523
610        MISCREG_PMCEID0_EL0,            // 524
611        MISCREG_PMCEID1_EL0,            // 525
612        MISCREG_PMCCNTR_EL0,            // 526
613        MISCREG_PMXEVTYPER_EL0,         // 527
614        MISCREG_PMCCFILTR_EL0,          // 528
615        MISCREG_PMXEVCNTR_EL0,          // 529
616        MISCREG_PMUSERENR_EL0,          // 530
617        MISCREG_PMOVSSET_EL0,           // 531
618        MISCREG_MAIR_EL1,               // 532
619        MISCREG_AMAIR_EL1,              // 533
620        MISCREG_MAIR_EL2,               // 534
621        MISCREG_AMAIR_EL2,              // 535
622        MISCREG_MAIR_EL3,               // 536
623        MISCREG_AMAIR_EL3,              // 537
624        MISCREG_L2CTLR_EL1,             // 538
625        MISCREG_L2ECTLR_EL1,            // 539
626        MISCREG_VBAR_EL1,               // 540
627        MISCREG_RVBAR_EL1,              // 541
628        MISCREG_ISR_EL1,                // 542
629        MISCREG_VBAR_EL2,               // 543
630        MISCREG_RVBAR_EL2,              // 544
631        MISCREG_VBAR_EL3,               // 545
632        MISCREG_RVBAR_EL3,              // 546
633        MISCREG_RMR_EL3,                // 547
634        MISCREG_CONTEXTIDR_EL1,         // 548
635        MISCREG_TPIDR_EL1,              // 549
636        MISCREG_TPIDR_EL0,              // 550
637        MISCREG_TPIDRRO_EL0,            // 551
638        MISCREG_TPIDR_EL2,              // 552
639        MISCREG_TPIDR_EL3,              // 553
640        MISCREG_CNTKCTL_EL1,            // 554
641        MISCREG_CNTFRQ_EL0,             // 555
642        MISCREG_CNTPCT_EL0,             // 556
643        MISCREG_CNTVCT_EL0,             // 557
644        MISCREG_CNTP_TVAL_EL0,          // 558
645        MISCREG_CNTP_CTL_EL0,           // 559
646        MISCREG_CNTP_CVAL_EL0,          // 560
647        MISCREG_CNTV_TVAL_EL0,          // 561
648        MISCREG_CNTV_CTL_EL0,           // 562
649        MISCREG_CNTV_CVAL_EL0,          // 563
650        MISCREG_PMEVCNTR0_EL0,          // 564
651        MISCREG_PMEVCNTR1_EL0,          // 565
652        MISCREG_PMEVCNTR2_EL0,          // 566
653        MISCREG_PMEVCNTR3_EL0,          // 567
654        MISCREG_PMEVCNTR4_EL0,          // 568
655        MISCREG_PMEVCNTR5_EL0,          // 569
656        MISCREG_PMEVTYPER0_EL0,         // 570
657        MISCREG_PMEVTYPER1_EL0,         // 571
658        MISCREG_PMEVTYPER2_EL0,         // 572
659        MISCREG_PMEVTYPER3_EL0,         // 573
660        MISCREG_PMEVTYPER4_EL0,         // 574
661        MISCREG_PMEVTYPER5_EL0,         // 575
662        MISCREG_CNTVOFF_EL2,            // 576
663        MISCREG_CNTHCTL_EL2,            // 577
664        MISCREG_CNTHP_TVAL_EL2,         // 578
665        MISCREG_CNTHP_CTL_EL2,          // 579
666        MISCREG_CNTHP_CVAL_EL2,         // 580
667        MISCREG_CNTPS_TVAL_EL1,         // 581
668        MISCREG_CNTPS_CTL_EL1,          // 582
669        MISCREG_CNTPS_CVAL_EL1,         // 583
670        MISCREG_IL1DATA0_EL1,           // 584
671        MISCREG_IL1DATA1_EL1,           // 585
672        MISCREG_IL1DATA2_EL1,           // 586
673        MISCREG_IL1DATA3_EL1,           // 587
674        MISCREG_DL1DATA0_EL1,           // 588
675        MISCREG_DL1DATA1_EL1,           // 589
676        MISCREG_DL1DATA2_EL1,           // 590
677        MISCREG_DL1DATA3_EL1,           // 591
678        MISCREG_DL1DATA4_EL1,           // 592
679        MISCREG_L2ACTLR_EL1,            // 593
680        MISCREG_CPUACTLR_EL1,           // 594
681        MISCREG_CPUECTLR_EL1,           // 595
682        MISCREG_CPUMERRSR_EL1,          // 596
683        MISCREG_L2MERRSR_EL1,           // 597
684        MISCREG_CBAR_EL1,               // 598
685
686        // Dummy registers
687        MISCREG_NOP,                    // 599
688        MISCREG_RAZ,                    // 600
689        MISCREG_CP14_UNIMPL,            // 601
690        MISCREG_CP15_UNIMPL,            // 602
691        MISCREG_A64_UNIMPL,             // 603
692        MISCREG_UNKNOWN,                // 604
693
694        NUM_MISCREGS                    // 605
695    };
696
697    enum MiscRegInfo {
698        MISCREG_IMPLEMENTED,
699        MISCREG_WARN_NOT_FAIL,  // If MISCREG_IMPLEMENTED is deasserted, it
700                                // tells whether the instruction should raise a
701                                // warning or fail
702        MISCREG_MUTEX,  // True if the register corresponds to a pair of
703                        // mutually exclusive registers
704        MISCREG_BANKED,  // True if the register is banked between the two
705                         // security states, and this is the parent node of the
706                         // two banked registers
707        MISCREG_BANKED_CHILD, // The entry is one of the child registers that
708                              // forms a banked set of regs (along with the
709                              // other child regs)
710
711        // Access permissions
712        // User mode
713        MISCREG_USR_NS_RD,
714        MISCREG_USR_NS_WR,
715        MISCREG_USR_S_RD,
716        MISCREG_USR_S_WR,
717        // Privileged modes other than hypervisor or monitor
718        MISCREG_PRI_NS_RD,
719        MISCREG_PRI_NS_WR,
720        MISCREG_PRI_S_RD,
721        MISCREG_PRI_S_WR,
722        // Hypervisor mode
723        MISCREG_HYP_RD,
724        MISCREG_HYP_WR,
725        // Monitor mode, SCR.NS == 0
726        MISCREG_MON_NS0_RD,
727        MISCREG_MON_NS0_WR,
728        // Monitor mode, SCR.NS == 1
729        MISCREG_MON_NS1_RD,
730        MISCREG_MON_NS1_WR,
731
732        NUM_MISCREG_INFOS
733    };
734
735    extern std::bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS];
736
737    // Decodes 32-bit CP14 registers accessible through MCR/MRC instructions
738    MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1,
739                               unsigned crm, unsigned opc2);
740    MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1,
741                                     unsigned crn, unsigned crm,
742                                     unsigned op2);
743    // Whether a particular AArch64 system register is -always- read only.
744    bool aarch64SysRegReadOnly(MiscRegIndex miscReg);
745
746    // Decodes 32-bit CP15 registers accessible through MCR/MRC instructions
747    MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1,
748                               unsigned crm, unsigned opc2);
749
750    // Decodes 64-bit CP15 registers accessible through MCRR/MRRC instructions
751    MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1);
752
753
754    const char * const miscRegName[] = {
755        "cpsr",
756        "spsr",
757        "spsr_fiq",
758        "spsr_irq",
759        "spsr_svc",
760        "spsr_mon",
761        "spsr_abt",
762        "spsr_hyp",
763        "spsr_und",
764        "elr_hyp",
765        "fpsid",
766        "fpscr",
767        "mvfr1",
768        "mvfr0",
769        "fpexc",
770
771        // Helper registers
772        "cpsr_mode",
773        "cpsr_q",
774        "fpscr_exc",
775        "fpscr_qc",
776        "lockaddr",
777        "lockflag",
778        "prrr_mair0",
779        "prrr_mair0_ns",
780        "prrr_mair0_s",
781        "nmrr_mair1",
782        "nmrr_mair1_ns",
783        "nmrr_mair1_s",
784        "pmxevtyper_pmccfiltr",
785        "sctlr_rst",
786        "sev_mailbox",
787
788        // AArch32 CP14 registers
789        "dbgdidr",
790        "dbgdscrint",
791        "dbgdccint",
792        "dbgdtrtxint",
793        "dbgdtrrxint",
794        "dbgwfar",
795        "dbgvcr",
796        "dbgdtrrxext",
797        "dbgdscrext",
798        "dbgdtrtxext",
799        "dbgoseccr",
800        "dbgbvr0",
801        "dbgbvr1",
802        "dbgbvr2",
803        "dbgbvr3",
804        "dbgbvr4",
805        "dbgbvr5",
806        "dbgbcr0",
807        "dbgbcr1",
808        "dbgbcr2",
809        "dbgbcr3",
810        "dbgbcr4",
811        "dbgbcr5",
812        "dbgwvr0",
813        "dbgwvr1",
814        "dbgwvr2",
815        "dbgwvr3",
816        "dbgwcr0",
817        "dbgwcr1",
818        "dbgwcr2",
819        "dbgwcr3",
820        "dbgdrar",
821        "dbgbxvr4",
822        "dbgbxvr5",
823        "dbgoslar",
824        "dbgoslsr",
825        "dbgosdlr",
826        "dbgprcr",
827        "dbgdsar",
828        "dbgclaimset",
829        "dbgclaimclr",
830        "dbgauthstatus",
831        "dbgdevid2",
832        "dbgdevid1",
833        "dbgdevid0",
834        "teecr",
835        "jidr",
836        "teehbr",
837        "joscr",
838        "jmcr",
839
840        // AArch32 CP15 registers
841        "midr",
842        "ctr",
843        "tcmtr",
844        "tlbtr",
845        "mpidr",
846        "revidr",
847        "id_pfr0",
848        "id_pfr1",
849        "id_dfr0",
850        "id_afr0",
851        "id_mmfr0",
852        "id_mmfr1",
853        "id_mmfr2",
854        "id_mmfr3",
855        "id_isar0",
856        "id_isar1",
857        "id_isar2",
858        "id_isar3",
859        "id_isar4",
860        "id_isar5",
861        "ccsidr",
862        "clidr",
863        "aidr",
864        "csselr",
865        "csselr_ns",
866        "csselr_s",
867        "vpidr",
868        "vmpidr",
869        "sctlr",
870        "sctlr_ns",
871        "sctlr_s",
872        "actlr",
873        "actlr_ns",
874        "actlr_s",
875        "cpacr",
876        "scr",
877        "sder",
878        "nsacr",
879        "hsctlr",
880        "hactlr",
881        "hcr",
882        "hdcr",
883        "hcptr",
884        "hstr",
885        "hacr",
886        "ttbr0",
887        "ttbr0_ns",
888        "ttbr0_s",
889        "ttbr1",
890        "ttbr1_ns",
891        "ttbr1_s",
892        "ttbcr",
893        "ttbcr_ns",
894        "ttbcr_s",
895        "htcr",
896        "vtcr",
897        "dacr",
898        "dacr_ns",
899        "dacr_s",
900        "dfsr",
901        "dfsr_ns",
902        "dfsr_s",
903        "ifsr",
904        "ifsr_ns",
905        "ifsr_s",
906        "adfsr",
907        "adfsr_ns",
908        "adfsr_s",
909        "aifsr",
910        "aifsr_ns",
911        "aifsr_s",
912        "hadfsr",
913        "haifsr",
914        "hsr",
915        "dfar",
916        "dfar_ns",
917        "dfar_s",
918        "ifar",
919        "ifar_ns",
920        "ifar_s",
921        "hdfar",
922        "hifar",
923        "hpfar",
924        "icialluis",
925        "bpiallis",
926        "par",
927        "par_ns",
928        "par_s",
929        "iciallu",
930        "icimvau",
931        "cp15isb",
932        "bpiall",
933        "bpimva",
934        "dcimvac",
935        "dcisw",
936        "ats1cpr",
937        "ats1cpw",
938        "ats1cur",
939        "ats1cuw",
940        "ats12nsopr",
941        "ats12nsopw",
942        "ats12nsour",
943        "ats12nsouw",
944        "dccmvac",
945        "dccsw",
946        "cp15dsb",
947        "cp15dmb",
948        "dccmvau",
949        "dccimvac",
950        "dccisw",
951        "ats1hr",
952        "ats1hw",
953        "tlbiallis",
954        "tlbimvais",
955        "tlbiasidis",
956        "tlbimvaais",
957        "tlbimvalis",
958        "tlbimvaalis",
959        "itlbiall",
960        "itlbimva",
961        "itlbiasid",
962        "dtlbiall",
963        "dtlbimva",
964        "dtlbiasid",
965        "tlbiall",
966        "tlbimva",
967        "tlbiasid",
968        "tlbimvaa",
969        "tlbimval",
970        "tlbimvaal",
971        "tlbiipas2is",
972        "tlbiipas2lis",
973        "tlbiallhis",
974        "tlbimvahis",
975        "tlbiallnsnhis",
976        "tlbimvalhis",
977        "tlbiipas2",
978        "tlbiipas2l",
979        "tlbiallh",
980        "tlbimvah",
981        "tlbiallnsnh",
982        "tlbimvalh",
983        "pmcr",
984        "pmcntenset",
985        "pmcntenclr",
986        "pmovsr",
987        "pmswinc",
988        "pmselr",
989        "pmceid0",
990        "pmceid1",
991        "pmccntr",
992        "pmxevtyper",
993        "pmccfiltr",
994        "pmxevcntr",
995        "pmuserenr",
996        "pmintenset",
997        "pmintenclr",
998        "pmovsset",
999        "l2ctlr",
1000        "l2ectlr",
1001        "prrr",
1002        "prrr_ns",
1003        "prrr_s",
1004        "mair0",
1005        "mair0_ns",
1006        "mair0_s",
1007        "nmrr",
1008        "nmrr_ns",
1009        "nmrr_s",
1010        "mair1",
1011        "mair1_ns",
1012        "mair1_s",
1013        "amair0",
1014        "amair0_ns",
1015        "amair0_s",
1016        "amair1",
1017        "amair1_ns",
1018        "amair1_s",
1019        "hmair0",
1020        "hmair1",
1021        "hamair0",
1022        "hamair1",
1023        "vbar",
1024        "vbar_ns",
1025        "vbar_s",
1026        "mvbar",
1027        "rmr",
1028        "isr",
1029        "hvbar",
1030        "fcseidr",
1031        "contextidr",
1032        "contextidr_ns",
1033        "contextidr_s",
1034        "tpidrurw",
1035        "tpidrurw_ns",
1036        "tpidrurw_s",
1037        "tpidruro",
1038        "tpidruro_ns",
1039        "tpidruro_s",
1040        "tpidrprw",
1041        "tpidrprw_ns",
1042        "tpidrprw_s",
1043        "htpidr",
1044        "cntfrq",
1045        "cntkctl",
1046        "cntp_tval",
1047        "cntp_tval_ns",
1048        "cntp_tval_s",
1049        "cntp_ctl",
1050        "cntp_ctl_ns",
1051        "cntp_ctl_s",
1052        "cntv_tval",
1053        "cntv_ctl",
1054        "cnthctl",
1055        "cnthp_tval",
1056        "cnthp_ctl",
1057        "il1data0",
1058        "il1data1",
1059        "il1data2",
1060        "il1data3",
1061        "dl1data0",
1062        "dl1data1",
1063        "dl1data2",
1064        "dl1data3",
1065        "dl1data4",
1066        "ramindex",
1067        "l2actlr",
1068        "cbar",
1069        "httbr",
1070        "vttbr",
1071        "cntpct",
1072        "cntvct",
1073        "cntp_cval",
1074        "cntp_cval_ns",
1075        "cntp_cval_s",
1076        "cntv_cval",
1077        "cntvoff",
1078        "cnthp_cval",
1079        "cpumerrsr",
1080        "l2merrsr",
1081
1082        // AArch64 registers (Op0=2)
1083        "mdccint_el1",
1084        "osdtrrx_el1",
1085        "mdscr_el1",
1086        "osdtrtx_el1",
1087        "oseccr_el1",
1088        "dbgbvr0_el1",
1089        "dbgbvr1_el1",
1090        "dbgbvr2_el1",
1091        "dbgbvr3_el1",
1092        "dbgbvr4_el1",
1093        "dbgbvr5_el1",
1094        "dbgbcr0_el1",
1095        "dbgbcr1_el1",
1096        "dbgbcr2_el1",
1097        "dbgbcr3_el1",
1098        "dbgbcr4_el1",
1099        "dbgbcr5_el1",
1100        "dbgwvr0_el1",
1101        "dbgwvr1_el1",
1102        "dbgwvr2_el1",
1103        "dbgwvr3_el1",
1104        "dbgwcr0_el1",
1105        "dbgwcr1_el1",
1106        "dbgwcr2_el1",
1107        "dbgwcr3_el1",
1108        "mdccsr_el0",
1109        "mddtr_el0",
1110        "mddtrtx_el0",
1111        "mddtrrx_el0",
1112        "dbgvcr32_el2",
1113        "mdrar_el1",
1114        "oslar_el1",
1115        "oslsr_el1",
1116        "osdlr_el1",
1117        "dbgprcr_el1",
1118        "dbgclaimset_el1",
1119        "dbgclaimclr_el1",
1120        "dbgauthstatus_el1",
1121        "teecr32_el1",
1122        "teehbr32_el1",
1123
1124        // AArch64 registers (Op0=1,3)
1125        "midr_el1",
1126        "mpidr_el1",
1127        "revidr_el1",
1128        "id_pfr0_el1",
1129        "id_pfr1_el1",
1130        "id_dfr0_el1",
1131        "id_afr0_el1",
1132        "id_mmfr0_el1",
1133        "id_mmfr1_el1",
1134        "id_mmfr2_el1",
1135        "id_mmfr3_el1",
1136        "id_isar0_el1",
1137        "id_isar1_el1",
1138        "id_isar2_el1",
1139        "id_isar3_el1",
1140        "id_isar4_el1",
1141        "id_isar5_el1",
1142        "mvfr0_el1",
1143        "mvfr1_el1",
1144        "mvfr2_el1",
1145        "id_aa64pfr0_el1",
1146        "id_aa64pfr1_el1",
1147        "id_aa64dfr0_el1",
1148        "id_aa64dfr1_el1",
1149        "id_aa64afr0_el1",
1150        "id_aa64afr1_el1",
1151        "id_aa64isar0_el1",
1152        "id_aa64isar1_el1",
1153        "id_aa64mmfr0_el1",
1154        "id_aa64mmfr1_el1",
1155        "ccsidr_el1",
1156        "clidr_el1",
1157        "aidr_el1",
1158        "csselr_el1",
1159        "ctr_el0",
1160        "dczid_el0",
1161        "vpidr_el2",
1162        "vmpidr_el2",
1163        "sctlr_el1",
1164        "actlr_el1",
1165        "cpacr_el1",
1166        "sctlr_el2",
1167        "actlr_el2",
1168        "hcr_el2",
1169        "mdcr_el2",
1170        "cptr_el2",
1171        "hstr_el2",
1172        "hacr_el2",
1173        "sctlr_el3",
1174        "actlr_el3",
1175        "scr_el3",
1176        "sder32_el3",
1177        "cptr_el3",
1178        "mdcr_el3",
1179        "ttbr0_el1",
1180        "ttbr1_el1",
1181        "tcr_el1",
1182        "ttbr0_el2",
1183        "tcr_el2",
1184        "vttbr_el2",
1185        "vtcr_el2",
1186        "ttbr0_el3",
1187        "tcr_el3",
1188        "dacr32_el2",
1189        "spsr_el1",
1190        "elr_el1",
1191        "sp_el0",
1192        "spsel",
1193        "currentel",
1194        "nzcv",
1195        "daif",
1196        "fpcr",
1197        "fpsr",
1198        "dspsr_el0",
1199        "dlr_el0",
1200        "spsr_el2",
1201        "elr_el2",
1202        "sp_el1",
1203        "spsr_irq_aa64",
1204        "spsr_abt_aa64",
1205        "spsr_und_aa64",
1206        "spsr_fiq_aa64",
1207        "spsr_el3",
1208        "elr_el3",
1209        "sp_el2",
1210        "afsr0_el1",
1211        "afsr1_el1",
1212        "esr_el1",
1213        "ifsr32_el2",
1214        "afsr0_el2",
1215        "afsr1_el2",
1216        "esr_el2",
1217        "fpexc32_el2",
1218        "afsr0_el3",
1219        "afsr1_el3",
1220        "esr_el3",
1221        "far_el1",
1222        "far_el2",
1223        "hpfar_el2",
1224        "far_el3",
1225        "ic_ialluis",
1226        "par_el1",
1227        "ic_iallu",
1228        "dc_ivac_xt",
1229        "dc_isw_xt",
1230        "at_s1e1r_xt",
1231        "at_s1e1w_xt",
1232        "at_s1e0r_xt",
1233        "at_s1e0w_xt",
1234        "dc_csw_xt",
1235        "dc_cisw_xt",
1236        "dc_zva_xt",
1237        "ic_ivau_xt",
1238        "dc_cvac_xt",
1239        "dc_cvau_xt",
1240        "dc_civac_xt",
1241        "at_s1e2r_xt",
1242        "at_s1e2w_xt",
1243        "at_s12e1r_xt",
1244        "at_s12e1w_xt",
1245        "at_s12e0r_xt",
1246        "at_s12e0w_xt",
1247        "at_s1e3r_xt",
1248        "at_s1e3w_xt",
1249        "tlbi_vmalle1is",
1250        "tlbi_vae1is_xt",
1251        "tlbi_aside1is_xt",
1252        "tlbi_vaae1is_xt",
1253        "tlbi_vale1is_xt",
1254        "tlbi_vaale1is_xt",
1255        "tlbi_vmalle1",
1256        "tlbi_vae1_xt",
1257        "tlbi_aside1_xt",
1258        "tlbi_vaae1_xt",
1259        "tlbi_vale1_xt",
1260        "tlbi_vaale1_xt",
1261        "tlbi_ipas2e1is_xt",
1262        "tlbi_ipas2le1is_xt",
1263        "tlbi_alle2is",
1264        "tlbi_vae2is_xt",
1265        "tlbi_alle1is",
1266        "tlbi_vale2is_xt",
1267        "tlbi_vmalls12e1is",
1268        "tlbi_ipas2e1_xt",
1269        "tlbi_ipas2le1_xt",
1270        "tlbi_alle2",
1271        "tlbi_vae2_xt",
1272        "tlbi_alle1",
1273        "tlbi_vale2_xt",
1274        "tlbi_vmalls12e1",
1275        "tlbi_alle3is",
1276        "tlbi_vae3is_xt",
1277        "tlbi_vale3is_xt",
1278        "tlbi_alle3",
1279        "tlbi_vae3_xt",
1280        "tlbi_vale3_xt",
1281        "pmintenset_el1",
1282        "pmintenclr_el1",
1283        "pmcr_el0",
1284        "pmcntenset_el0",
1285        "pmcntenclr_el0",
1286        "pmovsclr_el0",
1287        "pmswinc_el0",
1288        "pmselr_el0",
1289        "pmceid0_el0",
1290        "pmceid1_el0",
1291        "pmccntr_el0",
1292        "pmxevtyper_el0",
1293        "pmccfiltr_el0",
1294        "pmxevcntr_el0",
1295        "pmuserenr_el0",
1296        "pmovsset_el0",
1297        "mair_el1",
1298        "amair_el1",
1299        "mair_el2",
1300        "amair_el2",
1301        "mair_el3",
1302        "amair_el3",
1303        "l2ctlr_el1",
1304        "l2ectlr_el1",
1305        "vbar_el1",
1306        "rvbar_el1",
1307        "isr_el1",
1308        "vbar_el2",
1309        "rvbar_el2",
1310        "vbar_el3",
1311        "rvbar_el3",
1312        "rmr_el3",
1313        "contextidr_el1",
1314        "tpidr_el1",
1315        "tpidr_el0",
1316        "tpidrro_el0",
1317        "tpidr_el2",
1318        "tpidr_el3",
1319        "cntkctl_el1",
1320        "cntfrq_el0",
1321        "cntpct_el0",
1322        "cntvct_el0",
1323        "cntp_tval_el0",
1324        "cntp_ctl_el0",
1325        "cntp_cval_el0",
1326        "cntv_tval_el0",
1327        "cntv_ctl_el0",
1328        "cntv_cval_el0",
1329        "pmevcntr0_el0",
1330        "pmevcntr1_el0",
1331        "pmevcntr2_el0",
1332        "pmevcntr3_el0",
1333        "pmevcntr4_el0",
1334        "pmevcntr5_el0",
1335        "pmevtyper0_el0",
1336        "pmevtyper1_el0",
1337        "pmevtyper2_el0",
1338        "pmevtyper3_el0",
1339        "pmevtyper4_el0",
1340        "pmevtyper5_el0",
1341        "cntvoff_el2",
1342        "cnthctl_el2",
1343        "cnthp_tval_el2",
1344        "cnthp_ctl_el2",
1345        "cnthp_cval_el2",
1346        "cntps_tval_el1",
1347        "cntps_ctl_el1",
1348        "cntps_cval_el1",
1349        "il1data0_el1",
1350        "il1data1_el1",
1351        "il1data2_el1",
1352        "il1data3_el1",
1353        "dl1data0_el1",
1354        "dl1data1_el1",
1355        "dl1data2_el1",
1356        "dl1data3_el1",
1357        "dl1data4_el1",
1358        "l2actlr_el1",
1359        "cpuactlr_el1",
1360        "cpuectlr_el1",
1361        "cpumerrsr_el1",
1362        "l2merrsr_el1",
1363        "cbar_el1",
1364
1365        // Dummy registers
1366        "nop",
1367        "raz",
1368        "cp14_unimpl",
1369        "cp15_unimpl",
1370        "a64_unimpl",
1371        "unknown"
1372    };
1373
1374    static_assert(sizeof(miscRegName) / sizeof(*miscRegName) == NUM_MISCREGS,
1375                  "The miscRegName array and NUM_MISCREGS are inconsistent.");
1376
1377    BitUnion32(CPSR)
1378        Bitfield<31, 30> nz;
1379        Bitfield<29> c;
1380        Bitfield<28> v;
1381        Bitfield<27> q;
1382        Bitfield<26, 25> it1;
1383        Bitfield<24> j;
1384        Bitfield<23, 22> res0_23_22;
1385        Bitfield<21> ss;        // AArch64
1386        Bitfield<20> il;        // AArch64
1387        Bitfield<19, 16> ge;
1388        Bitfield<15, 10> it2;
1389        Bitfield<9> d;          // AArch64
1390        Bitfield<9> e;
1391        Bitfield<8> a;
1392        Bitfield<7> i;
1393        Bitfield<6> f;
1394        Bitfield<9, 6> daif;    // AArch64
1395        Bitfield<5> t;
1396        Bitfield<4> width;      // AArch64
1397        Bitfield<3, 2> el;      // AArch64
1398        Bitfield<4, 0> mode;
1399        Bitfield<0> sp;         // AArch64
1400    EndBitUnion(CPSR)
1401
1402    // This mask selects bits of the CPSR that actually go in the CondCodes
1403    // integer register to allow renaming.
1404    static const uint32_t CondCodesMask   = 0xF00F0000;
1405    static const uint32_t CpsrMaskQ       = 0x08000000;
1406
1407    BitUnion32(HDCR)
1408        Bitfield<11>   tdra;
1409        Bitfield<10>   tdosa;
1410        Bitfield<9>    tda;
1411        Bitfield<8>    tde;
1412        Bitfield<7>    hpme;
1413        Bitfield<6>    tpm;
1414        Bitfield<5>    tpmcr;
1415        Bitfield<4, 0> hpmn;
1416    EndBitUnion(HDCR)
1417
1418    BitUnion32(HCPTR)
1419        Bitfield<31> tcpac;
1420        Bitfield<20> tta;
1421        Bitfield<15> tase;
1422        Bitfield<13> tcp13;
1423        Bitfield<12> tcp12;
1424        Bitfield<11> tcp11;
1425        Bitfield<10> tcp10;
1426        Bitfield<10> tfp;  // AArch64
1427        Bitfield<9>  tcp9;
1428        Bitfield<8>  tcp8;
1429        Bitfield<7>  tcp7;
1430        Bitfield<6>  tcp6;
1431        Bitfield<5>  tcp5;
1432        Bitfield<4>  tcp4;
1433        Bitfield<3>  tcp3;
1434        Bitfield<2>  tcp2;
1435        Bitfield<1>  tcp1;
1436        Bitfield<0>  tcp0;
1437    EndBitUnion(HCPTR)
1438
1439    BitUnion32(HSTR)
1440        Bitfield<17> tjdbx;
1441        Bitfield<16> ttee;
1442        Bitfield<15> t15;
1443        Bitfield<13> t13;
1444        Bitfield<12> t12;
1445        Bitfield<11> t11;
1446        Bitfield<10> t10;
1447        Bitfield<9>  t9;
1448        Bitfield<8>  t8;
1449        Bitfield<7>  t7;
1450        Bitfield<6>  t6;
1451        Bitfield<5>  t5;
1452        Bitfield<4>  t4;
1453        Bitfield<3>  t3;
1454        Bitfield<2>  t2;
1455        Bitfield<1>  t1;
1456        Bitfield<0>  t0;
1457    EndBitUnion(HSTR)
1458
1459    BitUnion64(HCR)
1460        Bitfield<33>     id;    // AArch64
1461        Bitfield<32>     cd;    // AArch64
1462        Bitfield<31>     rw;    // AArch64
1463        Bitfield<30>     trvm;  // AArch64
1464        Bitfield<29>     hcd;   // AArch64
1465        Bitfield<28>     tdz;   // AArch64
1466
1467        Bitfield<27>     tge;
1468        Bitfield<26>     tvm;
1469        Bitfield<25>     ttlb;
1470        Bitfield<24>     tpu;
1471        Bitfield<23>     tpc;
1472        Bitfield<22>     tsw;
1473        Bitfield<21>     tac;
1474        Bitfield<21>     tacr;  // AArch64
1475        Bitfield<20>     tidcp;
1476        Bitfield<19>     tsc;
1477        Bitfield<18>     tid3;
1478        Bitfield<17>     tid2;
1479        Bitfield<16>     tid1;
1480        Bitfield<15>     tid0;
1481        Bitfield<14>     twe;
1482        Bitfield<13>     twi;
1483        Bitfield<12>     dc;
1484        Bitfield<11, 10> bsu;
1485        Bitfield<9>      fb;
1486        Bitfield<8>      va;
1487        Bitfield<8>      vse;   // AArch64
1488        Bitfield<7>      vi;
1489        Bitfield<6>      vf;
1490        Bitfield<5>      amo;
1491        Bitfield<4>      imo;
1492        Bitfield<3>      fmo;
1493        Bitfield<2>      ptw;
1494        Bitfield<1>      swio;
1495        Bitfield<0>      vm;
1496    EndBitUnion(HCR)
1497
1498    BitUnion32(NSACR)
1499        Bitfield<20> nstrcdis;
1500        Bitfield<19> rfr;
1501        Bitfield<15> nsasedis;
1502        Bitfield<14> nsd32dis;
1503        Bitfield<13> cp13;
1504        Bitfield<12> cp12;
1505        Bitfield<11> cp11;
1506        Bitfield<10> cp10;
1507        Bitfield<9>  cp9;
1508        Bitfield<8>  cp8;
1509        Bitfield<7>  cp7;
1510        Bitfield<6>  cp6;
1511        Bitfield<5>  cp5;
1512        Bitfield<4>  cp4;
1513        Bitfield<3>  cp3;
1514        Bitfield<2>  cp2;
1515        Bitfield<1>  cp1;
1516        Bitfield<0>  cp0;
1517    EndBitUnion(NSACR)
1518
1519    BitUnion32(SCR)
1520        Bitfield<13> twe;
1521        Bitfield<12> twi;
1522        Bitfield<11> st;  // AArch64
1523        Bitfield<10> rw;  // AArch64
1524        Bitfield<9> sif;
1525        Bitfield<8> hce;
1526        Bitfield<7> scd;
1527        Bitfield<7> smd;  // AArch64
1528        Bitfield<6> nEt;
1529        Bitfield<5> aw;
1530        Bitfield<4> fw;
1531        Bitfield<3> ea;
1532        Bitfield<2> fiq;
1533        Bitfield<1> irq;
1534        Bitfield<0> ns;
1535    EndBitUnion(SCR)
1536
1537    BitUnion32(SCTLR)
1538        Bitfield<30>   te;      // Thumb Exception Enable (AArch32 only)
1539        Bitfield<29>   afe;     // Access flag enable (AArch32 only)
1540        Bitfield<28>   tre;     // TEX remap enable (AArch32 only)
1541        Bitfield<27>   nmfi;    // Non-maskable FIQ support (ARMv7 only)
1542        Bitfield<26>   uci;     // Enable EL0 access to DC CVAU, DC CIVAC,
1543                                // DC CVAC and IC IVAU instructions
1544                                // (AArch64 SCTLR_EL1 only)
1545        Bitfield<25>   ee;      // Exception Endianness
1546        Bitfield<24>   ve;      // Interrupt Vectors Enable (ARMv7 only)
1547        Bitfield<24>   e0e;     // Endianness of explicit data accesses at EL0
1548                                // (AArch64 SCTLR_EL1 only)
1549        Bitfield<23>   xp;      // Extended page table enable (dropped in ARMv7)
1550        Bitfield<22>   u;       // Alignment (dropped in ARMv7)
1551        Bitfield<21>   fi;      // Fast interrupts configuration enable
1552                                // (ARMv7 only)
1553        Bitfield<20>   uwxn;    // Unprivileged write permission implies EL1 XN
1554                                // (AArch32 only)
1555        Bitfield<19>   dz;      // Divide by Zero fault enable
1556                                // (dropped in ARMv7)
1557        Bitfield<19>   wxn;     // Write permission implies XN
1558        Bitfield<18>   ntwe;    // Not trap WFE
1559                                // (ARMv8 AArch32 and AArch64 SCTLR_EL1 only)
1560        Bitfield<18>   rao2;    // Read as one
1561        Bitfield<16>   ntwi;    // Not trap WFI
1562                                // (ARMv8 AArch32 and AArch64 SCTLR_EL1 only)
1563        Bitfield<16>   rao3;    // Read as one
1564        Bitfield<15>   uct;     // Enable EL0 access to CTR_EL0
1565                                // (AArch64 SCTLR_EL1 only)
1566        Bitfield<14>   rr;      // Round Robin select (ARMv7 only)
1567        Bitfield<14>   dze;     // Enable EL0 access to DC ZVA
1568                                // (AArch64 SCTLR_EL1 only)
1569        Bitfield<13>   v;       // Vectors bit (AArch32 only)
1570        Bitfield<12>   i;       // Instruction cache enable
1571        Bitfield<11>   z;       // Branch prediction enable (ARMv7 only)
1572        Bitfield<10>   sw;      // SWP/SWPB enable (ARMv7 only)
1573        Bitfield<9, 8> rs;      // Deprecated protection bits (dropped in ARMv7)
1574        Bitfield<9>    uma;     // User mask access (AArch64 SCTLR_EL1 only)
1575        Bitfield<8>    sed;     // SETEND disable
1576                                // (ARMv8 AArch32 and AArch64 SCTLR_EL1 only)
1577        Bitfield<7>    b;       // Endianness support (dropped in ARMv7)
1578        Bitfield<7>    itd;     // IT disable
1579                                // (ARMv8 AArch32 and AArch64 SCTLR_EL1 only)
1580        Bitfield<6, 3> rao4;    // Read as one
1581        Bitfield<6>    thee;    // ThumbEE enable
1582                                // (ARMv8 AArch32 and AArch64 SCTLR_EL1 only)
1583        Bitfield<5>    cp15ben; // CP15 barrier enable
1584                                // (AArch32 and AArch64 SCTLR_EL1 only)
1585        Bitfield<4>    sa0;     // Stack Alignment Check Enable for EL0
1586                                // (AArch64 SCTLR_EL1 only)
1587        Bitfield<3>    sa;      // Stack Alignment Check Enable (AArch64 only)
1588        Bitfield<2>    c;       // Cache enable
1589        Bitfield<1>    a;       // Alignment check enable
1590        Bitfield<0>    m;       // MMU enable
1591    EndBitUnion(SCTLR)
1592
1593    BitUnion32(CPACR)
1594        Bitfield<1, 0> cp0;
1595        Bitfield<3, 2> cp1;
1596        Bitfield<5, 4> cp2;
1597        Bitfield<7, 6> cp3;
1598        Bitfield<9, 8> cp4;
1599        Bitfield<11, 10> cp5;
1600        Bitfield<13, 12> cp6;
1601        Bitfield<15, 14> cp7;
1602        Bitfield<17, 16> cp8;
1603        Bitfield<19, 18> cp9;
1604        Bitfield<21, 20> cp10;
1605        Bitfield<21, 20> fpen;  // AArch64
1606        Bitfield<23, 22> cp11;
1607        Bitfield<25, 24> cp12;
1608        Bitfield<27, 26> cp13;
1609        Bitfield<29, 28> rsvd;
1610        Bitfield<28> tta;  // AArch64
1611        Bitfield<30> d32dis;
1612        Bitfield<31> asedis;
1613    EndBitUnion(CPACR)
1614
1615    BitUnion32(FSR)
1616        Bitfield<3, 0> fsLow;
1617        Bitfield<5, 0> status;  // LPAE
1618        Bitfield<7, 4> domain;
1619        Bitfield<9> lpae;
1620        Bitfield<10> fsHigh;
1621        Bitfield<11> wnr;
1622        Bitfield<12> ext;
1623        Bitfield<13> cm;  // LPAE
1624    EndBitUnion(FSR)
1625
1626    BitUnion32(FPSCR)
1627        Bitfield<0> ioc;
1628        Bitfield<1> dzc;
1629        Bitfield<2> ofc;
1630        Bitfield<3> ufc;
1631        Bitfield<4> ixc;
1632        Bitfield<7> idc;
1633        Bitfield<8> ioe;
1634        Bitfield<9> dze;
1635        Bitfield<10> ofe;
1636        Bitfield<11> ufe;
1637        Bitfield<12> ixe;
1638        Bitfield<15> ide;
1639        Bitfield<18, 16> len;
1640        Bitfield<21, 20> stride;
1641        Bitfield<23, 22> rMode;
1642        Bitfield<24> fz;
1643        Bitfield<25> dn;
1644        Bitfield<26> ahp;
1645        Bitfield<27> qc;
1646        Bitfield<28> v;
1647        Bitfield<29> c;
1648        Bitfield<30> z;
1649        Bitfield<31> n;
1650    EndBitUnion(FPSCR)
1651
1652    // This mask selects bits of the FPSCR that actually go in the FpCondCodes
1653    // integer register to allow renaming.
1654    static const uint32_t FpCondCodesMask = 0xF0000000;
1655    // This mask selects the cumulative FP exception flags of the FPSCR.
1656    static const uint32_t FpscrExcMask = 0x0000009F;
1657    // This mask selects the cumulative saturation flag of the FPSCR.
1658    static const uint32_t FpscrQcMask = 0x08000000;
1659
1660    BitUnion32(FPEXC)
1661        Bitfield<31> ex;
1662        Bitfield<30> en;
1663        Bitfield<29, 0> subArchDefined;
1664    EndBitUnion(FPEXC)
1665
1666    BitUnion32(MVFR0)
1667        Bitfield<3, 0> advSimdRegisters;
1668        Bitfield<7, 4> singlePrecision;
1669        Bitfield<11, 8> doublePrecision;
1670        Bitfield<15, 12> vfpExceptionTrapping;
1671        Bitfield<19, 16> divide;
1672        Bitfield<23, 20> squareRoot;
1673        Bitfield<27, 24> shortVectors;
1674        Bitfield<31, 28> roundingModes;
1675    EndBitUnion(MVFR0)
1676
1677    BitUnion32(MVFR1)
1678        Bitfield<3, 0> flushToZero;
1679        Bitfield<7, 4> defaultNaN;
1680        Bitfield<11, 8> advSimdLoadStore;
1681        Bitfield<15, 12> advSimdInteger;
1682        Bitfield<19, 16> advSimdSinglePrecision;
1683        Bitfield<23, 20> advSimdHalfPrecision;
1684        Bitfield<27, 24> vfpHalfPrecision;
1685        Bitfield<31, 28> raz;
1686    EndBitUnion(MVFR1)
1687
1688    BitUnion64(TTBCR)
1689        // Short-descriptor translation table format
1690        Bitfield<2, 0> n;
1691        Bitfield<4> pd0;
1692        Bitfield<5> pd1;
1693        // Long-descriptor translation table format
1694        Bitfield<5, 0> t0sz;
1695        Bitfield<7> epd0;
1696        Bitfield<9, 8> irgn0;
1697        Bitfield<11, 10> orgn0;
1698        Bitfield<13, 12> sh0;
1699        Bitfield<14> tg0;
1700        Bitfield<21, 16> t1sz;
1701        Bitfield<22> a1;
1702        Bitfield<23> epd1;
1703        Bitfield<25, 24> irgn1;
1704        Bitfield<27, 26> orgn1;
1705        Bitfield<29, 28> sh1;
1706        Bitfield<30> tg1;
1707        Bitfield<34, 32> ips;
1708        Bitfield<36> as;
1709        Bitfield<37> tbi0;
1710        Bitfield<38> tbi1;
1711        // Common
1712        Bitfield<31> eae;
1713        // TCR_EL2/3 (AArch64)
1714        Bitfield<18, 16> ps;
1715        Bitfield<20> tbi;
1716    EndBitUnion(TTBCR)
1717
1718    // Fields of TCR_EL{1,2,3} (mostly overlapping)
1719    // TCR_EL1 is natively 64 bits, the others are 32 bits
1720    BitUnion64(TCR)
1721        Bitfield<5, 0> t0sz;
1722        Bitfield<7> epd0; // EL1
1723        Bitfield<9, 8> irgn0;
1724        Bitfield<11, 10> orgn0;
1725        Bitfield<13, 12> sh0;
1726        Bitfield<15, 14> tg0;
1727        Bitfield<18, 16> ps;
1728        Bitfield<20> tbi; // EL2/EL3
1729        Bitfield<21, 16> t1sz; // EL1
1730        Bitfield<22> a1; // EL1
1731        Bitfield<23> epd1; // EL1
1732        Bitfield<25, 24> irgn1; // EL1
1733        Bitfield<27, 26> orgn1; // EL1
1734        Bitfield<29, 28> sh1; // EL1
1735        Bitfield<31, 30> tg1; // EL1
1736        Bitfield<34, 32> ips; // EL1
1737        Bitfield<36> as; // EL1
1738        Bitfield<37> tbi0; // EL1
1739        Bitfield<38> tbi1; // EL1
1740    EndBitUnion(TCR)
1741
1742    BitUnion32(HTCR)
1743        Bitfield<2, 0> t0sz;
1744        Bitfield<9, 8> irgn0;
1745        Bitfield<11, 10> orgn0;
1746        Bitfield<13, 12> sh0;
1747    EndBitUnion(HTCR)
1748
1749    BitUnion32(VTCR_t)
1750        Bitfield<3, 0> t0sz;
1751        Bitfield<4> s;
1752        Bitfield<7, 6> sl0;
1753        Bitfield<9, 8> irgn0;
1754        Bitfield<11, 10> orgn0;
1755        Bitfield<13, 12> sh0;
1756    EndBitUnion(VTCR_t)
1757
1758    BitUnion32(PRRR)
1759       Bitfield<1,0> tr0;
1760       Bitfield<3,2> tr1;
1761       Bitfield<5,4> tr2;
1762       Bitfield<7,6> tr3;
1763       Bitfield<9,8> tr4;
1764       Bitfield<11,10> tr5;
1765       Bitfield<13,12> tr6;
1766       Bitfield<15,14> tr7;
1767       Bitfield<16> ds0;
1768       Bitfield<17> ds1;
1769       Bitfield<18> ns0;
1770       Bitfield<19> ns1;
1771       Bitfield<24> nos0;
1772       Bitfield<25> nos1;
1773       Bitfield<26> nos2;
1774       Bitfield<27> nos3;
1775       Bitfield<28> nos4;
1776       Bitfield<29> nos5;
1777       Bitfield<30> nos6;
1778       Bitfield<31> nos7;
1779   EndBitUnion(PRRR)
1780
1781   BitUnion32(NMRR)
1782       Bitfield<1,0> ir0;
1783       Bitfield<3,2> ir1;
1784       Bitfield<5,4> ir2;
1785       Bitfield<7,6> ir3;
1786       Bitfield<9,8> ir4;
1787       Bitfield<11,10> ir5;
1788       Bitfield<13,12> ir6;
1789       Bitfield<15,14> ir7;
1790       Bitfield<17,16> or0;
1791       Bitfield<19,18> or1;
1792       Bitfield<21,20> or2;
1793       Bitfield<23,22> or3;
1794       Bitfield<25,24> or4;
1795       Bitfield<27,26> or5;
1796       Bitfield<29,28> or6;
1797       Bitfield<31,30> or7;
1798   EndBitUnion(NMRR)
1799
1800   BitUnion32(CONTEXTIDR)
1801      Bitfield<7,0>  asid;
1802      Bitfield<31,8> procid;
1803   EndBitUnion(CONTEXTIDR)
1804
1805   BitUnion32(L2CTLR)
1806      Bitfield<2,0>   sataRAMLatency;
1807      Bitfield<4,3>   reserved_4_3;
1808      Bitfield<5>     dataRAMSetup;
1809      Bitfield<8,6>   tagRAMLatency;
1810      Bitfield<9>     tagRAMSetup;
1811      Bitfield<11,10> dataRAMSlice;
1812      Bitfield<12>    tagRAMSlice;
1813      Bitfield<20,13> reserved_20_13;
1814      Bitfield<21>    eccandParityEnable;
1815      Bitfield<22>    reserved_22;
1816      Bitfield<23>    interptCtrlPresent;
1817      Bitfield<25,24> numCPUs;
1818      Bitfield<30,26> reserved_30_26;
1819      Bitfield<31>    l2rstDISABLE_monitor;
1820   EndBitUnion(L2CTLR)
1821
1822   BitUnion32(CTR)
1823      Bitfield<3,0>   iCacheLineSize;
1824      Bitfield<13,4>  raz_13_4;
1825      Bitfield<15,14> l1IndexPolicy;
1826      Bitfield<19,16> dCacheLineSize;
1827      Bitfield<23,20> erg;
1828      Bitfield<27,24> cwg;
1829      Bitfield<28>    raz_28;
1830      Bitfield<31,29> format;
1831   EndBitUnion(CTR)
1832
1833   BitUnion32(PMSELR)
1834      Bitfield<4, 0> sel;
1835   EndBitUnion(PMSELR)
1836
1837    BitUnion64(PAR)
1838        // 64-bit format
1839        Bitfield<63, 56> attr;
1840        Bitfield<39, 12> pa;
1841        Bitfield<11>     lpae;
1842        Bitfield<9>      ns;
1843        Bitfield<8, 7>   sh;
1844        Bitfield<0>      f;
1845   EndBitUnion(PAR)
1846
1847   BitUnion32(ESR)
1848        Bitfield<31, 26> ec;
1849        Bitfield<25> il;
1850        Bitfield<15, 0> imm16;
1851   EndBitUnion(ESR)
1852
1853   BitUnion32(CPTR)
1854        Bitfield<31> tcpac;
1855        Bitfield<20> tta;
1856        Bitfield<13, 12> res1_13_12_el2;
1857        Bitfield<10> tfp;
1858        Bitfield<9, 0> res1_9_0_el2;
1859   EndBitUnion(CPTR)
1860
1861
1862    // Checks read access permissions to coproc. registers
1863    bool canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr,
1864                          ThreadContext *tc);
1865
1866    // Checks write access permissions to coproc. registers
1867    bool canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr,
1868                           ThreadContext *tc);
1869
1870    // Checks read access permissions to AArch64 system registers
1871    bool canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr,
1872                              ThreadContext *tc);
1873
1874    // Checks write access permissions to AArch64 system registers
1875    bool canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr,
1876                               ThreadContext *tc);
1877
1878    // Uses just the scr.ns bit to pre flatten the misc regs. This is useful
1879    // for MCR/MRC instructions
1880    int
1881    flattenMiscRegNsBanked(int reg, ThreadContext *tc);
1882
1883    // Flattens a misc reg index using the specified security state. This is
1884    // used for opperations (eg address translations) where the security
1885    // state of the register access may differ from the current state of the
1886    // processor
1887    int
1888    flattenMiscRegNsBanked(int reg, ThreadContext *tc, bool ns);
1889
1890    // Takes a misc reg index and returns the root reg if its one of a set of
1891    // banked registers
1892    void
1893    preUnflattenMiscReg();
1894
1895    int
1896    unflattenMiscReg(int reg);
1897
1898}
1899
1900#endif // __ARCH_ARM_MISCREGS_HH__
1901