gem5  v20.0.0.3
miscregs.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2013, 2015-2020 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 
38 #include "arch/arm/miscregs.hh"
39 
40 #include <tuple>
41 
42 #include "arch/arm/isa.hh"
43 #include "base/logging.hh"
44 #include "cpu/thread_context.hh"
45 #include "sim/full_system.hh"
46 
47 namespace ArmISA
48 {
49 
51 decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
52 {
53  switch(crn) {
54  case 0:
55  switch (opc1) {
56  case 0:
57  switch (opc2) {
58  case 0:
59  switch (crm) {
60  case 0:
61  return MISCREG_DBGDIDR;
62  case 1:
63  return MISCREG_DBGDSCRint;
64  }
65  break;
66  }
67  break;
68  case 7:
69  switch (opc2) {
70  case 0:
71  switch (crm) {
72  case 0:
73  return MISCREG_JIDR;
74  }
75  break;
76  }
77  break;
78  }
79  break;
80  case 1:
81  switch (opc1) {
82  case 6:
83  switch (crm) {
84  case 0:
85  switch (opc2) {
86  case 0:
87  return MISCREG_TEEHBR;
88  }
89  break;
90  }
91  break;
92  case 7:
93  switch (crm) {
94  case 0:
95  switch (opc2) {
96  case 0:
97  return MISCREG_JOSCR;
98  }
99  break;
100  }
101  break;
102  }
103  break;
104  case 2:
105  switch (opc1) {
106  case 7:
107  switch (crm) {
108  case 0:
109  switch (opc2) {
110  case 0:
111  return MISCREG_JMCR;
112  }
113  break;
114  }
115  break;
116  }
117  break;
118  }
119  // If we get here then it must be a register that we haven't implemented
120  warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
121  crn, opc1, crm, opc2);
122  return MISCREG_CP14_UNIMPL;
123 }
124 
125 using namespace std;
126 
128 decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
129 {
130  switch (crn) {
131  case 0:
132  switch (opc1) {
133  case 0:
134  switch (crm) {
135  case 0:
136  switch (opc2) {
137  case 1:
138  return MISCREG_CTR;
139  case 2:
140  return MISCREG_TCMTR;
141  case 3:
142  return MISCREG_TLBTR;
143  case 5:
144  return MISCREG_MPIDR;
145  case 6:
146  return MISCREG_REVIDR;
147  default:
148  return MISCREG_MIDR;
149  }
150  break;
151  case 1:
152  switch (opc2) {
153  case 0:
154  return MISCREG_ID_PFR0;
155  case 1:
156  return MISCREG_ID_PFR1;
157  case 2:
158  return MISCREG_ID_DFR0;
159  case 3:
160  return MISCREG_ID_AFR0;
161  case 4:
162  return MISCREG_ID_MMFR0;
163  case 5:
164  return MISCREG_ID_MMFR1;
165  case 6:
166  return MISCREG_ID_MMFR2;
167  case 7:
168  return MISCREG_ID_MMFR3;
169  }
170  break;
171  case 2:
172  switch (opc2) {
173  case 0:
174  return MISCREG_ID_ISAR0;
175  case 1:
176  return MISCREG_ID_ISAR1;
177  case 2:
178  return MISCREG_ID_ISAR2;
179  case 3:
180  return MISCREG_ID_ISAR3;
181  case 4:
182  return MISCREG_ID_ISAR4;
183  case 5:
184  return MISCREG_ID_ISAR5;
185  case 6:
186  case 7:
187  return MISCREG_RAZ; // read as zero
188  }
189  break;
190  default:
191  return MISCREG_RAZ; // read as zero
192  }
193  break;
194  case 1:
195  if (crm == 0) {
196  switch (opc2) {
197  case 0:
198  return MISCREG_CCSIDR;
199  case 1:
200  return MISCREG_CLIDR;
201  case 7:
202  return MISCREG_AIDR;
203  }
204  }
205  break;
206  case 2:
207  if (crm == 0 && opc2 == 0) {
208  return MISCREG_CSSELR;
209  }
210  break;
211  case 4:
212  if (crm == 0) {
213  if (opc2 == 0)
214  return MISCREG_VPIDR;
215  else if (opc2 == 5)
216  return MISCREG_VMPIDR;
217  }
218  break;
219  }
220  break;
221  case 1:
222  if (opc1 == 0) {
223  if (crm == 0) {
224  switch (opc2) {
225  case 0:
226  return MISCREG_SCTLR;
227  case 1:
228  return MISCREG_ACTLR;
229  case 0x2:
230  return MISCREG_CPACR;
231  }
232  } else if (crm == 1) {
233  switch (opc2) {
234  case 0:
235  return MISCREG_SCR;
236  case 1:
237  return MISCREG_SDER;
238  case 2:
239  return MISCREG_NSACR;
240  }
241  }
242  } else if (opc1 == 4) {
243  if (crm == 0) {
244  if (opc2 == 0)
245  return MISCREG_HSCTLR;
246  else if (opc2 == 1)
247  return MISCREG_HACTLR;
248  } else if (crm == 1) {
249  switch (opc2) {
250  case 0:
251  return MISCREG_HCR;
252  case 1:
253  return MISCREG_HDCR;
254  case 2:
255  return MISCREG_HCPTR;
256  case 4:
257  return MISCREG_HCR2;
258  case 3:
259  return MISCREG_HSTR;
260  case 7:
261  return MISCREG_HACR;
262  }
263  }
264  }
265  break;
266  case 2:
267  if (opc1 == 0 && crm == 0) {
268  switch (opc2) {
269  case 0:
270  return MISCREG_TTBR0;
271  case 1:
272  return MISCREG_TTBR1;
273  case 2:
274  return MISCREG_TTBCR;
275  }
276  } else if (opc1 == 4) {
277  if (crm == 0 && opc2 == 2)
278  return MISCREG_HTCR;
279  else if (crm == 1 && opc2 == 2)
280  return MISCREG_VTCR;
281  }
282  break;
283  case 3:
284  if (opc1 == 0 && crm == 0 && opc2 == 0) {
285  return MISCREG_DACR;
286  }
287  break;
288  case 4:
289  if (opc1 == 0 && crm == 6 && opc2 == 0) {
290  return MISCREG_ICC_PMR;
291  }
292  break;
293  case 5:
294  if (opc1 == 0) {
295  if (crm == 0) {
296  if (opc2 == 0) {
297  return MISCREG_DFSR;
298  } else if (opc2 == 1) {
299  return MISCREG_IFSR;
300  }
301  } else if (crm == 1) {
302  if (opc2 == 0) {
303  return MISCREG_ADFSR;
304  } else if (opc2 == 1) {
305  return MISCREG_AIFSR;
306  }
307  }
308  } else if (opc1 == 4) {
309  if (crm == 1) {
310  if (opc2 == 0)
311  return MISCREG_HADFSR;
312  else if (opc2 == 1)
313  return MISCREG_HAIFSR;
314  } else if (crm == 2 && opc2 == 0) {
315  return MISCREG_HSR;
316  }
317  }
318  break;
319  case 6:
320  if (opc1 == 0 && crm == 0) {
321  switch (opc2) {
322  case 0:
323  return MISCREG_DFAR;
324  case 2:
325  return MISCREG_IFAR;
326  }
327  } else if (opc1 == 4 && crm == 0) {
328  switch (opc2) {
329  case 0:
330  return MISCREG_HDFAR;
331  case 2:
332  return MISCREG_HIFAR;
333  case 4:
334  return MISCREG_HPFAR;
335  }
336  }
337  break;
338  case 7:
339  if (opc1 == 0) {
340  switch (crm) {
341  case 0:
342  if (opc2 == 4) {
343  return MISCREG_NOP;
344  }
345  break;
346  case 1:
347  switch (opc2) {
348  case 0:
349  return MISCREG_ICIALLUIS;
350  case 6:
351  return MISCREG_BPIALLIS;
352  }
353  break;
354  case 4:
355  if (opc2 == 0) {
356  return MISCREG_PAR;
357  }
358  break;
359  case 5:
360  switch (opc2) {
361  case 0:
362  return MISCREG_ICIALLU;
363  case 1:
364  return MISCREG_ICIMVAU;
365  case 4:
366  return MISCREG_CP15ISB;
367  case 6:
368  return MISCREG_BPIALL;
369  case 7:
370  return MISCREG_BPIMVA;
371  }
372  break;
373  case 6:
374  if (opc2 == 1) {
375  return MISCREG_DCIMVAC;
376  } else if (opc2 == 2) {
377  return MISCREG_DCISW;
378  }
379  break;
380  case 8:
381  switch (opc2) {
382  case 0:
383  return MISCREG_ATS1CPR;
384  case 1:
385  return MISCREG_ATS1CPW;
386  case 2:
387  return MISCREG_ATS1CUR;
388  case 3:
389  return MISCREG_ATS1CUW;
390  case 4:
391  return MISCREG_ATS12NSOPR;
392  case 5:
393  return MISCREG_ATS12NSOPW;
394  case 6:
395  return MISCREG_ATS12NSOUR;
396  case 7:
397  return MISCREG_ATS12NSOUW;
398  }
399  break;
400  case 10:
401  switch (opc2) {
402  case 1:
403  return MISCREG_DCCMVAC;
404  case 2:
405  return MISCREG_DCCSW;
406  case 4:
407  return MISCREG_CP15DSB;
408  case 5:
409  return MISCREG_CP15DMB;
410  }
411  break;
412  case 11:
413  if (opc2 == 1) {
414  return MISCREG_DCCMVAU;
415  }
416  break;
417  case 13:
418  if (opc2 == 1) {
419  return MISCREG_NOP;
420  }
421  break;
422  case 14:
423  if (opc2 == 1) {
424  return MISCREG_DCCIMVAC;
425  } else if (opc2 == 2) {
426  return MISCREG_DCCISW;
427  }
428  break;
429  }
430  } else if (opc1 == 4 && crm == 8) {
431  if (opc2 == 0)
432  return MISCREG_ATS1HR;
433  else if (opc2 == 1)
434  return MISCREG_ATS1HW;
435  }
436  break;
437  case 8:
438  if (opc1 == 0) {
439  switch (crm) {
440  case 3:
441  switch (opc2) {
442  case 0:
443  return MISCREG_TLBIALLIS;
444  case 1:
445  return MISCREG_TLBIMVAIS;
446  case 2:
447  return MISCREG_TLBIASIDIS;
448  case 3:
449  return MISCREG_TLBIMVAAIS;
450  case 5:
451  return MISCREG_TLBIMVALIS;
452  case 7:
453  return MISCREG_TLBIMVAALIS;
454  }
455  break;
456  case 5:
457  switch (opc2) {
458  case 0:
459  return MISCREG_ITLBIALL;
460  case 1:
461  return MISCREG_ITLBIMVA;
462  case 2:
463  return MISCREG_ITLBIASID;
464  }
465  break;
466  case 6:
467  switch (opc2) {
468  case 0:
469  return MISCREG_DTLBIALL;
470  case 1:
471  return MISCREG_DTLBIMVA;
472  case 2:
473  return MISCREG_DTLBIASID;
474  }
475  break;
476  case 7:
477  switch (opc2) {
478  case 0:
479  return MISCREG_TLBIALL;
480  case 1:
481  return MISCREG_TLBIMVA;
482  case 2:
483  return MISCREG_TLBIASID;
484  case 3:
485  return MISCREG_TLBIMVAA;
486  case 5:
487  return MISCREG_TLBIMVAL;
488  case 7:
489  return MISCREG_TLBIMVAAL;
490  }
491  break;
492  }
493  } else if (opc1 == 4) {
494  if (crm == 0) {
495  switch (opc2) {
496  case 1:
497  return MISCREG_TLBIIPAS2IS;
498  case 5:
499  return MISCREG_TLBIIPAS2LIS;
500  }
501  } else if (crm == 3) {
502  switch (opc2) {
503  case 0:
504  return MISCREG_TLBIALLHIS;
505  case 1:
506  return MISCREG_TLBIMVAHIS;
507  case 4:
508  return MISCREG_TLBIALLNSNHIS;
509  case 5:
510  return MISCREG_TLBIMVALHIS;
511  }
512  } else if (crm == 4) {
513  switch (opc2) {
514  case 1:
515  return MISCREG_TLBIIPAS2;
516  case 5:
517  return MISCREG_TLBIIPAS2L;
518  }
519  } else if (crm == 7) {
520  switch (opc2) {
521  case 0:
522  return MISCREG_TLBIALLH;
523  case 1:
524  return MISCREG_TLBIMVAH;
525  case 4:
526  return MISCREG_TLBIALLNSNH;
527  case 5:
528  return MISCREG_TLBIMVALH;
529  }
530  }
531  }
532  break;
533  case 9:
534  // Every cop register with CRn = 9 and CRm in
535  // {0-2}, {5-8} is implementation defined regardless
536  // of opc1 and opc2.
537  switch (crm) {
538  case 0:
539  case 1:
540  case 2:
541  case 5:
542  case 6:
543  case 7:
544  case 8:
545  return MISCREG_IMPDEF_UNIMPL;
546  }
547  if (opc1 == 0) {
548  switch (crm) {
549  case 12:
550  switch (opc2) {
551  case 0:
552  return MISCREG_PMCR;
553  case 1:
554  return MISCREG_PMCNTENSET;
555  case 2:
556  return MISCREG_PMCNTENCLR;
557  case 3:
558  return MISCREG_PMOVSR;
559  case 4:
560  return MISCREG_PMSWINC;
561  case 5:
562  return MISCREG_PMSELR;
563  case 6:
564  return MISCREG_PMCEID0;
565  case 7:
566  return MISCREG_PMCEID1;
567  }
568  break;
569  case 13:
570  switch (opc2) {
571  case 0:
572  return MISCREG_PMCCNTR;
573  case 1:
574  // Selector is PMSELR.SEL
576  case 2:
577  return MISCREG_PMXEVCNTR;
578  }
579  break;
580  case 14:
581  switch (opc2) {
582  case 0:
583  return MISCREG_PMUSERENR;
584  case 1:
585  return MISCREG_PMINTENSET;
586  case 2:
587  return MISCREG_PMINTENCLR;
588  case 3:
589  return MISCREG_PMOVSSET;
590  }
591  break;
592  }
593  } else if (opc1 == 1) {
594  switch (crm) {
595  case 0:
596  switch (opc2) {
597  case 2: // L2CTLR, L2 Control Register
598  return MISCREG_L2CTLR;
599  case 3:
600  return MISCREG_L2ECTLR;
601  }
602  break;
603  break;
604  }
605  }
606  break;
607  case 10:
608  if (opc1 == 0) {
609  // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
610  if (crm < 2) {
611  return MISCREG_IMPDEF_UNIMPL;
612  } else if (crm == 2) { // TEX Remap Registers
613  if (opc2 == 0) {
614  // Selector is TTBCR.EAE
615  return MISCREG_PRRR_MAIR0;
616  } else if (opc2 == 1) {
617  // Selector is TTBCR.EAE
618  return MISCREG_NMRR_MAIR1;
619  }
620  } else if (crm == 3) {
621  if (opc2 == 0) {
622  return MISCREG_AMAIR0;
623  } else if (opc2 == 1) {
624  return MISCREG_AMAIR1;
625  }
626  }
627  } else if (opc1 == 4) {
628  // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
629  if (crm == 2) {
630  if (opc2 == 0)
631  return MISCREG_HMAIR0;
632  else if (opc2 == 1)
633  return MISCREG_HMAIR1;
634  } else if (crm == 3) {
635  if (opc2 == 0)
636  return MISCREG_HAMAIR0;
637  else if (opc2 == 1)
638  return MISCREG_HAMAIR1;
639  }
640  }
641  break;
642  case 11:
643  if (opc1 <=7) {
644  switch (crm) {
645  case 0:
646  case 1:
647  case 2:
648  case 3:
649  case 4:
650  case 5:
651  case 6:
652  case 7:
653  case 8:
654  case 15:
655  // Reserved for DMA operations for TCM access
656  return MISCREG_IMPDEF_UNIMPL;
657  default:
658  break;
659  }
660  }
661  break;
662  case 12:
663  if (opc1 == 0) {
664  if (crm == 0) {
665  if (opc2 == 0) {
666  return MISCREG_VBAR;
667  } else if (opc2 == 1) {
668  return MISCREG_MVBAR;
669  }
670  } else if (crm == 1) {
671  if (opc2 == 0) {
672  return MISCREG_ISR;
673  }
674  } else if (crm == 8) {
675  switch (opc2) {
676  case 0:
677  return MISCREG_ICC_IAR0;
678  case 1:
679  return MISCREG_ICC_EOIR0;
680  case 2:
681  return MISCREG_ICC_HPPIR0;
682  case 3:
683  return MISCREG_ICC_BPR0;
684  case 4:
685  return MISCREG_ICC_AP0R0;
686  case 5:
687  return MISCREG_ICC_AP0R1;
688  case 6:
689  return MISCREG_ICC_AP0R2;
690  case 7:
691  return MISCREG_ICC_AP0R3;
692  }
693  } else if (crm == 9) {
694  switch (opc2) {
695  case 0:
696  return MISCREG_ICC_AP1R0;
697  case 1:
698  return MISCREG_ICC_AP1R1;
699  case 2:
700  return MISCREG_ICC_AP1R2;
701  case 3:
702  return MISCREG_ICC_AP1R3;
703  }
704  } else if (crm == 11) {
705  switch (opc2) {
706  case 1:
707  return MISCREG_ICC_DIR;
708  case 3:
709  return MISCREG_ICC_RPR;
710  }
711  } else if (crm == 12) {
712  switch (opc2) {
713  case 0:
714  return MISCREG_ICC_IAR1;
715  case 1:
716  return MISCREG_ICC_EOIR1;
717  case 2:
718  return MISCREG_ICC_HPPIR1;
719  case 3:
720  return MISCREG_ICC_BPR1;
721  case 4:
722  return MISCREG_ICC_CTLR;
723  case 5:
724  return MISCREG_ICC_SRE;
725  case 6:
726  return MISCREG_ICC_IGRPEN0;
727  case 7:
728  return MISCREG_ICC_IGRPEN1;
729  }
730  }
731  } else if (opc1 == 4) {
732  if (crm == 0 && opc2 == 0) {
733  return MISCREG_HVBAR;
734  } else if (crm == 8) {
735  switch (opc2) {
736  case 0:
737  return MISCREG_ICH_AP0R0;
738  case 1:
739  return MISCREG_ICH_AP0R1;
740  case 2:
741  return MISCREG_ICH_AP0R2;
742  case 3:
743  return MISCREG_ICH_AP0R3;
744  }
745  } else if (crm == 9) {
746  switch (opc2) {
747  case 0:
748  return MISCREG_ICH_AP1R0;
749  case 1:
750  return MISCREG_ICH_AP1R1;
751  case 2:
752  return MISCREG_ICH_AP1R2;
753  case 3:
754  return MISCREG_ICH_AP1R3;
755  case 5:
756  return MISCREG_ICC_HSRE;
757  }
758  } else if (crm == 11) {
759  switch (opc2) {
760  case 0:
761  return MISCREG_ICH_HCR;
762  case 1:
763  return MISCREG_ICH_VTR;
764  case 2:
765  return MISCREG_ICH_MISR;
766  case 3:
767  return MISCREG_ICH_EISR;
768  case 5:
769  return MISCREG_ICH_ELRSR;
770  case 7:
771  return MISCREG_ICH_VMCR;
772  }
773  } else if (crm == 12) {
774  switch (opc2) {
775  case 0:
776  return MISCREG_ICH_LR0;
777  case 1:
778  return MISCREG_ICH_LR1;
779  case 2:
780  return MISCREG_ICH_LR2;
781  case 3:
782  return MISCREG_ICH_LR3;
783  case 4:
784  return MISCREG_ICH_LR4;
785  case 5:
786  return MISCREG_ICH_LR5;
787  case 6:
788  return MISCREG_ICH_LR6;
789  case 7:
790  return MISCREG_ICH_LR7;
791  }
792  } else if (crm == 13) {
793  switch (opc2) {
794  case 0:
795  return MISCREG_ICH_LR8;
796  case 1:
797  return MISCREG_ICH_LR9;
798  case 2:
799  return MISCREG_ICH_LR10;
800  case 3:
801  return MISCREG_ICH_LR11;
802  case 4:
803  return MISCREG_ICH_LR12;
804  case 5:
805  return MISCREG_ICH_LR13;
806  case 6:
807  return MISCREG_ICH_LR14;
808  case 7:
809  return MISCREG_ICH_LR15;
810  }
811  } else if (crm == 14) {
812  switch (opc2) {
813  case 0:
814  return MISCREG_ICH_LRC0;
815  case 1:
816  return MISCREG_ICH_LRC1;
817  case 2:
818  return MISCREG_ICH_LRC2;
819  case 3:
820  return MISCREG_ICH_LRC3;
821  case 4:
822  return MISCREG_ICH_LRC4;
823  case 5:
824  return MISCREG_ICH_LRC5;
825  case 6:
826  return MISCREG_ICH_LRC6;
827  case 7:
828  return MISCREG_ICH_LRC7;
829  }
830  } else if (crm == 15) {
831  switch (opc2) {
832  case 0:
833  return MISCREG_ICH_LRC8;
834  case 1:
835  return MISCREG_ICH_LRC9;
836  case 2:
837  return MISCREG_ICH_LRC10;
838  case 3:
839  return MISCREG_ICH_LRC11;
840  case 4:
841  return MISCREG_ICH_LRC12;
842  case 5:
843  return MISCREG_ICH_LRC13;
844  case 6:
845  return MISCREG_ICH_LRC14;
846  case 7:
847  return MISCREG_ICH_LRC15;
848  }
849  }
850  } else if (opc1 == 6) {
851  if (crm == 12) {
852  switch (opc2) {
853  case 4:
854  return MISCREG_ICC_MCTLR;
855  case 5:
856  return MISCREG_ICC_MSRE;
857  case 7:
858  return MISCREG_ICC_MGRPEN1;
859  }
860  }
861  }
862  break;
863  case 13:
864  if (opc1 == 0) {
865  if (crm == 0) {
866  switch (opc2) {
867  case 0:
868  return MISCREG_FCSEIDR;
869  case 1:
870  return MISCREG_CONTEXTIDR;
871  case 2:
872  return MISCREG_TPIDRURW;
873  case 3:
874  return MISCREG_TPIDRURO;
875  case 4:
876  return MISCREG_TPIDRPRW;
877  }
878  }
879  } else if (opc1 == 4) {
880  if (crm == 0 && opc2 == 2)
881  return MISCREG_HTPIDR;
882  }
883  break;
884  case 14:
885  if (opc1 == 0) {
886  switch (crm) {
887  case 0:
888  if (opc2 == 0)
889  return MISCREG_CNTFRQ;
890  break;
891  case 1:
892  if (opc2 == 0)
893  return MISCREG_CNTKCTL;
894  break;
895  case 2:
896  if (opc2 == 0)
897  return MISCREG_CNTP_TVAL;
898  else if (opc2 == 1)
899  return MISCREG_CNTP_CTL;
900  break;
901  case 3:
902  if (opc2 == 0)
903  return MISCREG_CNTV_TVAL;
904  else if (opc2 == 1)
905  return MISCREG_CNTV_CTL;
906  break;
907  }
908  } else if (opc1 == 4) {
909  if (crm == 1 && opc2 == 0) {
910  return MISCREG_CNTHCTL;
911  } else if (crm == 2) {
912  if (opc2 == 0)
913  return MISCREG_CNTHP_TVAL;
914  else if (opc2 == 1)
915  return MISCREG_CNTHP_CTL;
916  }
917  }
918  break;
919  case 15:
920  // Implementation defined
921  return MISCREG_IMPDEF_UNIMPL;
922  }
923  // Unrecognized register
924  return MISCREG_CP15_UNIMPL;
925 }
926 
928 decodeCP15Reg64(unsigned crm, unsigned opc1)
929 {
930  switch (crm) {
931  case 2:
932  switch (opc1) {
933  case 0:
934  return MISCREG_TTBR0;
935  case 1:
936  return MISCREG_TTBR1;
937  case 4:
938  return MISCREG_HTTBR;
939  case 6:
940  return MISCREG_VTTBR;
941  }
942  break;
943  case 7:
944  if (opc1 == 0)
945  return MISCREG_PAR;
946  break;
947  case 14:
948  switch (opc1) {
949  case 0:
950  return MISCREG_CNTPCT;
951  case 1:
952  return MISCREG_CNTVCT;
953  case 2:
954  return MISCREG_CNTP_CVAL;
955  case 3:
956  return MISCREG_CNTV_CVAL;
957  case 4:
958  return MISCREG_CNTVOFF;
959  case 6:
960  return MISCREG_CNTHP_CVAL;
961  }
962  break;
963  case 12:
964  switch (opc1) {
965  case 0:
966  return MISCREG_ICC_SGI1R;
967  case 1:
968  return MISCREG_ICC_ASGI1R;
969  case 2:
970  return MISCREG_ICC_SGI0R;
971  default:
972  break;
973  }
974  break;
975  case 15:
976  if (opc1 == 0)
977  return MISCREG_CPUMERRSR;
978  else if (opc1 == 1)
979  return MISCREG_L2MERRSR;
980  break;
981  }
982  // Unrecognized register
983  return MISCREG_CP15_UNIMPL;
984 }
985 
986 std::tuple<bool, bool>
988 {
989  bool secure = !scr.ns;
990  bool canRead = false;
991  bool undefined = false;
992 
993  switch (cpsr.mode) {
994  case MODE_USER:
995  canRead = secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
997  break;
998  case MODE_FIQ:
999  case MODE_IRQ:
1000  case MODE_SVC:
1001  case MODE_ABORT:
1002  case MODE_UNDEFINED:
1003  case MODE_SYSTEM:
1004  canRead = secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
1006  break;
1007  case MODE_MON:
1008  canRead = secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
1010  break;
1011  case MODE_HYP:
1012  canRead = miscRegInfo[reg][MISCREG_HYP_RD];
1013  break;
1014  default:
1015  undefined = true;
1016  }
1017 
1018  switch (reg) {
1020  if (!undefined)
1021  undefined = AArch32isUndefinedGenericTimer(reg, tc);
1022  break;
1023  default:
1024  break;
1025  }
1026 
1027  // can't do permissions checkes on the root of a banked pair of regs
1028  assert(!miscRegInfo[reg][MISCREG_BANKED]);
1029  return std::make_tuple(canRead, undefined);
1030 }
1031 
1032 std::tuple<bool, bool>
1034 {
1035  bool secure = !scr.ns;
1036  bool canWrite = false;
1037  bool undefined = false;
1038 
1039  switch (cpsr.mode) {
1040  case MODE_USER:
1041  canWrite = secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
1043  break;
1044  case MODE_FIQ:
1045  case MODE_IRQ:
1046  case MODE_SVC:
1047  case MODE_ABORT:
1048  case MODE_UNDEFINED:
1049  case MODE_SYSTEM:
1050  canWrite = secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
1052  break;
1053  case MODE_MON:
1054  canWrite = secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
1056  break;
1057  case MODE_HYP:
1058  canWrite = miscRegInfo[reg][MISCREG_HYP_WR];
1059  break;
1060  default:
1061  undefined = true;
1062  }
1063 
1064  switch (reg) {
1066  if (!undefined)
1067  undefined = AArch32isUndefinedGenericTimer(reg, tc);
1068  break;
1069  default:
1070  break;
1071  }
1072 
1073  // can't do permissions checkes on the root of a banked pair of regs
1074  assert(!miscRegInfo[reg][MISCREG_BANKED]);
1075  return std::make_tuple(canWrite, undefined);
1076 }
1077 
1078 bool
1080 {
1081  if (currEL(tc) == EL0 && ELIs32(tc, EL1)) {
1082  const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
1083  bool trap_cond = condGenericTimerSystemAccessTrapEL1(reg, tc);
1084  if (trap_cond && (!EL2Enabled(tc) || !hcr.tge))
1085  return true;
1086  }
1087  return false;
1088 }
1089 
1090 int
1092 {
1093  SCR scr = tc->readMiscReg(MISCREG_SCR);
1094  return snsBankedIndex(reg, tc, scr.ns);
1095 }
1096 
1097 int
1099 {
1100  int reg_as_int = static_cast<int>(reg);
1101  if (miscRegInfo[reg][MISCREG_BANKED]) {
1102  reg_as_int += (ArmSystem::haveSecurity(tc) &&
1103  !ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1;
1104  }
1105  return reg_as_int;
1106 }
1107 
1108 int
1110 {
1111  auto *isa = static_cast<ArmISA::ISA *>(tc->getIsaPtr());
1112  SCR scr = tc->readMiscReg(MISCREG_SCR);
1113  return isa->snsBankedIndex64(reg, scr.ns);
1114 }
1115 
1125 
1126 void
1128 {
1129  int reg = -1;
1130  for (int i = 0 ; i < NUM_MISCREGS; i++){
1132  reg = i;
1134  unflattenResultMiscReg[i] = reg;
1135  else
1136  unflattenResultMiscReg[i] = i;
1137  // if this assert fails, no parent was found, and something is broken
1138  assert(unflattenResultMiscReg[i] > -1);
1139  }
1140 }
1141 
1142 int
1144 {
1145  return unflattenResultMiscReg[reg];
1146 }
1147 
1148 bool
1149 canReadAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr,
1150  ThreadContext *tc)
1151 {
1152  // Check for SP_EL0 access while SPSEL == 0
1153  if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
1154  return false;
1155 
1156  // Check for RVBAR access
1157  if (reg == MISCREG_RVBAR_EL1) {
1158  ExceptionLevel highest_el = ArmSystem::highestEL(tc);
1159  if (highest_el == EL2 || highest_el == EL3)
1160  return false;
1161  }
1162  if (reg == MISCREG_RVBAR_EL2) {
1163  ExceptionLevel highest_el = ArmSystem::highestEL(tc);
1164  if (highest_el == EL3)
1165  return false;
1166  }
1167 
1168  bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
1169  bool el2_host = EL2Enabled(tc) && hcr.e2h;
1170 
1171  switch (currEL(cpsr)) {
1172  case EL0:
1173  return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
1175  case EL1:
1176  return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
1178  case EL2:
1179  return el2_host ? miscRegInfo[reg][MISCREG_HYP_E2H_RD] :
1181  case EL3:
1182  return el2_host ? miscRegInfo[reg][MISCREG_MON_E2H_RD] :
1183  secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
1185  default:
1186  panic("Invalid exception level");
1187  }
1188 }
1189 
1190 bool
1191 canWriteAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr,
1192  ThreadContext *tc)
1193 {
1194  // Check for SP_EL0 access while SPSEL == 0
1195  if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
1196  return false;
1197  ExceptionLevel el = currEL(cpsr);
1198  if (reg == MISCREG_DAIF) {
1199  SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1200  if (el == EL0 && !sctlr.uma)
1201  return false;
1202  }
1203  if (FullSystem && reg == MISCREG_DC_ZVA_Xt) {
1204  // In syscall-emulation mode, this test is skipped and DCZVA is always
1205  // allowed at EL0
1206  SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1207  if (el == EL0 && !sctlr.dze)
1208  return false;
1209  }
1210  if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) {
1211  SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
1212  if (el == EL0 && !sctlr.uci)
1213  return false;
1214  }
1215 
1216  bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
1217  bool el2_host = EL2Enabled(tc) && hcr.e2h;
1218 
1219  switch (el) {
1220  case EL0:
1221  return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
1223  case EL1:
1224  return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
1226  case EL2:
1227  return el2_host ? miscRegInfo[reg][MISCREG_HYP_E2H_WR] :
1229  case EL3:
1230  return el2_host ? miscRegInfo[reg][MISCREG_MON_E2H_WR] :
1231  secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
1233  default:
1234  panic("Invalid exception level");
1235  }
1236 }
1237 
1239 decodeAArch64SysReg(unsigned op0, unsigned op1,
1240  unsigned crn, unsigned crm,
1241  unsigned op2)
1242 {
1243  switch (op0) {
1244  case 1:
1245  switch (crn) {
1246  case 7:
1247  switch (op1) {
1248  case 0:
1249  switch (crm) {
1250  case 1:
1251  switch (op2) {
1252  case 0:
1253  return MISCREG_IC_IALLUIS;
1254  }
1255  break;
1256  case 5:
1257  switch (op2) {
1258  case 0:
1259  return MISCREG_IC_IALLU;
1260  }
1261  break;
1262  case 6:
1263  switch (op2) {
1264  case 1:
1265  return MISCREG_DC_IVAC_Xt;
1266  case 2:
1267  return MISCREG_DC_ISW_Xt;
1268  }
1269  break;
1270  case 8:
1271  switch (op2) {
1272  case 0:
1273  return MISCREG_AT_S1E1R_Xt;
1274  case 1:
1275  return MISCREG_AT_S1E1W_Xt;
1276  case 2:
1277  return MISCREG_AT_S1E0R_Xt;
1278  case 3:
1279  return MISCREG_AT_S1E0W_Xt;
1280  }
1281  break;
1282  case 10:
1283  switch (op2) {
1284  case 2:
1285  return MISCREG_DC_CSW_Xt;
1286  }
1287  break;
1288  case 14:
1289  switch (op2) {
1290  case 2:
1291  return MISCREG_DC_CISW_Xt;
1292  }
1293  break;
1294  }
1295  break;
1296  case 3:
1297  switch (crm) {
1298  case 4:
1299  switch (op2) {
1300  case 1:
1301  return MISCREG_DC_ZVA_Xt;
1302  }
1303  break;
1304  case 5:
1305  switch (op2) {
1306  case 1:
1307  return MISCREG_IC_IVAU_Xt;
1308  }
1309  break;
1310  case 10:
1311  switch (op2) {
1312  case 1:
1313  return MISCREG_DC_CVAC_Xt;
1314  }
1315  break;
1316  case 11:
1317  switch (op2) {
1318  case 1:
1319  return MISCREG_DC_CVAU_Xt;
1320  }
1321  break;
1322  case 14:
1323  switch (op2) {
1324  case 1:
1325  return MISCREG_DC_CIVAC_Xt;
1326  }
1327  break;
1328  }
1329  break;
1330  case 4:
1331  switch (crm) {
1332  case 8:
1333  switch (op2) {
1334  case 0:
1335  return MISCREG_AT_S1E2R_Xt;
1336  case 1:
1337  return MISCREG_AT_S1E2W_Xt;
1338  case 4:
1339  return MISCREG_AT_S12E1R_Xt;
1340  case 5:
1341  return MISCREG_AT_S12E1W_Xt;
1342  case 6:
1343  return MISCREG_AT_S12E0R_Xt;
1344  case 7:
1345  return MISCREG_AT_S12E0W_Xt;
1346  }
1347  break;
1348  }
1349  break;
1350  case 6:
1351  switch (crm) {
1352  case 8:
1353  switch (op2) {
1354  case 0:
1355  return MISCREG_AT_S1E3R_Xt;
1356  case 1:
1357  return MISCREG_AT_S1E3W_Xt;
1358  }
1359  break;
1360  }
1361  break;
1362  }
1363  break;
1364  case 8:
1365  switch (op1) {
1366  case 0:
1367  switch (crm) {
1368  case 3:
1369  switch (op2) {
1370  case 0:
1371  return MISCREG_TLBI_VMALLE1IS;
1372  case 1:
1373  return MISCREG_TLBI_VAE1IS_Xt;
1374  case 2:
1375  return MISCREG_TLBI_ASIDE1IS_Xt;
1376  case 3:
1377  return MISCREG_TLBI_VAAE1IS_Xt;
1378  case 5:
1379  return MISCREG_TLBI_VALE1IS_Xt;
1380  case 7:
1381  return MISCREG_TLBI_VAALE1IS_Xt;
1382  }
1383  break;
1384  case 7:
1385  switch (op2) {
1386  case 0:
1387  return MISCREG_TLBI_VMALLE1;
1388  case 1:
1389  return MISCREG_TLBI_VAE1_Xt;
1390  case 2:
1391  return MISCREG_TLBI_ASIDE1_Xt;
1392  case 3:
1393  return MISCREG_TLBI_VAAE1_Xt;
1394  case 5:
1395  return MISCREG_TLBI_VALE1_Xt;
1396  case 7:
1397  return MISCREG_TLBI_VAALE1_Xt;
1398  }
1399  break;
1400  }
1401  break;
1402  case 4:
1403  switch (crm) {
1404  case 0:
1405  switch (op2) {
1406  case 1:
1408  case 5:
1410  }
1411  break;
1412  case 3:
1413  switch (op2) {
1414  case 0:
1415  return MISCREG_TLBI_ALLE2IS;
1416  case 1:
1417  return MISCREG_TLBI_VAE2IS_Xt;
1418  case 4:
1419  return MISCREG_TLBI_ALLE1IS;
1420  case 5:
1421  return MISCREG_TLBI_VALE2IS_Xt;
1422  case 6:
1424  }
1425  break;
1426  case 4:
1427  switch (op2) {
1428  case 1:
1429  return MISCREG_TLBI_IPAS2E1_Xt;
1430  case 5:
1431  return MISCREG_TLBI_IPAS2LE1_Xt;
1432  }
1433  break;
1434  case 7:
1435  switch (op2) {
1436  case 0:
1437  return MISCREG_TLBI_ALLE2;
1438  case 1:
1439  return MISCREG_TLBI_VAE2_Xt;
1440  case 4:
1441  return MISCREG_TLBI_ALLE1;
1442  case 5:
1443  return MISCREG_TLBI_VALE2_Xt;
1444  case 6:
1445  return MISCREG_TLBI_VMALLS12E1;
1446  }
1447  break;
1448  }
1449  break;
1450  case 6:
1451  switch (crm) {
1452  case 3:
1453  switch (op2) {
1454  case 0:
1455  return MISCREG_TLBI_ALLE3IS;
1456  case 1:
1457  return MISCREG_TLBI_VAE3IS_Xt;
1458  case 5:
1459  return MISCREG_TLBI_VALE3IS_Xt;
1460  }
1461  break;
1462  case 7:
1463  switch (op2) {
1464  case 0:
1465  return MISCREG_TLBI_ALLE3;
1466  case 1:
1467  return MISCREG_TLBI_VAE3_Xt;
1468  case 5:
1469  return MISCREG_TLBI_VALE3_Xt;
1470  }
1471  break;
1472  }
1473  break;
1474  }
1475  break;
1476  case 11:
1477  case 15:
1478  // SYS Instruction with CRn = { 11, 15 }
1479  // (Trappable by HCR_EL2.TIDCP)
1480  return MISCREG_IMPDEF_UNIMPL;
1481  }
1482  break;
1483  case 2:
1484  switch (crn) {
1485  case 0:
1486  switch (op1) {
1487  case 0:
1488  switch (crm) {
1489  case 0:
1490  switch (op2) {
1491  case 2:
1492  return MISCREG_OSDTRRX_EL1;
1493  case 4:
1494  return MISCREG_DBGBVR0_EL1;
1495  case 5:
1496  return MISCREG_DBGBCR0_EL1;
1497  case 6:
1498  return MISCREG_DBGWVR0_EL1;
1499  case 7:
1500  return MISCREG_DBGWCR0_EL1;
1501  }
1502  break;
1503  case 1:
1504  switch (op2) {
1505  case 4:
1506  return MISCREG_DBGBVR1_EL1;
1507  case 5:
1508  return MISCREG_DBGBCR1_EL1;
1509  case 6:
1510  return MISCREG_DBGWVR1_EL1;
1511  case 7:
1512  return MISCREG_DBGWCR1_EL1;
1513  }
1514  break;
1515  case 2:
1516  switch (op2) {
1517  case 0:
1518  return MISCREG_MDCCINT_EL1;
1519  case 2:
1520  return MISCREG_MDSCR_EL1;
1521  case 4:
1522  return MISCREG_DBGBVR2_EL1;
1523  case 5:
1524  return MISCREG_DBGBCR2_EL1;
1525  case 6:
1526  return MISCREG_DBGWVR2_EL1;
1527  case 7:
1528  return MISCREG_DBGWCR2_EL1;
1529  }
1530  break;
1531  case 3:
1532  switch (op2) {
1533  case 2:
1534  return MISCREG_OSDTRTX_EL1;
1535  case 4:
1536  return MISCREG_DBGBVR3_EL1;
1537  case 5:
1538  return MISCREG_DBGBCR3_EL1;
1539  case 6:
1540  return MISCREG_DBGWVR3_EL1;
1541  case 7:
1542  return MISCREG_DBGWCR3_EL1;
1543  }
1544  break;
1545  case 4:
1546  switch (op2) {
1547  case 4:
1548  return MISCREG_DBGBVR4_EL1;
1549  case 5:
1550  return MISCREG_DBGBCR4_EL1;
1551  }
1552  break;
1553  case 5:
1554  switch (op2) {
1555  case 4:
1556  return MISCREG_DBGBVR5_EL1;
1557  case 5:
1558  return MISCREG_DBGBCR5_EL1;
1559  }
1560  break;
1561  case 6:
1562  switch (op2) {
1563  case 2:
1564  return MISCREG_OSECCR_EL1;
1565  }
1566  break;
1567  }
1568  break;
1569  case 2:
1570  switch (crm) {
1571  case 0:
1572  switch (op2) {
1573  case 0:
1574  return MISCREG_TEECR32_EL1;
1575  }
1576  break;
1577  }
1578  break;
1579  case 3:
1580  switch (crm) {
1581  case 1:
1582  switch (op2) {
1583  case 0:
1584  return MISCREG_MDCCSR_EL0;
1585  }
1586  break;
1587  case 4:
1588  switch (op2) {
1589  case 0:
1590  return MISCREG_MDDTR_EL0;
1591  }
1592  break;
1593  case 5:
1594  switch (op2) {
1595  case 0:
1596  return MISCREG_MDDTRRX_EL0;
1597  }
1598  break;
1599  }
1600  break;
1601  case 4:
1602  switch (crm) {
1603  case 7:
1604  switch (op2) {
1605  case 0:
1606  return MISCREG_DBGVCR32_EL2;
1607  }
1608  break;
1609  }
1610  break;
1611  }
1612  break;
1613  case 1:
1614  switch (op1) {
1615  case 0:
1616  switch (crm) {
1617  case 0:
1618  switch (op2) {
1619  case 0:
1620  return MISCREG_MDRAR_EL1;
1621  case 4:
1622  return MISCREG_OSLAR_EL1;
1623  }
1624  break;
1625  case 1:
1626  switch (op2) {
1627  case 4:
1628  return MISCREG_OSLSR_EL1;
1629  }
1630  break;
1631  case 3:
1632  switch (op2) {
1633  case 4:
1634  return MISCREG_OSDLR_EL1;
1635  }
1636  break;
1637  case 4:
1638  switch (op2) {
1639  case 4:
1640  return MISCREG_DBGPRCR_EL1;
1641  }
1642  break;
1643  }
1644  break;
1645  case 2:
1646  switch (crm) {
1647  case 0:
1648  switch (op2) {
1649  case 0:
1650  return MISCREG_TEEHBR32_EL1;
1651  }
1652  break;
1653  }
1654  break;
1655  }
1656  break;
1657  case 7:
1658  switch (op1) {
1659  case 0:
1660  switch (crm) {
1661  case 8:
1662  switch (op2) {
1663  case 6:
1664  return MISCREG_DBGCLAIMSET_EL1;
1665  }
1666  break;
1667  case 9:
1668  switch (op2) {
1669  case 6:
1670  return MISCREG_DBGCLAIMCLR_EL1;
1671  }
1672  break;
1673  case 14:
1674  switch (op2) {
1675  case 6:
1677  }
1678  break;
1679  }
1680  break;
1681  }
1682  break;
1683  }
1684  break;
1685  case 3:
1686  switch (crn) {
1687  case 0:
1688  switch (op1) {
1689  case 0:
1690  switch (crm) {
1691  case 0:
1692  switch (op2) {
1693  case 0:
1694  return MISCREG_MIDR_EL1;
1695  case 5:
1696  return MISCREG_MPIDR_EL1;
1697  case 6:
1698  return MISCREG_REVIDR_EL1;
1699  }
1700  break;
1701  case 1:
1702  switch (op2) {
1703  case 0:
1704  return MISCREG_ID_PFR0_EL1;
1705  case 1:
1706  return MISCREG_ID_PFR1_EL1;
1707  case 2:
1708  return MISCREG_ID_DFR0_EL1;
1709  case 3:
1710  return MISCREG_ID_AFR0_EL1;
1711  case 4:
1712  return MISCREG_ID_MMFR0_EL1;
1713  case 5:
1714  return MISCREG_ID_MMFR1_EL1;
1715  case 6:
1716  return MISCREG_ID_MMFR2_EL1;
1717  case 7:
1718  return MISCREG_ID_MMFR3_EL1;
1719  }
1720  break;
1721  case 2:
1722  switch (op2) {
1723  case 0:
1724  return MISCREG_ID_ISAR0_EL1;
1725  case 1:
1726  return MISCREG_ID_ISAR1_EL1;
1727  case 2:
1728  return MISCREG_ID_ISAR2_EL1;
1729  case 3:
1730  return MISCREG_ID_ISAR3_EL1;
1731  case 4:
1732  return MISCREG_ID_ISAR4_EL1;
1733  case 5:
1734  return MISCREG_ID_ISAR5_EL1;
1735  }
1736  break;
1737  case 3:
1738  switch (op2) {
1739  case 0:
1740  return MISCREG_MVFR0_EL1;
1741  case 1:
1742  return MISCREG_MVFR1_EL1;
1743  case 2:
1744  return MISCREG_MVFR2_EL1;
1745  case 3 ... 7:
1746  return MISCREG_RAZ;
1747  }
1748  break;
1749  case 4:
1750  switch (op2) {
1751  case 0:
1752  return MISCREG_ID_AA64PFR0_EL1;
1753  case 1:
1754  return MISCREG_ID_AA64PFR1_EL1;
1755  case 2 ... 3:
1756  return MISCREG_RAZ;
1757  case 4:
1758  return MISCREG_ID_AA64ZFR0_EL1;
1759  case 5 ... 7:
1760  return MISCREG_RAZ;
1761  }
1762  break;
1763  case 5:
1764  switch (op2) {
1765  case 0:
1766  return MISCREG_ID_AA64DFR0_EL1;
1767  case 1:
1768  return MISCREG_ID_AA64DFR1_EL1;
1769  case 4:
1770  return MISCREG_ID_AA64AFR0_EL1;
1771  case 5:
1772  return MISCREG_ID_AA64AFR1_EL1;
1773  case 2:
1774  case 3:
1775  case 6:
1776  case 7:
1777  return MISCREG_RAZ;
1778  }
1779  break;
1780  case 6:
1781  switch (op2) {
1782  case 0:
1783  return MISCREG_ID_AA64ISAR0_EL1;
1784  case 1:
1785  return MISCREG_ID_AA64ISAR1_EL1;
1786  case 2 ... 7:
1787  return MISCREG_RAZ;
1788  }
1789  break;
1790  case 7:
1791  switch (op2) {
1792  case 0:
1793  return MISCREG_ID_AA64MMFR0_EL1;
1794  case 1:
1795  return MISCREG_ID_AA64MMFR1_EL1;
1796  case 2:
1797  return MISCREG_ID_AA64MMFR2_EL1;
1798  case 3 ... 7:
1799  return MISCREG_RAZ;
1800  }
1801  break;
1802  }
1803  break;
1804  case 1:
1805  switch (crm) {
1806  case 0:
1807  switch (op2) {
1808  case 0:
1809  return MISCREG_CCSIDR_EL1;
1810  case 1:
1811  return MISCREG_CLIDR_EL1;
1812  case 7:
1813  return MISCREG_AIDR_EL1;
1814  }
1815  break;
1816  }
1817  break;
1818  case 2:
1819  switch (crm) {
1820  case 0:
1821  switch (op2) {
1822  case 0:
1823  return MISCREG_CSSELR_EL1;
1824  }
1825  break;
1826  }
1827  break;
1828  case 3:
1829  switch (crm) {
1830  case 0:
1831  switch (op2) {
1832  case 1:
1833  return MISCREG_CTR_EL0;
1834  case 7:
1835  return MISCREG_DCZID_EL0;
1836  }
1837  break;
1838  }
1839  break;
1840  case 4:
1841  switch (crm) {
1842  case 0:
1843  switch (op2) {
1844  case 0:
1845  return MISCREG_VPIDR_EL2;
1846  case 5:
1847  return MISCREG_VMPIDR_EL2;
1848  }
1849  break;
1850  }
1851  break;
1852  }
1853  break;
1854  case 1:
1855  switch (op1) {
1856  case 0:
1857  switch (crm) {
1858  case 0:
1859  switch (op2) {
1860  case 0:
1861  return MISCREG_SCTLR_EL1;
1862  case 1:
1863  return MISCREG_ACTLR_EL1;
1864  case 2:
1865  return MISCREG_CPACR_EL1;
1866  }
1867  break;
1868  case 2:
1869  switch (op2) {
1870  case 0:
1871  return MISCREG_ZCR_EL1;
1872  }
1873  break;
1874  }
1875  break;
1876  case 4:
1877  switch (crm) {
1878  case 0:
1879  switch (op2) {
1880  case 0:
1881  return MISCREG_SCTLR_EL2;
1882  case 1:
1883  return MISCREG_ACTLR_EL2;
1884  }
1885  break;
1886  case 1:
1887  switch (op2) {
1888  case 0:
1889  return MISCREG_HCR_EL2;
1890  case 1:
1891  return MISCREG_MDCR_EL2;
1892  case 2:
1893  return MISCREG_CPTR_EL2;
1894  case 3:
1895  return MISCREG_HSTR_EL2;
1896  case 7:
1897  return MISCREG_HACR_EL2;
1898  }
1899  break;
1900  case 2:
1901  switch (op2) {
1902  case 0:
1903  return MISCREG_ZCR_EL2;
1904  }
1905  break;
1906  }
1907  break;
1908  case 5:
1909  switch (crm) {
1910  case 2:
1911  switch (op2) {
1912  case 0:
1913  return MISCREG_ZCR_EL12;
1914  }
1915  break;
1916  }
1917  break;
1918  case 6:
1919  switch (crm) {
1920  case 0:
1921  switch (op2) {
1922  case 0:
1923  return MISCREG_SCTLR_EL3;
1924  case 1:
1925  return MISCREG_ACTLR_EL3;
1926  }
1927  break;
1928  case 1:
1929  switch (op2) {
1930  case 0:
1931  return MISCREG_SCR_EL3;
1932  case 1:
1933  return MISCREG_SDER32_EL3;
1934  case 2:
1935  return MISCREG_CPTR_EL3;
1936  }
1937  break;
1938  case 2:
1939  switch (op2) {
1940  case 0:
1941  return MISCREG_ZCR_EL3;
1942  }
1943  break;
1944  case 3:
1945  switch (op2) {
1946  case 1:
1947  return MISCREG_MDCR_EL3;
1948  }
1949  break;
1950  }
1951  break;
1952  }
1953  break;
1954  case 2:
1955  switch (op1) {
1956  case 0:
1957  switch (crm) {
1958  case 0:
1959  switch (op2) {
1960  case 0:
1961  return MISCREG_TTBR0_EL1;
1962  case 1:
1963  return MISCREG_TTBR1_EL1;
1964  case 2:
1965  return MISCREG_TCR_EL1;
1966  }
1967  break;
1968  case 0x1:
1969  switch (op2) {
1970  case 0x0:
1971  return MISCREG_APIAKeyLo_EL1;
1972  case 0x1:
1973  return MISCREG_APIAKeyHi_EL1;
1974  case 0x2:
1975  return MISCREG_APIBKeyLo_EL1;
1976  case 0x3:
1977  return MISCREG_APIBKeyHi_EL1;
1978  }
1979  break;
1980  case 0x2:
1981  switch (op2) {
1982  case 0x0:
1983  return MISCREG_APDAKeyLo_EL1;
1984  case 0x1:
1985  return MISCREG_APDAKeyHi_EL1;
1986  case 0x2:
1987  return MISCREG_APDBKeyLo_EL1;
1988  case 0x3:
1989  return MISCREG_APDBKeyHi_EL1;
1990  }
1991  break;
1992 
1993  case 0x3:
1994  switch (op2) {
1995  case 0x0:
1996  return MISCREG_APGAKeyLo_EL1;
1997  case 0x1:
1998  return MISCREG_APGAKeyHi_EL1;
1999  }
2000  break;
2001  }
2002  break;
2003  case 4:
2004  switch (crm) {
2005  case 0:
2006  switch (op2) {
2007  case 0:
2008  return MISCREG_TTBR0_EL2;
2009  case 1:
2010  return MISCREG_TTBR1_EL2;
2011  case 2:
2012  return MISCREG_TCR_EL2;
2013  }
2014  break;
2015  case 1:
2016  switch (op2) {
2017  case 0:
2018  return MISCREG_VTTBR_EL2;
2019  case 2:
2020  return MISCREG_VTCR_EL2;
2021  }
2022  break;
2023  }
2024  break;
2025  case 6:
2026  switch (crm) {
2027  case 0:
2028  switch (op2) {
2029  case 0:
2030  return MISCREG_TTBR0_EL3;
2031  case 2:
2032  return MISCREG_TCR_EL3;
2033  }
2034  break;
2035  }
2036  break;
2037  }
2038  break;
2039  case 3:
2040  switch (op1) {
2041  case 4:
2042  switch (crm) {
2043  case 0:
2044  switch (op2) {
2045  case 0:
2046  return MISCREG_DACR32_EL2;
2047  }
2048  break;
2049  }
2050  break;
2051  }
2052  break;
2053  case 4:
2054  switch (op1) {
2055  case 0:
2056  switch (crm) {
2057  case 0:
2058  switch (op2) {
2059  case 0:
2060  return MISCREG_SPSR_EL1;
2061  case 1:
2062  return MISCREG_ELR_EL1;
2063  }
2064  break;
2065  case 1:
2066  switch (op2) {
2067  case 0:
2068  return MISCREG_SP_EL0;
2069  }
2070  break;
2071  case 2:
2072  switch (op2) {
2073  case 0:
2074  return MISCREG_SPSEL;
2075  case 2:
2076  return MISCREG_CURRENTEL;
2077  case 3:
2078  return MISCREG_PAN;
2079  }
2080  break;
2081  case 6:
2082  switch (op2) {
2083  case 0:
2084  return MISCREG_ICC_PMR_EL1;
2085  }
2086  break;
2087  }
2088  break;
2089  case 3:
2090  switch (crm) {
2091  case 2:
2092  switch (op2) {
2093  case 0:
2094  return MISCREG_NZCV;
2095  case 1:
2096  return MISCREG_DAIF;
2097  }
2098  break;
2099  case 4:
2100  switch (op2) {
2101  case 0:
2102  return MISCREG_FPCR;
2103  case 1:
2104  return MISCREG_FPSR;
2105  }
2106  break;
2107  case 5:
2108  switch (op2) {
2109  case 0:
2110  return MISCREG_DSPSR_EL0;
2111  case 1:
2112  return MISCREG_DLR_EL0;
2113  }
2114  break;
2115  }
2116  break;
2117  case 4:
2118  switch (crm) {
2119  case 0:
2120  switch (op2) {
2121  case 0:
2122  return MISCREG_SPSR_EL2;
2123  case 1:
2124  return MISCREG_ELR_EL2;
2125  }
2126  break;
2127  case 1:
2128  switch (op2) {
2129  case 0:
2130  return MISCREG_SP_EL1;
2131  }
2132  break;
2133  case 3:
2134  switch (op2) {
2135  case 0:
2136  return MISCREG_SPSR_IRQ_AA64;
2137  case 1:
2138  return MISCREG_SPSR_ABT_AA64;
2139  case 2:
2140  return MISCREG_SPSR_UND_AA64;
2141  case 3:
2142  return MISCREG_SPSR_FIQ_AA64;
2143  }
2144  break;
2145  }
2146  break;
2147  case 6:
2148  switch (crm) {
2149  case 0:
2150  switch (op2) {
2151  case 0:
2152  return MISCREG_SPSR_EL3;
2153  case 1:
2154  return MISCREG_ELR_EL3;
2155  }
2156  break;
2157  case 1:
2158  switch (op2) {
2159  case 0:
2160  return MISCREG_SP_EL2;
2161  }
2162  break;
2163  }
2164  break;
2165  }
2166  break;
2167  case 5:
2168  switch (op1) {
2169  case 0:
2170  switch (crm) {
2171  case 1:
2172  switch (op2) {
2173  case 0:
2174  return MISCREG_AFSR0_EL1;
2175  case 1:
2176  return MISCREG_AFSR1_EL1;
2177  }
2178  break;
2179  case 2:
2180  switch (op2) {
2181  case 0:
2182  return MISCREG_ESR_EL1;
2183  }
2184  break;
2185  case 3:
2186  switch (op2) {
2187  case 0:
2188  return MISCREG_ERRIDR_EL1;
2189  case 1:
2190  return MISCREG_ERRSELR_EL1;
2191  }
2192  break;
2193  case 4:
2194  switch (op2) {
2195  case 0:
2196  return MISCREG_ERXFR_EL1;
2197  case 1:
2198  return MISCREG_ERXCTLR_EL1;
2199  case 2:
2200  return MISCREG_ERXSTATUS_EL1;
2201  case 3:
2202  return MISCREG_ERXADDR_EL1;
2203  }
2204  break;
2205  case 5:
2206  switch (op2) {
2207  case 0:
2208  return MISCREG_ERXMISC0_EL1;
2209  case 1:
2210  return MISCREG_ERXMISC1_EL1;
2211  }
2212  break;
2213  }
2214  break;
2215  case 4:
2216  switch (crm) {
2217  case 0:
2218  switch (op2) {
2219  case 1:
2220  return MISCREG_IFSR32_EL2;
2221  }
2222  break;
2223  case 1:
2224  switch (op2) {
2225  case 0:
2226  return MISCREG_AFSR0_EL2;
2227  case 1:
2228  return MISCREG_AFSR1_EL2;
2229  }
2230  break;
2231  case 2:
2232  switch (op2) {
2233  case 0:
2234  return MISCREG_ESR_EL2;
2235  case 3:
2236  return MISCREG_VSESR_EL2;
2237  }
2238  break;
2239  case 3:
2240  switch (op2) {
2241  case 0:
2242  return MISCREG_FPEXC32_EL2;
2243  }
2244  break;
2245  }
2246  break;
2247  case 6:
2248  switch (crm) {
2249  case 1:
2250  switch (op2) {
2251  case 0:
2252  return MISCREG_AFSR0_EL3;
2253  case 1:
2254  return MISCREG_AFSR1_EL3;
2255  }
2256  break;
2257  case 2:
2258  switch (op2) {
2259  case 0:
2260  return MISCREG_ESR_EL3;
2261  }
2262  break;
2263  }
2264  break;
2265  }
2266  break;
2267  case 6:
2268  switch (op1) {
2269  case 0:
2270  switch (crm) {
2271  case 0:
2272  switch (op2) {
2273  case 0:
2274  return MISCREG_FAR_EL1;
2275  }
2276  break;
2277  }
2278  break;
2279  case 4:
2280  switch (crm) {
2281  case 0:
2282  switch (op2) {
2283  case 0:
2284  return MISCREG_FAR_EL2;
2285  case 4:
2286  return MISCREG_HPFAR_EL2;
2287  }
2288  break;
2289  }
2290  break;
2291  case 6:
2292  switch (crm) {
2293  case 0:
2294  switch (op2) {
2295  case 0:
2296  return MISCREG_FAR_EL3;
2297  }
2298  break;
2299  }
2300  break;
2301  }
2302  break;
2303  case 7:
2304  switch (op1) {
2305  case 0:
2306  switch (crm) {
2307  case 4:
2308  switch (op2) {
2309  case 0:
2310  return MISCREG_PAR_EL1;
2311  }
2312  break;
2313  }
2314  break;
2315  }
2316  break;
2317  case 9:
2318  switch (op1) {
2319  case 0:
2320  switch (crm) {
2321  case 14:
2322  switch (op2) {
2323  case 1:
2324  return MISCREG_PMINTENSET_EL1;
2325  case 2:
2326  return MISCREG_PMINTENCLR_EL1;
2327  }
2328  break;
2329  }
2330  break;
2331  case 3:
2332  switch (crm) {
2333  case 12:
2334  switch (op2) {
2335  case 0:
2336  return MISCREG_PMCR_EL0;
2337  case 1:
2338  return MISCREG_PMCNTENSET_EL0;
2339  case 2:
2340  return MISCREG_PMCNTENCLR_EL0;
2341  case 3:
2342  return MISCREG_PMOVSCLR_EL0;
2343  case 4:
2344  return MISCREG_PMSWINC_EL0;
2345  case 5:
2346  return MISCREG_PMSELR_EL0;
2347  case 6:
2348  return MISCREG_PMCEID0_EL0;
2349  case 7:
2350  return MISCREG_PMCEID1_EL0;
2351  }
2352  break;
2353  case 13:
2354  switch (op2) {
2355  case 0:
2356  return MISCREG_PMCCNTR_EL0;
2357  case 1:
2358  return MISCREG_PMXEVTYPER_EL0;
2359  case 2:
2360  return MISCREG_PMXEVCNTR_EL0;
2361  }
2362  break;
2363  case 14:
2364  switch (op2) {
2365  case 0:
2366  return MISCREG_PMUSERENR_EL0;
2367  case 3:
2368  return MISCREG_PMOVSSET_EL0;
2369  }
2370  break;
2371  }
2372  break;
2373  }
2374  break;
2375  case 10:
2376  switch (op1) {
2377  case 0:
2378  switch (crm) {
2379  case 2:
2380  switch (op2) {
2381  case 0:
2382  return MISCREG_MAIR_EL1;
2383  }
2384  break;
2385  case 3:
2386  switch (op2) {
2387  case 0:
2388  return MISCREG_AMAIR_EL1;
2389  }
2390  break;
2391  }
2392  break;
2393  case 4:
2394  switch (crm) {
2395  case 2:
2396  switch (op2) {
2397  case 0:
2398  return MISCREG_MAIR_EL2;
2399  }
2400  break;
2401  case 3:
2402  switch (op2) {
2403  case 0:
2404  return MISCREG_AMAIR_EL2;
2405  }
2406  break;
2407  }
2408  break;
2409  case 6:
2410  switch (crm) {
2411  case 2:
2412  switch (op2) {
2413  case 0:
2414  return MISCREG_MAIR_EL3;
2415  }
2416  break;
2417  case 3:
2418  switch (op2) {
2419  case 0:
2420  return MISCREG_AMAIR_EL3;
2421  }
2422  break;
2423  }
2424  break;
2425  }
2426  break;
2427  case 11:
2428  switch (op1) {
2429  case 1:
2430  switch (crm) {
2431  case 0:
2432  switch (op2) {
2433  case 2:
2434  return MISCREG_L2CTLR_EL1;
2435  case 3:
2436  return MISCREG_L2ECTLR_EL1;
2437  }
2438  break;
2439  }
2441  default:
2442  // S3_<op1>_11_<Cm>_<op2>
2443  return MISCREG_IMPDEF_UNIMPL;
2444  }
2445  M5_UNREACHABLE;
2446  case 12:
2447  switch (op1) {
2448  case 0:
2449  switch (crm) {
2450  case 0:
2451  switch (op2) {
2452  case 0:
2453  return MISCREG_VBAR_EL1;
2454  case 1:
2455  return MISCREG_RVBAR_EL1;
2456  }
2457  break;
2458  case 1:
2459  switch (op2) {
2460  case 0:
2461  return MISCREG_ISR_EL1;
2462  case 1:
2463  return MISCREG_DISR_EL1;
2464  }
2465  break;
2466  case 8:
2467  switch (op2) {
2468  case 0:
2469  return MISCREG_ICC_IAR0_EL1;
2470  case 1:
2471  return MISCREG_ICC_EOIR0_EL1;
2472  case 2:
2473  return MISCREG_ICC_HPPIR0_EL1;
2474  case 3:
2475  return MISCREG_ICC_BPR0_EL1;
2476  case 4:
2477  return MISCREG_ICC_AP0R0_EL1;
2478  case 5:
2479  return MISCREG_ICC_AP0R1_EL1;
2480  case 6:
2481  return MISCREG_ICC_AP0R2_EL1;
2482  case 7:
2483  return MISCREG_ICC_AP0R3_EL1;
2484  }
2485  break;
2486  case 9:
2487  switch (op2) {
2488  case 0:
2489  return MISCREG_ICC_AP1R0_EL1;
2490  case 1:
2491  return MISCREG_ICC_AP1R1_EL1;
2492  case 2:
2493  return MISCREG_ICC_AP1R2_EL1;
2494  case 3:
2495  return MISCREG_ICC_AP1R3_EL1;
2496  }
2497  break;
2498  case 11:
2499  switch (op2) {
2500  case 1:
2501  return MISCREG_ICC_DIR_EL1;
2502  case 3:
2503  return MISCREG_ICC_RPR_EL1;
2504  case 5:
2505  return MISCREG_ICC_SGI1R_EL1;
2506  case 6:
2507  return MISCREG_ICC_ASGI1R_EL1;
2508  case 7:
2509  return MISCREG_ICC_SGI0R_EL1;
2510  }
2511  break;
2512  case 12:
2513  switch (op2) {
2514  case 0:
2515  return MISCREG_ICC_IAR1_EL1;
2516  case 1:
2517  return MISCREG_ICC_EOIR1_EL1;
2518  case 2:
2519  return MISCREG_ICC_HPPIR1_EL1;
2520  case 3:
2521  return MISCREG_ICC_BPR1_EL1;
2522  case 4:
2523  return MISCREG_ICC_CTLR_EL1;
2524  case 5:
2525  return MISCREG_ICC_SRE_EL1;
2526  case 6:
2527  return MISCREG_ICC_IGRPEN0_EL1;
2528  case 7:
2529  return MISCREG_ICC_IGRPEN1_EL1;
2530  }
2531  break;
2532  }
2533  break;
2534  case 4:
2535  switch (crm) {
2536  case 0:
2537  switch (op2) {
2538  case 0:
2539  return MISCREG_VBAR_EL2;
2540  case 1:
2541  return MISCREG_RVBAR_EL2;
2542  }
2543  break;
2544  case 1:
2545  switch (op2) {
2546  case 1:
2547  return MISCREG_VDISR_EL2;
2548  }
2549  break;
2550  case 8:
2551  switch (op2) {
2552  case 0:
2553  return MISCREG_ICH_AP0R0_EL2;
2554  case 1:
2555  return MISCREG_ICH_AP0R1_EL2;
2556  case 2:
2557  return MISCREG_ICH_AP0R2_EL2;
2558  case 3:
2559  return MISCREG_ICH_AP0R3_EL2;
2560  }
2561  break;
2562  case 9:
2563  switch (op2) {
2564  case 0:
2565  return MISCREG_ICH_AP1R0_EL2;
2566  case 1:
2567  return MISCREG_ICH_AP1R1_EL2;
2568  case 2:
2569  return MISCREG_ICH_AP1R2_EL2;
2570  case 3:
2571  return MISCREG_ICH_AP1R3_EL2;
2572  case 5:
2573  return MISCREG_ICC_SRE_EL2;
2574  }
2575  break;
2576  case 11:
2577  switch (op2) {
2578  case 0:
2579  return MISCREG_ICH_HCR_EL2;
2580  case 1:
2581  return MISCREG_ICH_VTR_EL2;
2582  case 2:
2583  return MISCREG_ICH_MISR_EL2;
2584  case 3:
2585  return MISCREG_ICH_EISR_EL2;
2586  case 5:
2587  return MISCREG_ICH_ELRSR_EL2;
2588  case 7:
2589  return MISCREG_ICH_VMCR_EL2;
2590  }
2591  break;
2592  case 12:
2593  switch (op2) {
2594  case 0:
2595  return MISCREG_ICH_LR0_EL2;
2596  case 1:
2597  return MISCREG_ICH_LR1_EL2;
2598  case 2:
2599  return MISCREG_ICH_LR2_EL2;
2600  case 3:
2601  return MISCREG_ICH_LR3_EL2;
2602  case 4:
2603  return MISCREG_ICH_LR4_EL2;
2604  case 5:
2605  return MISCREG_ICH_LR5_EL2;
2606  case 6:
2607  return MISCREG_ICH_LR6_EL2;
2608  case 7:
2609  return MISCREG_ICH_LR7_EL2;
2610  }
2611  break;
2612  case 13:
2613  switch (op2) {
2614  case 0:
2615  return MISCREG_ICH_LR8_EL2;
2616  case 1:
2617  return MISCREG_ICH_LR9_EL2;
2618  case 2:
2619  return MISCREG_ICH_LR10_EL2;
2620  case 3:
2621  return MISCREG_ICH_LR11_EL2;
2622  case 4:
2623  return MISCREG_ICH_LR12_EL2;
2624  case 5:
2625  return MISCREG_ICH_LR13_EL2;
2626  case 6:
2627  return MISCREG_ICH_LR14_EL2;
2628  case 7:
2629  return MISCREG_ICH_LR15_EL2;
2630  }
2631  break;
2632  }
2633  break;
2634  case 6:
2635  switch (crm) {
2636  case 0:
2637  switch (op2) {
2638  case 0:
2639  return MISCREG_VBAR_EL3;
2640  case 1:
2641  return MISCREG_RVBAR_EL3;
2642  case 2:
2643  return MISCREG_RMR_EL3;
2644  }
2645  break;
2646  case 12:
2647  switch (op2) {
2648  case 4:
2649  return MISCREG_ICC_CTLR_EL3;
2650  case 5:
2651  return MISCREG_ICC_SRE_EL3;
2652  case 7:
2653  return MISCREG_ICC_IGRPEN1_EL3;
2654  }
2655  break;
2656  }
2657  break;
2658  }
2659  break;
2660  case 13:
2661  switch (op1) {
2662  case 0:
2663  switch (crm) {
2664  case 0:
2665  switch (op2) {
2666  case 1:
2667  return MISCREG_CONTEXTIDR_EL1;
2668  case 4:
2669  return MISCREG_TPIDR_EL1;
2670  }
2671  break;
2672  }
2673  break;
2674  case 3:
2675  switch (crm) {
2676  case 0:
2677  switch (op2) {
2678  case 2:
2679  return MISCREG_TPIDR_EL0;
2680  case 3:
2681  return MISCREG_TPIDRRO_EL0;
2682  }
2683  break;
2684  }
2685  break;
2686  case 4:
2687  switch (crm) {
2688  case 0:
2689  switch (op2) {
2690  case 1:
2691  return MISCREG_CONTEXTIDR_EL2;
2692  case 2:
2693  return MISCREG_TPIDR_EL2;
2694  }
2695  break;
2696  }
2697  break;
2698  case 6:
2699  switch (crm) {
2700  case 0:
2701  switch (op2) {
2702  case 2:
2703  return MISCREG_TPIDR_EL3;
2704  }
2705  break;
2706  }
2707  break;
2708  }
2709  break;
2710  case 14:
2711  switch (op1) {
2712  case 0:
2713  switch (crm) {
2714  case 1:
2715  switch (op2) {
2716  case 0:
2717  return MISCREG_CNTKCTL_EL1;
2718  }
2719  break;
2720  }
2721  break;
2722  case 3:
2723  switch (crm) {
2724  case 0:
2725  switch (op2) {
2726  case 0:
2727  return MISCREG_CNTFRQ_EL0;
2728  case 1:
2729  return MISCREG_CNTPCT_EL0;
2730  case 2:
2731  return MISCREG_CNTVCT_EL0;
2732  }
2733  break;
2734  case 2:
2735  switch (op2) {
2736  case 0:
2737  return MISCREG_CNTP_TVAL_EL0;
2738  case 1:
2739  return MISCREG_CNTP_CTL_EL0;
2740  case 2:
2741  return MISCREG_CNTP_CVAL_EL0;
2742  }
2743  break;
2744  case 3:
2745  switch (op2) {
2746  case 0:
2747  return MISCREG_CNTV_TVAL_EL0;
2748  case 1:
2749  return MISCREG_CNTV_CTL_EL0;
2750  case 2:
2751  return MISCREG_CNTV_CVAL_EL0;
2752  }
2753  break;
2754  case 8:
2755  switch (op2) {
2756  case 0:
2757  return MISCREG_PMEVCNTR0_EL0;
2758  case 1:
2759  return MISCREG_PMEVCNTR1_EL0;
2760  case 2:
2761  return MISCREG_PMEVCNTR2_EL0;
2762  case 3:
2763  return MISCREG_PMEVCNTR3_EL0;
2764  case 4:
2765  return MISCREG_PMEVCNTR4_EL0;
2766  case 5:
2767  return MISCREG_PMEVCNTR5_EL0;
2768  }
2769  break;
2770  case 12:
2771  switch (op2) {
2772  case 0:
2773  return MISCREG_PMEVTYPER0_EL0;
2774  case 1:
2775  return MISCREG_PMEVTYPER1_EL0;
2776  case 2:
2777  return MISCREG_PMEVTYPER2_EL0;
2778  case 3:
2779  return MISCREG_PMEVTYPER3_EL0;
2780  case 4:
2781  return MISCREG_PMEVTYPER4_EL0;
2782  case 5:
2783  return MISCREG_PMEVTYPER5_EL0;
2784  }
2785  break;
2786  case 15:
2787  switch (op2) {
2788  case 7:
2789  return MISCREG_PMCCFILTR_EL0;
2790  }
2791  }
2792  break;
2793  case 4:
2794  switch (crm) {
2795  case 0:
2796  switch (op2) {
2797  case 3:
2798  return MISCREG_CNTVOFF_EL2;
2799  }
2800  break;
2801  case 1:
2802  switch (op2) {
2803  case 0:
2804  return MISCREG_CNTHCTL_EL2;
2805  }
2806  break;
2807  case 2:
2808  switch (op2) {
2809  case 0:
2810  return MISCREG_CNTHP_TVAL_EL2;
2811  case 1:
2812  return MISCREG_CNTHP_CTL_EL2;
2813  case 2:
2814  return MISCREG_CNTHP_CVAL_EL2;
2815  }
2816  break;
2817  case 3:
2818  switch (op2) {
2819  case 0:
2820  return MISCREG_CNTHV_TVAL_EL2;
2821  case 1:
2822  return MISCREG_CNTHV_CTL_EL2;
2823  case 2:
2824  return MISCREG_CNTHV_CVAL_EL2;
2825  }
2826  break;
2827  }
2828  break;
2829  case 5:
2830  switch (crm) {
2831  case 1:
2832  switch (op2) {
2833  case 0:
2834  return MISCREG_CNTKCTL_EL12;
2835  }
2836  break;
2837  case 2:
2838  switch (op2) {
2839  case 0:
2840  return MISCREG_CNTP_TVAL_EL02;
2841  case 1:
2842  return MISCREG_CNTP_CTL_EL02;
2843  case 2:
2844  return MISCREG_CNTP_CVAL_EL02;
2845  }
2846  break;
2847  case 3:
2848  switch (op2) {
2849  case 0:
2850  return MISCREG_CNTV_TVAL_EL02;
2851  case 1:
2852  return MISCREG_CNTV_CTL_EL02;
2853  case 2:
2854  return MISCREG_CNTV_CVAL_EL02;
2855  }
2856  break;
2857  }
2858  break;
2859  case 7:
2860  switch (crm) {
2861  case 2:
2862  switch (op2) {
2863  case 0:
2864  return MISCREG_CNTPS_TVAL_EL1;
2865  case 1:
2866  return MISCREG_CNTPS_CTL_EL1;
2867  case 2:
2868  return MISCREG_CNTPS_CVAL_EL1;
2869  }
2870  break;
2871  }
2872  break;
2873  }
2874  break;
2875  case 15:
2876  switch (op1) {
2877  case 0:
2878  switch (crm) {
2879  case 0:
2880  switch (op2) {
2881  case 0:
2882  return MISCREG_IL1DATA0_EL1;
2883  case 1:
2884  return MISCREG_IL1DATA1_EL1;
2885  case 2:
2886  return MISCREG_IL1DATA2_EL1;
2887  case 3:
2888  return MISCREG_IL1DATA3_EL1;
2889  }
2890  break;
2891  case 1:
2892  switch (op2) {
2893  case 0:
2894  return MISCREG_DL1DATA0_EL1;
2895  case 1:
2896  return MISCREG_DL1DATA1_EL1;
2897  case 2:
2898  return MISCREG_DL1DATA2_EL1;
2899  case 3:
2900  return MISCREG_DL1DATA3_EL1;
2901  case 4:
2902  return MISCREG_DL1DATA4_EL1;
2903  }
2904  break;
2905  }
2906  break;
2907  case 1:
2908  switch (crm) {
2909  case 0:
2910  switch (op2) {
2911  case 0:
2912  return MISCREG_L2ACTLR_EL1;
2913  }
2914  break;
2915  case 2:
2916  switch (op2) {
2917  case 0:
2918  return MISCREG_CPUACTLR_EL1;
2919  case 1:
2920  return MISCREG_CPUECTLR_EL1;
2921  case 2:
2922  return MISCREG_CPUMERRSR_EL1;
2923  case 3:
2924  return MISCREG_L2MERRSR_EL1;
2925  }
2926  break;
2927  case 3:
2928  switch (op2) {
2929  case 0:
2930  return MISCREG_CBAR_EL1;
2931 
2932  }
2933  break;
2934  }
2935  break;
2936  }
2937  // S3_<op1>_15_<Cm>_<op2>
2938  return MISCREG_IMPDEF_UNIMPL;
2939  }
2940  break;
2941  }
2942 
2943  return MISCREG_UNKNOWN;
2944 }
2945 
2946 bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS]; // initialized below
2947 
2948 void
2950 {
2951  // the MiscReg metadata tables are shared across all instances of the
2952  // ISA object, so there's no need to initialize them multiple times.
2953  static bool completed = false;
2954  if (completed)
2955  return;
2956 
2957  // This boolean variable specifies if the system is running in aarch32 at
2958  // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
2959  // is running in aarch64 (aarch32EL3 = false)
2960  bool aarch32EL3 = haveSecurity && !highestELIs64;
2961 
2962  // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
2963  // unsupported
2964  bool SPAN = false;
2965 
2966  // Implicit error synchronization event enable (Arm 8.2+), unsupported
2967  bool IESB = false;
2968 
2969  // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
2970  // unsupported
2971  bool LSMAOE = false;
2972 
2973  // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
2974  bool nTLSMD = false;
2975 
2976  // Pointer authentication (Arm 8.3+), unsupported
2977  bool EnDA = true; // using APDAKey_EL1 key of instr addrs in ELs 0,1
2978  bool EnDB = true; // using APDBKey_EL1 key of instr addrs in ELs 0,1
2979  bool EnIA = true; // using APIAKey_EL1 key of instr addrs in ELs 0,1
2980  bool EnIB = true; // using APIBKey_EL1 key of instr addrs in ELs 0,1
2981 
2995  InitReg(MISCREG_CPSR)
2996  .allPrivileges();
2997  InitReg(MISCREG_SPSR)
2998  .allPrivileges();
2999  InitReg(MISCREG_SPSR_FIQ)
3000  .allPrivileges();
3001  InitReg(MISCREG_SPSR_IRQ)
3002  .allPrivileges();
3003  InitReg(MISCREG_SPSR_SVC)
3004  .allPrivileges();
3005  InitReg(MISCREG_SPSR_MON)
3006  .allPrivileges();
3007  InitReg(MISCREG_SPSR_ABT)
3008  .allPrivileges();
3009  InitReg(MISCREG_SPSR_HYP)
3010  .allPrivileges();
3011  InitReg(MISCREG_SPSR_UND)
3012  .allPrivileges();
3013  InitReg(MISCREG_ELR_HYP)
3014  .allPrivileges();
3015  InitReg(MISCREG_FPSID)
3016  .allPrivileges();
3017  InitReg(MISCREG_FPSCR)
3018  .allPrivileges();
3019  InitReg(MISCREG_MVFR1)
3020  .allPrivileges();
3021  InitReg(MISCREG_MVFR0)
3022  .allPrivileges();
3023  InitReg(MISCREG_FPEXC)
3024  .allPrivileges();
3025 
3026  // Helper registers
3027  InitReg(MISCREG_CPSR_MODE)
3028  .allPrivileges();
3029  InitReg(MISCREG_CPSR_Q)
3030  .allPrivileges();
3031  InitReg(MISCREG_FPSCR_EXC)
3032  .allPrivileges();
3033  InitReg(MISCREG_FPSCR_QC)
3034  .allPrivileges();
3035  InitReg(MISCREG_LOCKADDR)
3036  .allPrivileges();
3037  InitReg(MISCREG_LOCKFLAG)
3038  .allPrivileges();
3039  InitReg(MISCREG_PRRR_MAIR0)
3040  .mutex()
3041  .banked();
3042  InitReg(MISCREG_PRRR_MAIR0_NS)
3043  .mutex()
3044  .privSecure(!aarch32EL3)
3045  .bankedChild();
3046  InitReg(MISCREG_PRRR_MAIR0_S)
3047  .mutex()
3048  .bankedChild();
3049  InitReg(MISCREG_NMRR_MAIR1)
3050  .mutex()
3051  .banked();
3052  InitReg(MISCREG_NMRR_MAIR1_NS)
3053  .mutex()
3054  .privSecure(!aarch32EL3)
3055  .bankedChild();
3056  InitReg(MISCREG_NMRR_MAIR1_S)
3057  .mutex()
3058  .bankedChild();
3060  .mutex();
3061  InitReg(MISCREG_SCTLR_RST)
3062  .allPrivileges();
3063  InitReg(MISCREG_SEV_MAILBOX)
3064  .allPrivileges();
3065 
3066  // AArch32 CP14 registers
3067  InitReg(MISCREG_DBGDIDR)
3068  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3069  InitReg(MISCREG_DBGDSCRint)
3070  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3071  InitReg(MISCREG_DBGDCCINT)
3072  .unimplemented()
3073  .allPrivileges();
3074  InitReg(MISCREG_DBGDTRTXint)
3075  .unimplemented()
3076  .allPrivileges();
3077  InitReg(MISCREG_DBGDTRRXint)
3078  .unimplemented()
3079  .allPrivileges();
3080  InitReg(MISCREG_DBGWFAR)
3081  .unimplemented()
3082  .allPrivileges();
3083  InitReg(MISCREG_DBGVCR)
3084  .unimplemented()
3085  .allPrivileges();
3086  InitReg(MISCREG_DBGDTRRXext)
3087  .unimplemented()
3088  .allPrivileges();
3089  InitReg(MISCREG_DBGDSCRext)
3090  .unimplemented()
3091  .warnNotFail()
3092  .allPrivileges();
3093  InitReg(MISCREG_DBGDTRTXext)
3094  .unimplemented()
3095  .allPrivileges();
3096  InitReg(MISCREG_DBGOSECCR)
3097  .unimplemented()
3098  .allPrivileges();
3099  InitReg(MISCREG_DBGBVR0)
3100  .unimplemented()
3101  .allPrivileges();
3102  InitReg(MISCREG_DBGBVR1)
3103  .unimplemented()
3104  .allPrivileges();
3105  InitReg(MISCREG_DBGBVR2)
3106  .unimplemented()
3107  .allPrivileges();
3108  InitReg(MISCREG_DBGBVR3)
3109  .unimplemented()
3110  .allPrivileges();
3111  InitReg(MISCREG_DBGBVR4)
3112  .unimplemented()
3113  .allPrivileges();
3114  InitReg(MISCREG_DBGBVR5)
3115  .unimplemented()
3116  .allPrivileges();
3117  InitReg(MISCREG_DBGBCR0)
3118  .unimplemented()
3119  .allPrivileges();
3120  InitReg(MISCREG_DBGBCR1)
3121  .unimplemented()
3122  .allPrivileges();
3123  InitReg(MISCREG_DBGBCR2)
3124  .unimplemented()
3125  .allPrivileges();
3126  InitReg(MISCREG_DBGBCR3)
3127  .unimplemented()
3128  .allPrivileges();
3129  InitReg(MISCREG_DBGBCR4)
3130  .unimplemented()
3131  .allPrivileges();
3132  InitReg(MISCREG_DBGBCR5)
3133  .unimplemented()
3134  .allPrivileges();
3135  InitReg(MISCREG_DBGWVR0)
3136  .unimplemented()
3137  .allPrivileges();
3138  InitReg(MISCREG_DBGWVR1)
3139  .unimplemented()
3140  .allPrivileges();
3141  InitReg(MISCREG_DBGWVR2)
3142  .unimplemented()
3143  .allPrivileges();
3144  InitReg(MISCREG_DBGWVR3)
3145  .unimplemented()
3146  .allPrivileges();
3147  InitReg(MISCREG_DBGWCR0)
3148  .unimplemented()
3149  .allPrivileges();
3150  InitReg(MISCREG_DBGWCR1)
3151  .unimplemented()
3152  .allPrivileges();
3153  InitReg(MISCREG_DBGWCR2)
3154  .unimplemented()
3155  .allPrivileges();
3156  InitReg(MISCREG_DBGWCR3)
3157  .unimplemented()
3158  .allPrivileges();
3159  InitReg(MISCREG_DBGDRAR)
3160  .unimplemented()
3161  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3162  InitReg(MISCREG_DBGBXVR4)
3163  .unimplemented()
3164  .allPrivileges();
3165  InitReg(MISCREG_DBGBXVR5)
3166  .unimplemented()
3167  .allPrivileges();
3168  InitReg(MISCREG_DBGOSLAR)
3169  .unimplemented()
3170  .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3171  InitReg(MISCREG_DBGOSLSR)
3172  .unimplemented()
3173  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3174  InitReg(MISCREG_DBGOSDLR)
3175  .unimplemented()
3176  .allPrivileges();
3177  InitReg(MISCREG_DBGPRCR)
3178  .unimplemented()
3179  .allPrivileges();
3180  InitReg(MISCREG_DBGDSAR)
3181  .unimplemented()
3182  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3183  InitReg(MISCREG_DBGCLAIMSET)
3184  .unimplemented()
3185  .allPrivileges();
3186  InitReg(MISCREG_DBGCLAIMCLR)
3187  .unimplemented()
3188  .allPrivileges();
3189  InitReg(MISCREG_DBGAUTHSTATUS)
3190  .unimplemented()
3191  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3192  InitReg(MISCREG_DBGDEVID2)
3193  .unimplemented()
3194  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3195  InitReg(MISCREG_DBGDEVID1)
3196  .unimplemented()
3197  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3198  InitReg(MISCREG_DBGDEVID0)
3199  .unimplemented()
3200  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3201  InitReg(MISCREG_TEECR)
3202  .unimplemented()
3203  .allPrivileges();
3204  InitReg(MISCREG_JIDR)
3205  .allPrivileges();
3206  InitReg(MISCREG_TEEHBR)
3207  .allPrivileges();
3208  InitReg(MISCREG_JOSCR)
3209  .allPrivileges();
3210  InitReg(MISCREG_JMCR)
3211  .allPrivileges();
3212 
3213  // AArch32 CP15 registers
3214  InitReg(MISCREG_MIDR)
3215  .allPrivileges().exceptUserMode().writes(0);
3216  InitReg(MISCREG_CTR)
3217  .allPrivileges().exceptUserMode().writes(0);
3218  InitReg(MISCREG_TCMTR)
3219  .allPrivileges().exceptUserMode().writes(0);
3220  InitReg(MISCREG_TLBTR)
3221  .allPrivileges().exceptUserMode().writes(0);
3222  InitReg(MISCREG_MPIDR)
3223  .allPrivileges().exceptUserMode().writes(0);
3224  InitReg(MISCREG_REVIDR)
3225  .unimplemented()
3226  .warnNotFail()
3227  .allPrivileges().exceptUserMode().writes(0);
3228  InitReg(MISCREG_ID_PFR0)
3229  .allPrivileges().exceptUserMode().writes(0);
3230  InitReg(MISCREG_ID_PFR1)
3231  .allPrivileges().exceptUserMode().writes(0);
3232  InitReg(MISCREG_ID_DFR0)
3233  .allPrivileges().exceptUserMode().writes(0);
3234  InitReg(MISCREG_ID_AFR0)
3235  .allPrivileges().exceptUserMode().writes(0);
3236  InitReg(MISCREG_ID_MMFR0)
3237  .allPrivileges().exceptUserMode().writes(0);
3238  InitReg(MISCREG_ID_MMFR1)
3239  .allPrivileges().exceptUserMode().writes(0);
3240  InitReg(MISCREG_ID_MMFR2)
3241  .allPrivileges().exceptUserMode().writes(0);
3242  InitReg(MISCREG_ID_MMFR3)
3243  .allPrivileges().exceptUserMode().writes(0);
3244  InitReg(MISCREG_ID_ISAR0)
3245  .allPrivileges().exceptUserMode().writes(0);
3246  InitReg(MISCREG_ID_ISAR1)
3247  .allPrivileges().exceptUserMode().writes(0);
3248  InitReg(MISCREG_ID_ISAR2)
3249  .allPrivileges().exceptUserMode().writes(0);
3250  InitReg(MISCREG_ID_ISAR3)
3251  .allPrivileges().exceptUserMode().writes(0);
3252  InitReg(MISCREG_ID_ISAR4)
3253  .allPrivileges().exceptUserMode().writes(0);
3254  InitReg(MISCREG_ID_ISAR5)
3255  .allPrivileges().exceptUserMode().writes(0);
3256  InitReg(MISCREG_CCSIDR)
3257  .allPrivileges().exceptUserMode().writes(0);
3258  InitReg(MISCREG_CLIDR)
3259  .allPrivileges().exceptUserMode().writes(0);
3260  InitReg(MISCREG_AIDR)
3261  .allPrivileges().exceptUserMode().writes(0);
3262  InitReg(MISCREG_CSSELR)
3263  .banked();
3264  InitReg(MISCREG_CSSELR_NS)
3265  .bankedChild()
3266  .privSecure(!aarch32EL3)
3267  .nonSecure().exceptUserMode();
3268  InitReg(MISCREG_CSSELR_S)
3269  .bankedChild()
3270  .secure().exceptUserMode();
3271  InitReg(MISCREG_VPIDR)
3272  .hyp().monNonSecure();
3273  InitReg(MISCREG_VMPIDR)
3274  .hyp().monNonSecure();
3275  InitReg(MISCREG_SCTLR)
3276  .banked()
3277  // readMiscRegNoEffect() uses this metadata
3278  // despite using children (below) as backing store
3279  .res0(0x8d22c600)
3280  .res1(0x00400800 | (SPAN ? 0 : 0x800000)
3281  | (LSMAOE ? 0 : 0x10)
3282  | (nTLSMD ? 0 : 0x8));
3283  InitReg(MISCREG_SCTLR_NS)
3284  .bankedChild()
3285  .privSecure(!aarch32EL3)
3286  .nonSecure().exceptUserMode();
3287  InitReg(MISCREG_SCTLR_S)
3288  .bankedChild()
3289  .secure().exceptUserMode();
3290  InitReg(MISCREG_ACTLR)
3291  .banked();
3292  InitReg(MISCREG_ACTLR_NS)
3293  .bankedChild()
3294  .privSecure(!aarch32EL3)
3295  .nonSecure().exceptUserMode();
3296  InitReg(MISCREG_ACTLR_S)
3297  .bankedChild()
3298  .secure().exceptUserMode();
3299  InitReg(MISCREG_CPACR)
3300  .allPrivileges().exceptUserMode();
3301  InitReg(MISCREG_SCR)
3302  .mon().secure().exceptUserMode()
3303  .res0(0xff40) // [31:16], [6]
3304  .res1(0x0030); // [5:4]
3305  InitReg(MISCREG_SDER)
3306  .mon();
3307  InitReg(MISCREG_NSACR)
3308  .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3309  InitReg(MISCREG_HSCTLR)
3310  .hyp().monNonSecure()
3311  .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3312  | (IESB ? 0 : 0x200000)
3313  | (EnDA ? 0 : 0x8000000)
3314  | (EnIB ? 0 : 0x40000000)
3315  | (EnIA ? 0 : 0x80000000))
3316  .res1(0x30c50830);
3317  InitReg(MISCREG_HACTLR)
3318  .hyp().monNonSecure();
3319  InitReg(MISCREG_HCR)
3320  .hyp().monNonSecure()
3321  .res0(0x90000000);
3322  InitReg(MISCREG_HCR2)
3323  .hyp().monNonSecure()
3324  .res0(0xffa9ff8c);
3325  InitReg(MISCREG_HDCR)
3326  .hyp().monNonSecure();
3327  InitReg(MISCREG_HCPTR)
3328  .hyp().monNonSecure();
3329  InitReg(MISCREG_HSTR)
3330  .hyp().monNonSecure();
3331  InitReg(MISCREG_HACR)
3332  .unimplemented()
3333  .warnNotFail()
3334  .hyp().monNonSecure();
3335  InitReg(MISCREG_TTBR0)
3336  .banked();
3337  InitReg(MISCREG_TTBR0_NS)
3338  .bankedChild()
3339  .privSecure(!aarch32EL3)
3340  .nonSecure().exceptUserMode();
3341  InitReg(MISCREG_TTBR0_S)
3342  .bankedChild()
3343  .secure().exceptUserMode();
3344  InitReg(MISCREG_TTBR1)
3345  .banked();
3346  InitReg(MISCREG_TTBR1_NS)
3347  .bankedChild()
3348  .privSecure(!aarch32EL3)
3349  .nonSecure().exceptUserMode();
3350  InitReg(MISCREG_TTBR1_S)
3351  .bankedChild()
3352  .secure().exceptUserMode();
3353  InitReg(MISCREG_TTBCR)
3354  .banked();
3355  InitReg(MISCREG_TTBCR_NS)
3356  .bankedChild()
3357  .privSecure(!aarch32EL3)
3358  .nonSecure().exceptUserMode();
3359  InitReg(MISCREG_TTBCR_S)
3360  .bankedChild()
3361  .secure().exceptUserMode();
3362  InitReg(MISCREG_HTCR)
3363  .hyp().monNonSecure();
3364  InitReg(MISCREG_VTCR)
3365  .hyp().monNonSecure();
3366  InitReg(MISCREG_DACR)
3367  .banked();
3368  InitReg(MISCREG_DACR_NS)
3369  .bankedChild()
3370  .privSecure(!aarch32EL3)
3371  .nonSecure().exceptUserMode();
3372  InitReg(MISCREG_DACR_S)
3373  .bankedChild()
3374  .secure().exceptUserMode();
3375  InitReg(MISCREG_DFSR)
3376  .banked();
3377  InitReg(MISCREG_DFSR_NS)
3378  .bankedChild()
3379  .privSecure(!aarch32EL3)
3380  .nonSecure().exceptUserMode();
3381  InitReg(MISCREG_DFSR_S)
3382  .bankedChild()
3383  .secure().exceptUserMode();
3384  InitReg(MISCREG_IFSR)
3385  .banked();
3386  InitReg(MISCREG_IFSR_NS)
3387  .bankedChild()
3388  .privSecure(!aarch32EL3)
3389  .nonSecure().exceptUserMode();
3390  InitReg(MISCREG_IFSR_S)
3391  .bankedChild()
3392  .secure().exceptUserMode();
3393  InitReg(MISCREG_ADFSR)
3394  .unimplemented()
3395  .warnNotFail()
3396  .banked();
3397  InitReg(MISCREG_ADFSR_NS)
3398  .unimplemented()
3399  .warnNotFail()
3400  .bankedChild()
3401  .privSecure(!aarch32EL3)
3402  .nonSecure().exceptUserMode();
3403  InitReg(MISCREG_ADFSR_S)
3404  .unimplemented()
3405  .warnNotFail()
3406  .bankedChild()
3407  .secure().exceptUserMode();
3408  InitReg(MISCREG_AIFSR)
3409  .unimplemented()
3410  .warnNotFail()
3411  .banked();
3412  InitReg(MISCREG_AIFSR_NS)
3413  .unimplemented()
3414  .warnNotFail()
3415  .bankedChild()
3416  .privSecure(!aarch32EL3)
3417  .nonSecure().exceptUserMode();
3418  InitReg(MISCREG_AIFSR_S)
3419  .unimplemented()
3420  .warnNotFail()
3421  .bankedChild()
3422  .secure().exceptUserMode();
3423  InitReg(MISCREG_HADFSR)
3424  .hyp().monNonSecure();
3425  InitReg(MISCREG_HAIFSR)
3426  .hyp().monNonSecure();
3427  InitReg(MISCREG_HSR)
3428  .hyp().monNonSecure();
3429  InitReg(MISCREG_DFAR)
3430  .banked();
3431  InitReg(MISCREG_DFAR_NS)
3432  .bankedChild()
3433  .privSecure(!aarch32EL3)
3434  .nonSecure().exceptUserMode();
3435  InitReg(MISCREG_DFAR_S)
3436  .bankedChild()
3437  .secure().exceptUserMode();
3438  InitReg(MISCREG_IFAR)
3439  .banked();
3440  InitReg(MISCREG_IFAR_NS)
3441  .bankedChild()
3442  .privSecure(!aarch32EL3)
3443  .nonSecure().exceptUserMode();
3444  InitReg(MISCREG_IFAR_S)
3445  .bankedChild()
3446  .secure().exceptUserMode();
3447  InitReg(MISCREG_HDFAR)
3448  .hyp().monNonSecure();
3449  InitReg(MISCREG_HIFAR)
3450  .hyp().monNonSecure();
3451  InitReg(MISCREG_HPFAR)
3452  .hyp().monNonSecure();
3453  InitReg(MISCREG_ICIALLUIS)
3454  .unimplemented()
3455  .warnNotFail()
3456  .writes(1).exceptUserMode();
3457  InitReg(MISCREG_BPIALLIS)
3458  .unimplemented()
3459  .warnNotFail()
3460  .writes(1).exceptUserMode();
3461  InitReg(MISCREG_PAR)
3462  .banked();
3463  InitReg(MISCREG_PAR_NS)
3464  .bankedChild()
3465  .privSecure(!aarch32EL3)
3466  .nonSecure().exceptUserMode();
3467  InitReg(MISCREG_PAR_S)
3468  .bankedChild()
3469  .secure().exceptUserMode();
3470  InitReg(MISCREG_ICIALLU)
3471  .writes(1).exceptUserMode();
3472  InitReg(MISCREG_ICIMVAU)
3473  .unimplemented()
3474  .warnNotFail()
3475  .writes(1).exceptUserMode();
3476  InitReg(MISCREG_CP15ISB)
3477  .writes(1);
3478  InitReg(MISCREG_BPIALL)
3479  .unimplemented()
3480  .warnNotFail()
3481  .writes(1).exceptUserMode();
3482  InitReg(MISCREG_BPIMVA)
3483  .unimplemented()
3484  .warnNotFail()
3485  .writes(1).exceptUserMode();
3486  InitReg(MISCREG_DCIMVAC)
3487  .unimplemented()
3488  .warnNotFail()
3489  .writes(1).exceptUserMode();
3490  InitReg(MISCREG_DCISW)
3491  .unimplemented()
3492  .warnNotFail()
3493  .writes(1).exceptUserMode();
3494  InitReg(MISCREG_ATS1CPR)
3495  .writes(1).exceptUserMode();
3496  InitReg(MISCREG_ATS1CPW)
3497  .writes(1).exceptUserMode();
3498  InitReg(MISCREG_ATS1CUR)
3499  .writes(1).exceptUserMode();
3500  InitReg(MISCREG_ATS1CUW)
3501  .writes(1).exceptUserMode();
3502  InitReg(MISCREG_ATS12NSOPR)
3503  .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3504  InitReg(MISCREG_ATS12NSOPW)
3505  .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3506  InitReg(MISCREG_ATS12NSOUR)
3507  .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3508  InitReg(MISCREG_ATS12NSOUW)
3509  .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3510  InitReg(MISCREG_DCCMVAC)
3511  .writes(1).exceptUserMode();
3512  InitReg(MISCREG_DCCSW)
3513  .unimplemented()
3514  .warnNotFail()
3515  .writes(1).exceptUserMode();
3516  InitReg(MISCREG_CP15DSB)
3517  .writes(1);
3518  InitReg(MISCREG_CP15DMB)
3519  .writes(1);
3520  InitReg(MISCREG_DCCMVAU)
3521  .unimplemented()
3522  .warnNotFail()
3523  .writes(1).exceptUserMode();
3524  InitReg(MISCREG_DCCIMVAC)
3525  .unimplemented()
3526  .warnNotFail()
3527  .writes(1).exceptUserMode();
3528  InitReg(MISCREG_DCCISW)
3529  .unimplemented()
3530  .warnNotFail()
3531  .writes(1).exceptUserMode();
3532  InitReg(MISCREG_ATS1HR)
3533  .monNonSecureWrite().hypWrite();
3534  InitReg(MISCREG_ATS1HW)
3535  .monNonSecureWrite().hypWrite();
3536  InitReg(MISCREG_TLBIALLIS)
3537  .writes(1).exceptUserMode();
3538  InitReg(MISCREG_TLBIMVAIS)
3539  .writes(1).exceptUserMode();
3540  InitReg(MISCREG_TLBIASIDIS)
3541  .writes(1).exceptUserMode();
3542  InitReg(MISCREG_TLBIMVAAIS)
3543  .writes(1).exceptUserMode();
3544  InitReg(MISCREG_TLBIMVALIS)
3545  .writes(1).exceptUserMode();
3546  InitReg(MISCREG_TLBIMVAALIS)
3547  .writes(1).exceptUserMode();
3548  InitReg(MISCREG_ITLBIALL)
3549  .writes(1).exceptUserMode();
3550  InitReg(MISCREG_ITLBIMVA)
3551  .writes(1).exceptUserMode();
3552  InitReg(MISCREG_ITLBIASID)
3553  .writes(1).exceptUserMode();
3554  InitReg(MISCREG_DTLBIALL)
3555  .writes(1).exceptUserMode();
3556  InitReg(MISCREG_DTLBIMVA)
3557  .writes(1).exceptUserMode();
3558  InitReg(MISCREG_DTLBIASID)
3559  .writes(1).exceptUserMode();
3560  InitReg(MISCREG_TLBIALL)
3561  .writes(1).exceptUserMode();
3562  InitReg(MISCREG_TLBIMVA)
3563  .writes(1).exceptUserMode();
3564  InitReg(MISCREG_TLBIASID)
3565  .writes(1).exceptUserMode();
3566  InitReg(MISCREG_TLBIMVAA)
3567  .writes(1).exceptUserMode();
3568  InitReg(MISCREG_TLBIMVAL)
3569  .writes(1).exceptUserMode();
3570  InitReg(MISCREG_TLBIMVAAL)
3571  .writes(1).exceptUserMode();
3572  InitReg(MISCREG_TLBIIPAS2IS)
3573  .monNonSecureWrite().hypWrite();
3574  InitReg(MISCREG_TLBIIPAS2LIS)
3575  .monNonSecureWrite().hypWrite();
3576  InitReg(MISCREG_TLBIALLHIS)
3577  .monNonSecureWrite().hypWrite();
3578  InitReg(MISCREG_TLBIMVAHIS)
3579  .monNonSecureWrite().hypWrite();
3580  InitReg(MISCREG_TLBIALLNSNHIS)
3581  .monNonSecureWrite().hypWrite();
3582  InitReg(MISCREG_TLBIMVALHIS)
3583  .monNonSecureWrite().hypWrite();
3584  InitReg(MISCREG_TLBIIPAS2)
3585  .monNonSecureWrite().hypWrite();
3586  InitReg(MISCREG_TLBIIPAS2L)
3587  .monNonSecureWrite().hypWrite();
3588  InitReg(MISCREG_TLBIALLH)
3589  .monNonSecureWrite().hypWrite();
3590  InitReg(MISCREG_TLBIMVAH)
3591  .monNonSecureWrite().hypWrite();
3592  InitReg(MISCREG_TLBIALLNSNH)
3593  .monNonSecureWrite().hypWrite();
3594  InitReg(MISCREG_TLBIMVALH)
3595  .monNonSecureWrite().hypWrite();
3596  InitReg(MISCREG_PMCR)
3597  .allPrivileges();
3598  InitReg(MISCREG_PMCNTENSET)
3599  .allPrivileges();
3600  InitReg(MISCREG_PMCNTENCLR)
3601  .allPrivileges();
3602  InitReg(MISCREG_PMOVSR)
3603  .allPrivileges();
3604  InitReg(MISCREG_PMSWINC)
3605  .allPrivileges();
3606  InitReg(MISCREG_PMSELR)
3607  .allPrivileges();
3608  InitReg(MISCREG_PMCEID0)
3609  .allPrivileges();
3610  InitReg(MISCREG_PMCEID1)
3611  .allPrivileges();
3612  InitReg(MISCREG_PMCCNTR)
3613  .allPrivileges();
3614  InitReg(MISCREG_PMXEVTYPER)
3615  .allPrivileges();
3616  InitReg(MISCREG_PMCCFILTR)
3617  .allPrivileges();
3618  InitReg(MISCREG_PMXEVCNTR)
3619  .allPrivileges();
3620  InitReg(MISCREG_PMUSERENR)
3621  .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3622  InitReg(MISCREG_PMINTENSET)
3623  .allPrivileges().exceptUserMode();
3624  InitReg(MISCREG_PMINTENCLR)
3625  .allPrivileges().exceptUserMode();
3626  InitReg(MISCREG_PMOVSSET)
3627  .unimplemented()
3628  .allPrivileges();
3629  InitReg(MISCREG_L2CTLR)
3630  .allPrivileges().exceptUserMode();
3631  InitReg(MISCREG_L2ECTLR)
3632  .unimplemented()
3633  .allPrivileges().exceptUserMode();
3634  InitReg(MISCREG_PRRR)
3635  .banked();
3636  InitReg(MISCREG_PRRR_NS)
3637  .bankedChild()
3638  .privSecure(!aarch32EL3)
3639  .nonSecure().exceptUserMode();
3640  InitReg(MISCREG_PRRR_S)
3641  .bankedChild()
3642  .secure().exceptUserMode();
3643  InitReg(MISCREG_MAIR0)
3644  .banked();
3645  InitReg(MISCREG_MAIR0_NS)
3646  .bankedChild()
3647  .privSecure(!aarch32EL3)
3648  .nonSecure().exceptUserMode();
3649  InitReg(MISCREG_MAIR0_S)
3650  .bankedChild()
3651  .secure().exceptUserMode();
3652  InitReg(MISCREG_NMRR)
3653  .banked();
3654  InitReg(MISCREG_NMRR_NS)
3655  .bankedChild()
3656  .privSecure(!aarch32EL3)
3657  .nonSecure().exceptUserMode();
3658  InitReg(MISCREG_NMRR_S)
3659  .bankedChild()
3660  .secure().exceptUserMode();
3661  InitReg(MISCREG_MAIR1)
3662  .banked();
3663  InitReg(MISCREG_MAIR1_NS)
3664  .bankedChild()
3665  .privSecure(!aarch32EL3)
3666  .nonSecure().exceptUserMode();
3667  InitReg(MISCREG_MAIR1_S)
3668  .bankedChild()
3669  .secure().exceptUserMode();
3670  InitReg(MISCREG_AMAIR0)
3671  .banked();
3672  InitReg(MISCREG_AMAIR0_NS)
3673  .bankedChild()
3674  .privSecure(!aarch32EL3)
3675  .nonSecure().exceptUserMode();
3676  InitReg(MISCREG_AMAIR0_S)
3677  .bankedChild()
3678  .secure().exceptUserMode();
3679  InitReg(MISCREG_AMAIR1)
3680  .banked();
3681  InitReg(MISCREG_AMAIR1_NS)
3682  .bankedChild()
3683  .privSecure(!aarch32EL3)
3684  .nonSecure().exceptUserMode();
3685  InitReg(MISCREG_AMAIR1_S)
3686  .bankedChild()
3687  .secure().exceptUserMode();
3688  InitReg(MISCREG_HMAIR0)
3689  .hyp().monNonSecure();
3690  InitReg(MISCREG_HMAIR1)
3691  .hyp().monNonSecure();
3692  InitReg(MISCREG_HAMAIR0)
3693  .unimplemented()
3694  .warnNotFail()
3695  .hyp().monNonSecure();
3696  InitReg(MISCREG_HAMAIR1)
3697  .unimplemented()
3698  .warnNotFail()
3699  .hyp().monNonSecure();
3700  InitReg(MISCREG_VBAR)
3701  .banked();
3702  InitReg(MISCREG_VBAR_NS)
3703  .bankedChild()
3704  .privSecure(!aarch32EL3)
3705  .nonSecure().exceptUserMode();
3706  InitReg(MISCREG_VBAR_S)
3707  .bankedChild()
3708  .secure().exceptUserMode();
3709  InitReg(MISCREG_MVBAR)
3710  .mon().secure()
3711  .hypRead(FullSystem && system->highestEL() == EL2)
3712  .privRead(FullSystem && system->highestEL() == EL1)
3713  .exceptUserMode();
3714  InitReg(MISCREG_RMR)
3715  .unimplemented()
3716  .mon().secure().exceptUserMode();
3717  InitReg(MISCREG_ISR)
3718  .allPrivileges().exceptUserMode().writes(0);
3719  InitReg(MISCREG_HVBAR)
3720  .hyp().monNonSecure()
3721  .res0(0x1f);
3722  InitReg(MISCREG_FCSEIDR)
3723  .unimplemented()
3724  .warnNotFail()
3725  .allPrivileges().exceptUserMode();
3726  InitReg(MISCREG_CONTEXTIDR)
3727  .banked();
3728  InitReg(MISCREG_CONTEXTIDR_NS)
3729  .bankedChild()
3730  .privSecure(!aarch32EL3)
3731  .nonSecure().exceptUserMode();
3732  InitReg(MISCREG_CONTEXTIDR_S)
3733  .bankedChild()
3734  .secure().exceptUserMode();
3735  InitReg(MISCREG_TPIDRURW)
3736  .banked();
3737  InitReg(MISCREG_TPIDRURW_NS)
3738  .bankedChild()
3739  .allPrivileges()
3740  .privSecure(!aarch32EL3)
3741  .monSecure(0);
3742  InitReg(MISCREG_TPIDRURW_S)
3743  .bankedChild()
3744  .secure();
3745  InitReg(MISCREG_TPIDRURO)
3746  .banked();
3747  InitReg(MISCREG_TPIDRURO_NS)
3748  .bankedChild()
3749  .allPrivileges()
3750  .userNonSecureWrite(0).userSecureRead(1)
3751  .privSecure(!aarch32EL3)
3752  .monSecure(0);
3753  InitReg(MISCREG_TPIDRURO_S)
3754  .bankedChild()
3755  .secure().userSecureWrite(0);
3756  InitReg(MISCREG_TPIDRPRW)
3757  .banked();
3758  InitReg(MISCREG_TPIDRPRW_NS)
3759  .bankedChild()
3760  .nonSecure().exceptUserMode()
3761  .privSecure(!aarch32EL3);
3762  InitReg(MISCREG_TPIDRPRW_S)
3763  .bankedChild()
3764  .secure().exceptUserMode();
3765  InitReg(MISCREG_HTPIDR)
3766  .hyp().monNonSecure();
3767  // BEGIN Generic Timer (AArch32)
3768  InitReg(MISCREG_CNTFRQ)
3769  .reads(1)
3770  .highest(system)
3771  .privSecureWrite(aarch32EL3);
3772  InitReg(MISCREG_CNTPCT)
3773  .unverifiable()
3774  .reads(1);
3775  InitReg(MISCREG_CNTVCT)
3776  .unverifiable()
3777  .reads(1);
3778  InitReg(MISCREG_CNTP_CTL)
3779  .banked();
3780  InitReg(MISCREG_CNTP_CTL_NS)
3781  .bankedChild()
3782  .nonSecure()
3783  .privSecure(!aarch32EL3)
3784  .res0(0xfffffff8);
3785  InitReg(MISCREG_CNTP_CTL_S)
3786  .bankedChild()
3787  .secure()
3788  .privSecure(aarch32EL3)
3789  .res0(0xfffffff8);
3790  InitReg(MISCREG_CNTP_CVAL)
3791  .banked();
3792  InitReg(MISCREG_CNTP_CVAL_NS)
3793  .bankedChild()
3794  .nonSecure()
3795  .privSecure(!aarch32EL3);
3796  InitReg(MISCREG_CNTP_CVAL_S)
3797  .bankedChild()
3798  .secure()
3799  .privSecure(aarch32EL3);
3800  InitReg(MISCREG_CNTP_TVAL)
3801  .banked();
3802  InitReg(MISCREG_CNTP_TVAL_NS)
3803  .bankedChild()
3804  .nonSecure()
3805  .privSecure(!aarch32EL3);
3806  InitReg(MISCREG_CNTP_TVAL_S)
3807  .bankedChild()
3808  .secure()
3809  .privSecure(aarch32EL3);
3810  InitReg(MISCREG_CNTV_CTL)
3811  .allPrivileges()
3812  .res0(0xfffffff8);
3813  InitReg(MISCREG_CNTV_CVAL)
3814  .allPrivileges();
3815  InitReg(MISCREG_CNTV_TVAL)
3816  .allPrivileges();
3817  InitReg(MISCREG_CNTKCTL)
3818  .allPrivileges()
3819  .exceptUserMode()
3820  .res0(0xfffdfc00);
3821  InitReg(MISCREG_CNTHCTL)
3822  .monNonSecure()
3823  .hyp()
3824  .res0(0xfffdff00);
3825  InitReg(MISCREG_CNTHP_CTL)
3826  .monNonSecure()
3827  .hyp()
3828  .res0(0xfffffff8);
3829  InitReg(MISCREG_CNTHP_CVAL)
3830  .monNonSecure()
3831  .hyp();
3832  InitReg(MISCREG_CNTHP_TVAL)
3833  .monNonSecure()
3834  .hyp();
3835  InitReg(MISCREG_CNTVOFF)
3836  .monNonSecure()
3837  .hyp();
3838  // END Generic Timer (AArch32)
3839  InitReg(MISCREG_IL1DATA0)
3840  .unimplemented()
3841  .allPrivileges().exceptUserMode();
3842  InitReg(MISCREG_IL1DATA1)
3843  .unimplemented()
3844  .allPrivileges().exceptUserMode();
3845  InitReg(MISCREG_IL1DATA2)
3846  .unimplemented()
3847  .allPrivileges().exceptUserMode();
3848  InitReg(MISCREG_IL1DATA3)
3849  .unimplemented()
3850  .allPrivileges().exceptUserMode();
3851  InitReg(MISCREG_DL1DATA0)
3852  .unimplemented()
3853  .allPrivileges().exceptUserMode();
3854  InitReg(MISCREG_DL1DATA1)
3855  .unimplemented()
3856  .allPrivileges().exceptUserMode();
3857  InitReg(MISCREG_DL1DATA2)
3858  .unimplemented()
3859  .allPrivileges().exceptUserMode();
3860  InitReg(MISCREG_DL1DATA3)
3861  .unimplemented()
3862  .allPrivileges().exceptUserMode();
3863  InitReg(MISCREG_DL1DATA4)
3864  .unimplemented()
3865  .allPrivileges().exceptUserMode();
3866  InitReg(MISCREG_RAMINDEX)
3867  .unimplemented()
3868  .writes(1).exceptUserMode();
3869  InitReg(MISCREG_L2ACTLR)
3870  .unimplemented()
3871  .allPrivileges().exceptUserMode();
3872  InitReg(MISCREG_CBAR)
3873  .unimplemented()
3874  .allPrivileges().exceptUserMode().writes(0);
3875  InitReg(MISCREG_HTTBR)
3876  .hyp().monNonSecure();
3877  InitReg(MISCREG_VTTBR)
3878  .hyp().monNonSecure();
3879  InitReg(MISCREG_CPUMERRSR)
3880  .unimplemented()
3881  .allPrivileges().exceptUserMode();
3882  InitReg(MISCREG_L2MERRSR)
3883  .unimplemented()
3884  .warnNotFail()
3885  .allPrivileges().exceptUserMode();
3886 
3887  // AArch64 registers (Op0=2);
3888  InitReg(MISCREG_MDCCINT_EL1)
3889  .allPrivileges();
3890  InitReg(MISCREG_OSDTRRX_EL1)
3891  .allPrivileges()
3892  .mapsTo(MISCREG_DBGDTRRXext);
3893  InitReg(MISCREG_MDSCR_EL1)
3894  .allPrivileges()
3895  .mapsTo(MISCREG_DBGDSCRext);
3896  InitReg(MISCREG_OSDTRTX_EL1)
3897  .allPrivileges()
3898  .mapsTo(MISCREG_DBGDTRTXext);
3899  InitReg(MISCREG_OSECCR_EL1)
3900  .allPrivileges()
3901  .mapsTo(MISCREG_DBGOSECCR);
3902  InitReg(MISCREG_DBGBVR0_EL1)
3903  .allPrivileges()
3904  .mapsTo(MISCREG_DBGBVR0 /*, MISCREG_DBGBXVR0 */);
3905  InitReg(MISCREG_DBGBVR1_EL1)
3906  .allPrivileges()
3907  .mapsTo(MISCREG_DBGBVR1 /*, MISCREG_DBGBXVR1 */);
3908  InitReg(MISCREG_DBGBVR2_EL1)
3909  .allPrivileges()
3910  .mapsTo(MISCREG_DBGBVR2 /*, MISCREG_DBGBXVR2 */);
3911  InitReg(MISCREG_DBGBVR3_EL1)
3912  .allPrivileges()
3913  .mapsTo(MISCREG_DBGBVR3 /*, MISCREG_DBGBXVR3 */);
3914  InitReg(MISCREG_DBGBVR4_EL1)
3915  .allPrivileges()
3916  .mapsTo(MISCREG_DBGBVR4 /*, MISCREG_DBGBXVR4 */);
3917  InitReg(MISCREG_DBGBVR5_EL1)
3918  .allPrivileges()
3919  .mapsTo(MISCREG_DBGBVR5 /*, MISCREG_DBGBXVR5 */);
3920  InitReg(MISCREG_DBGBCR0_EL1)
3921  .allPrivileges()
3922  .mapsTo(MISCREG_DBGBCR0);
3923  InitReg(MISCREG_DBGBCR1_EL1)
3924  .allPrivileges()
3925  .mapsTo(MISCREG_DBGBCR1);
3926  InitReg(MISCREG_DBGBCR2_EL1)
3927  .allPrivileges()
3928  .mapsTo(MISCREG_DBGBCR2);
3929  InitReg(MISCREG_DBGBCR3_EL1)
3930  .allPrivileges()
3931  .mapsTo(MISCREG_DBGBCR3);
3932  InitReg(MISCREG_DBGBCR4_EL1)
3933  .allPrivileges()
3934  .mapsTo(MISCREG_DBGBCR4);
3935  InitReg(MISCREG_DBGBCR5_EL1)
3936  .allPrivileges()
3937  .mapsTo(MISCREG_DBGBCR5);
3938  InitReg(MISCREG_DBGWVR0_EL1)
3939  .allPrivileges()
3940  .mapsTo(MISCREG_DBGWVR0);
3941  InitReg(MISCREG_DBGWVR1_EL1)
3942  .allPrivileges()
3943  .mapsTo(MISCREG_DBGWVR1);
3944  InitReg(MISCREG_DBGWVR2_EL1)
3945  .allPrivileges()
3946  .mapsTo(MISCREG_DBGWVR2);
3947  InitReg(MISCREG_DBGWVR3_EL1)
3948  .allPrivileges()
3949  .mapsTo(MISCREG_DBGWVR3);
3950  InitReg(MISCREG_DBGWCR0_EL1)
3951  .allPrivileges()
3952  .mapsTo(MISCREG_DBGWCR0);
3953  InitReg(MISCREG_DBGWCR1_EL1)
3954  .allPrivileges()
3955  .mapsTo(MISCREG_DBGWCR1);
3956  InitReg(MISCREG_DBGWCR2_EL1)
3957  .allPrivileges()
3958  .mapsTo(MISCREG_DBGWCR2);
3959  InitReg(MISCREG_DBGWCR3_EL1)
3960  .allPrivileges()
3961  .mapsTo(MISCREG_DBGWCR3);
3962  InitReg(MISCREG_MDCCSR_EL0)
3963  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3964  .mapsTo(MISCREG_DBGDSCRint);
3965  InitReg(MISCREG_MDDTR_EL0)
3966  .allPrivileges();
3967  InitReg(MISCREG_MDDTRTX_EL0)
3968  .allPrivileges();
3969  InitReg(MISCREG_MDDTRRX_EL0)
3970  .allPrivileges();
3971  InitReg(MISCREG_DBGVCR32_EL2)
3972  .allPrivileges()
3973  .mapsTo(MISCREG_DBGVCR);
3974  InitReg(MISCREG_MDRAR_EL1)
3975  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3976  .mapsTo(MISCREG_DBGDRAR);
3977  InitReg(MISCREG_OSLAR_EL1)
3978  .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3979  .mapsTo(MISCREG_DBGOSLAR);
3980  InitReg(MISCREG_OSLSR_EL1)
3981  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3982  .mapsTo(MISCREG_DBGOSLSR);
3983  InitReg(MISCREG_OSDLR_EL1)
3984  .allPrivileges()
3985  .mapsTo(MISCREG_DBGOSDLR);
3986  InitReg(MISCREG_DBGPRCR_EL1)
3987  .allPrivileges()
3988  .mapsTo(MISCREG_DBGPRCR);
3989  InitReg(MISCREG_DBGCLAIMSET_EL1)
3990  .allPrivileges()
3991  .mapsTo(MISCREG_DBGCLAIMSET);
3992  InitReg(MISCREG_DBGCLAIMCLR_EL1)
3993  .allPrivileges()
3994  .mapsTo(MISCREG_DBGCLAIMCLR);
3995  InitReg(MISCREG_DBGAUTHSTATUS_EL1)
3996  .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3997  .mapsTo(MISCREG_DBGAUTHSTATUS);
3998  InitReg(MISCREG_TEECR32_EL1);
3999  InitReg(MISCREG_TEEHBR32_EL1);
4000 
4001  // AArch64 registers (Op0=1,3);
4002  InitReg(MISCREG_MIDR_EL1)
4003  .allPrivileges().exceptUserMode().writes(0);
4004  InitReg(MISCREG_MPIDR_EL1)
4005  .allPrivileges().exceptUserMode().writes(0);
4006  InitReg(MISCREG_REVIDR_EL1)
4007  .allPrivileges().exceptUserMode().writes(0);
4008  InitReg(MISCREG_ID_PFR0_EL1)
4009  .allPrivileges().exceptUserMode().writes(0)
4010  .mapsTo(MISCREG_ID_PFR0);
4011  InitReg(MISCREG_ID_PFR1_EL1)
4012  .allPrivileges().exceptUserMode().writes(0)
4013  .mapsTo(MISCREG_ID_PFR1);
4014  InitReg(MISCREG_ID_DFR0_EL1)
4015  .allPrivileges().exceptUserMode().writes(0)
4016  .mapsTo(MISCREG_ID_DFR0);
4017  InitReg(MISCREG_ID_AFR0_EL1)
4018  .allPrivileges().exceptUserMode().writes(0)
4019  .mapsTo(MISCREG_ID_AFR0);
4020  InitReg(MISCREG_ID_MMFR0_EL1)
4021  .allPrivileges().exceptUserMode().writes(0)
4022  .mapsTo(MISCREG_ID_MMFR0);
4023  InitReg(MISCREG_ID_MMFR1_EL1)
4024  .allPrivileges().exceptUserMode().writes(0)
4025  .mapsTo(MISCREG_ID_MMFR1);
4026  InitReg(MISCREG_ID_MMFR2_EL1)
4027  .allPrivileges().exceptUserMode().writes(0)
4028  .mapsTo(MISCREG_ID_MMFR2);
4029  InitReg(MISCREG_ID_MMFR3_EL1)
4030  .allPrivileges().exceptUserMode().writes(0)
4031  .mapsTo(MISCREG_ID_MMFR3);
4032  InitReg(MISCREG_ID_ISAR0_EL1)
4033  .allPrivileges().exceptUserMode().writes(0)
4034  .mapsTo(MISCREG_ID_ISAR0);
4035  InitReg(MISCREG_ID_ISAR1_EL1)
4036  .allPrivileges().exceptUserMode().writes(0)
4037  .mapsTo(MISCREG_ID_ISAR1);
4038  InitReg(MISCREG_ID_ISAR2_EL1)
4039  .allPrivileges().exceptUserMode().writes(0)
4040  .mapsTo(MISCREG_ID_ISAR2);
4041  InitReg(MISCREG_ID_ISAR3_EL1)
4042  .allPrivileges().exceptUserMode().writes(0)
4043  .mapsTo(MISCREG_ID_ISAR3);
4044  InitReg(MISCREG_ID_ISAR4_EL1)
4045  .allPrivileges().exceptUserMode().writes(0)
4046  .mapsTo(MISCREG_ID_ISAR4);
4047  InitReg(MISCREG_ID_ISAR5_EL1)
4048  .allPrivileges().exceptUserMode().writes(0)
4049  .mapsTo(MISCREG_ID_ISAR5);
4050  InitReg(MISCREG_MVFR0_EL1)
4051  .allPrivileges().exceptUserMode().writes(0);
4052  InitReg(MISCREG_MVFR1_EL1)
4053  .allPrivileges().exceptUserMode().writes(0);
4054  InitReg(MISCREG_MVFR2_EL1)
4055  .allPrivileges().exceptUserMode().writes(0);
4056  InitReg(MISCREG_ID_AA64PFR0_EL1)
4057  .allPrivileges().exceptUserMode().writes(0);
4058  InitReg(MISCREG_ID_AA64PFR1_EL1)
4059  .allPrivileges().exceptUserMode().writes(0);
4060  InitReg(MISCREG_ID_AA64DFR0_EL1)
4061  .allPrivileges().exceptUserMode().writes(0);
4062  InitReg(MISCREG_ID_AA64DFR1_EL1)
4063  .allPrivileges().exceptUserMode().writes(0);
4064  InitReg(MISCREG_ID_AA64AFR0_EL1)
4065  .allPrivileges().exceptUserMode().writes(0);
4066  InitReg(MISCREG_ID_AA64AFR1_EL1)
4067  .allPrivileges().exceptUserMode().writes(0);
4068  InitReg(MISCREG_ID_AA64ISAR0_EL1)
4069  .allPrivileges().exceptUserMode().writes(0);
4070  InitReg(MISCREG_ID_AA64ISAR1_EL1)
4071  .allPrivileges().exceptUserMode().writes(0);
4072  InitReg(MISCREG_ID_AA64MMFR0_EL1)
4073  .allPrivileges().exceptUserMode().writes(0);
4074  InitReg(MISCREG_ID_AA64MMFR1_EL1)
4075  .allPrivileges().exceptUserMode().writes(0);
4076  InitReg(MISCREG_ID_AA64MMFR2_EL1)
4077  .allPrivileges().exceptUserMode().writes(0);
4078 
4079  InitReg(MISCREG_APDAKeyHi_EL1)
4080  .allPrivileges().exceptUserMode();
4081  InitReg(MISCREG_APDAKeyLo_EL1)
4082  .allPrivileges().exceptUserMode();
4083  InitReg(MISCREG_APDBKeyHi_EL1)
4084  .allPrivileges().exceptUserMode();
4085  InitReg(MISCREG_APDBKeyLo_EL1)
4086  .allPrivileges().exceptUserMode();
4087  InitReg(MISCREG_APGAKeyHi_EL1)
4088  .allPrivileges().exceptUserMode();
4089  InitReg(MISCREG_APGAKeyLo_EL1)
4090  .allPrivileges().exceptUserMode();
4091  InitReg(MISCREG_APIAKeyHi_EL1)
4092  .allPrivileges().exceptUserMode();
4093  InitReg(MISCREG_APIAKeyLo_EL1)
4094  .allPrivileges().exceptUserMode();
4095  InitReg(MISCREG_APIBKeyHi_EL1)
4096  .allPrivileges().exceptUserMode();
4097  InitReg(MISCREG_APIBKeyLo_EL1)
4098  .allPrivileges().exceptUserMode();
4099 
4100  InitReg(MISCREG_CCSIDR_EL1)
4101  .allPrivileges().exceptUserMode().writes(0);
4102  InitReg(MISCREG_CLIDR_EL1)
4103  .allPrivileges().exceptUserMode().writes(0);
4104  InitReg(MISCREG_AIDR_EL1)
4105  .allPrivileges().exceptUserMode().writes(0);
4106  InitReg(MISCREG_CSSELR_EL1)
4107  .allPrivileges().exceptUserMode()
4108  .mapsTo(MISCREG_CSSELR_NS);
4109  InitReg(MISCREG_CTR_EL0)
4110  .reads(1);
4111  InitReg(MISCREG_DCZID_EL0)
4112  .reads(1);
4113  InitReg(MISCREG_VPIDR_EL2)
4114  .hyp().mon()
4115  .mapsTo(MISCREG_VPIDR);
4116  InitReg(MISCREG_VMPIDR_EL2)
4117  .hyp().mon()
4118  .mapsTo(MISCREG_VMPIDR);
4119  InitReg(MISCREG_SCTLR_EL1)
4120  .allPrivileges().exceptUserMode()
4121  .res0( 0x20440 | (EnDB ? 0 : 0x2000)
4122  | (IESB ? 0 : 0x200000)
4123  | (EnDA ? 0 : 0x8000000)
4124  | (EnIB ? 0 : 0x40000000)
4125  | (EnIA ? 0 : 0x80000000))
4126  .res1(0x500800 | (SPAN ? 0 : 0x800000)
4127  | (nTLSMD ? 0 : 0x8000000)
4128  | (LSMAOE ? 0 : 0x10000000))
4129  .mapsTo(MISCREG_SCTLR_NS);
4130  InitReg(MISCREG_ACTLR_EL1)
4131  .allPrivileges().exceptUserMode()
4132  .mapsTo(MISCREG_ACTLR_NS);
4133  InitReg(MISCREG_CPACR_EL1)
4134  .allPrivileges().exceptUserMode()
4135  .mapsTo(MISCREG_CPACR);
4136  InitReg(MISCREG_SCTLR_EL2)
4137  .hyp().mon()
4138  .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4139  | (IESB ? 0 : 0x200000)
4140  | (EnDA ? 0 : 0x8000000)
4141  | (EnIB ? 0 : 0x40000000)
4142  | (EnIA ? 0 : 0x80000000))
4143  .res1(0x30c50830)
4144  .mapsTo(MISCREG_HSCTLR);
4145  InitReg(MISCREG_ACTLR_EL2)
4146  .hyp().mon()
4147  .mapsTo(MISCREG_HACTLR);
4148  InitReg(MISCREG_HCR_EL2)
4149  .hyp().mon()
4150  .mapsTo(MISCREG_HCR, MISCREG_HCR2);
4151  InitReg(MISCREG_MDCR_EL2)
4152  .hyp().mon()
4153  .mapsTo(MISCREG_HDCR);
4154  InitReg(MISCREG_CPTR_EL2)
4155  .hyp().mon()
4156  .mapsTo(MISCREG_HCPTR);
4157  InitReg(MISCREG_HSTR_EL2)
4158  .hyp().mon()
4159  .mapsTo(MISCREG_HSTR);
4160  InitReg(MISCREG_HACR_EL2)
4161  .hyp().mon()
4162  .mapsTo(MISCREG_HACR);
4163  InitReg(MISCREG_SCTLR_EL3)
4164  .mon()
4165  .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
4166  | (IESB ? 0 : 0x200000)
4167  | (EnDA ? 0 : 0x8000000)
4168  | (EnIB ? 0 : 0x40000000)
4169  | (EnIA ? 0 : 0x80000000))
4170  .res1(0x30c50830);
4171  InitReg(MISCREG_ACTLR_EL3)
4172  .mon();
4173  InitReg(MISCREG_SCR_EL3)
4174  .mon()
4175  .mapsTo(MISCREG_SCR); // NAM D7-2005
4176  InitReg(MISCREG_SDER32_EL3)
4177  .mon()
4178  .mapsTo(MISCREG_SDER);
4179  InitReg(MISCREG_CPTR_EL3)
4180  .mon();
4181  InitReg(MISCREG_MDCR_EL3)
4182  .mon();
4183  InitReg(MISCREG_TTBR0_EL1)
4184  .allPrivileges().exceptUserMode()
4185  .mapsTo(MISCREG_TTBR0_NS);
4186  InitReg(MISCREG_TTBR1_EL1)
4187  .allPrivileges().exceptUserMode()
4188  .mapsTo(MISCREG_TTBR1_NS);
4189  InitReg(MISCREG_TCR_EL1)
4190  .allPrivileges().exceptUserMode()
4191  .mapsTo(MISCREG_TTBCR_NS);
4192  InitReg(MISCREG_TTBR0_EL2)
4193  .hyp().mon()
4194  .mapsTo(MISCREG_HTTBR);
4195  InitReg(MISCREG_TTBR1_EL2)
4196  .hyp().mon();
4197  InitReg(MISCREG_TCR_EL2)
4198  .hyp().mon()
4199  .mapsTo(MISCREG_HTCR);
4200  InitReg(MISCREG_VTTBR_EL2)
4201  .hyp().mon()
4202  .mapsTo(MISCREG_VTTBR);
4203  InitReg(MISCREG_VTCR_EL2)
4204  .hyp().mon()
4205  .mapsTo(MISCREG_VTCR);
4206  InitReg(MISCREG_TTBR0_EL3)
4207  .mon();
4208  InitReg(MISCREG_TCR_EL3)
4209  .mon();
4210  InitReg(MISCREG_DACR32_EL2)
4211  .hyp().mon()
4212  .mapsTo(MISCREG_DACR_NS);
4213  InitReg(MISCREG_SPSR_EL1)
4214  .allPrivileges().exceptUserMode()
4215  .mapsTo(MISCREG_SPSR_SVC); // NAM C5.2.17 SPSR_EL1
4216  InitReg(MISCREG_ELR_EL1)
4217  .allPrivileges().exceptUserMode();
4218  InitReg(MISCREG_SP_EL0)
4219  .allPrivileges().exceptUserMode();
4220  InitReg(MISCREG_SPSEL)
4221  .allPrivileges().exceptUserMode();
4222  InitReg(MISCREG_CURRENTEL)
4223  .allPrivileges().exceptUserMode().writes(0);
4224  InitReg(MISCREG_PAN)
4225  .allPrivileges().exceptUserMode()
4226  .implemented(havePAN);
4227  InitReg(MISCREG_NZCV)
4228  .allPrivileges();
4229  InitReg(MISCREG_DAIF)
4230  .allPrivileges();
4231  InitReg(MISCREG_FPCR)
4232  .allPrivileges();
4233  InitReg(MISCREG_FPSR)
4234  .allPrivileges();
4235  InitReg(MISCREG_DSPSR_EL0)
4236  .allPrivileges();
4237  InitReg(MISCREG_DLR_EL0)
4238  .allPrivileges();
4239  InitReg(MISCREG_SPSR_EL2)
4240  .hyp().mon()
4241  .mapsTo(MISCREG_SPSR_HYP); // NAM C5.2.18 SPSR_EL2
4242  InitReg(MISCREG_ELR_EL2)
4243  .hyp().mon();
4244  InitReg(MISCREG_SP_EL1)
4245  .hyp().mon();
4246  InitReg(MISCREG_SPSR_IRQ_AA64)
4247  .hyp().mon();
4248  InitReg(MISCREG_SPSR_ABT_AA64)
4249  .hyp().mon();
4250  InitReg(MISCREG_SPSR_UND_AA64)
4251  .hyp().mon();
4252  InitReg(MISCREG_SPSR_FIQ_AA64)
4253  .hyp().mon();
4254  InitReg(MISCREG_SPSR_EL3)
4255  .mon()
4256  .mapsTo(MISCREG_SPSR_MON); // NAM C5.2.19 SPSR_EL3
4257  InitReg(MISCREG_ELR_EL3)
4258  .mon();
4259  InitReg(MISCREG_SP_EL2)
4260  .mon();
4261  InitReg(MISCREG_AFSR0_EL1)
4262  .allPrivileges().exceptUserMode()
4263  .mapsTo(MISCREG_ADFSR_NS);
4264  InitReg(MISCREG_AFSR1_EL1)
4265  .allPrivileges().exceptUserMode()
4266  .mapsTo(MISCREG_AIFSR_NS);
4267  InitReg(MISCREG_ESR_EL1)
4268  .allPrivileges().exceptUserMode();
4269  InitReg(MISCREG_IFSR32_EL2)
4270  .hyp().mon()
4271  .mapsTo(MISCREG_IFSR_NS);
4272  InitReg(MISCREG_AFSR0_EL2)
4273  .hyp().mon()
4274  .mapsTo(MISCREG_HADFSR);
4275  InitReg(MISCREG_AFSR1_EL2)
4276  .hyp().mon()
4277  .mapsTo(MISCREG_HAIFSR);
4278  InitReg(MISCREG_ESR_EL2)
4279  .hyp().mon()
4280  .mapsTo(MISCREG_HSR);
4281  InitReg(MISCREG_FPEXC32_EL2)
4282  .hyp().mon().mapsTo(MISCREG_FPEXC);
4283  InitReg(MISCREG_AFSR0_EL3)
4284  .mon();
4285  InitReg(MISCREG_AFSR1_EL3)
4286  .mon();
4287  InitReg(MISCREG_ESR_EL3)
4288  .mon();
4289  InitReg(MISCREG_FAR_EL1)
4290  .allPrivileges().exceptUserMode()
4291  .mapsTo(MISCREG_DFAR_NS, MISCREG_IFAR_NS);
4292  InitReg(MISCREG_FAR_EL2)
4293  .hyp().mon()
4294  .mapsTo(MISCREG_HDFAR, MISCREG_HIFAR);
4295  InitReg(MISCREG_HPFAR_EL2)
4296  .hyp().mon()
4297  .mapsTo(MISCREG_HPFAR);
4298  InitReg(MISCREG_FAR_EL3)
4299  .mon();
4300  InitReg(MISCREG_IC_IALLUIS)
4301  .warnNotFail()
4302  .writes(1).exceptUserMode();
4303  InitReg(MISCREG_PAR_EL1)
4304  .allPrivileges().exceptUserMode()
4305  .mapsTo(MISCREG_PAR_NS);
4306  InitReg(MISCREG_IC_IALLU)
4307  .warnNotFail()
4308  .writes(1).exceptUserMode();
4309  InitReg(MISCREG_DC_IVAC_Xt)
4310  .warnNotFail()
4311  .writes(1).exceptUserMode();
4312  InitReg(MISCREG_DC_ISW_Xt)
4313  .warnNotFail()
4314  .writes(1).exceptUserMode();
4315  InitReg(MISCREG_AT_S1E1R_Xt)
4316  .writes(1).exceptUserMode();
4317  InitReg(MISCREG_AT_S1E1W_Xt)
4318  .writes(1).exceptUserMode();
4319  InitReg(MISCREG_AT_S1E0R_Xt)
4320  .writes(1).exceptUserMode();
4321  InitReg(MISCREG_AT_S1E0W_Xt)
4322  .writes(1).exceptUserMode();
4323  InitReg(MISCREG_DC_CSW_Xt)
4324  .warnNotFail()
4325  .writes(1).exceptUserMode();
4326  InitReg(MISCREG_DC_CISW_Xt)
4327  .warnNotFail()
4328  .writes(1).exceptUserMode();
4329  InitReg(MISCREG_DC_ZVA_Xt)
4330  .warnNotFail()
4331  .writes(1).userSecureWrite(0);
4332  InitReg(MISCREG_IC_IVAU_Xt)
4333  .writes(1);
4334  InitReg(MISCREG_DC_CVAC_Xt)
4335  .warnNotFail()
4336  .writes(1);
4337  InitReg(MISCREG_DC_CVAU_Xt)
4338  .warnNotFail()
4339  .writes(1);
4340  InitReg(MISCREG_DC_CIVAC_Xt)
4341  .warnNotFail()
4342  .writes(1);
4343  InitReg(MISCREG_AT_S1E2R_Xt)
4344  .monNonSecureWrite().hypWrite();
4345  InitReg(MISCREG_AT_S1E2W_Xt)
4346  .monNonSecureWrite().hypWrite();
4347  InitReg(MISCREG_AT_S12E1R_Xt)
4348  .hypWrite().monSecureWrite().monNonSecureWrite();
4349  InitReg(MISCREG_AT_S12E1W_Xt)
4350  .hypWrite().monSecureWrite().monNonSecureWrite();
4351  InitReg(MISCREG_AT_S12E0R_Xt)
4352  .hypWrite().monSecureWrite().monNonSecureWrite();
4353  InitReg(MISCREG_AT_S12E0W_Xt)
4354  .hypWrite().monSecureWrite().monNonSecureWrite();
4355  InitReg(MISCREG_AT_S1E3R_Xt)
4356  .monSecureWrite().monNonSecureWrite();
4357  InitReg(MISCREG_AT_S1E3W_Xt)
4358  .monSecureWrite().monNonSecureWrite();
4359  InitReg(MISCREG_TLBI_VMALLE1IS)
4360  .writes(1).exceptUserMode();
4361  InitReg(MISCREG_TLBI_VAE1IS_Xt)
4362  .writes(1).exceptUserMode();
4363  InitReg(MISCREG_TLBI_ASIDE1IS_Xt)
4364  .writes(1).exceptUserMode();
4365  InitReg(MISCREG_TLBI_VAAE1IS_Xt)
4366  .writes(1).exceptUserMode();
4367  InitReg(MISCREG_TLBI_VALE1IS_Xt)
4368  .writes(1).exceptUserMode();
4369  InitReg(MISCREG_TLBI_VAALE1IS_Xt)
4370  .writes(1).exceptUserMode();
4371  InitReg(MISCREG_TLBI_VMALLE1)
4372  .writes(1).exceptUserMode();
4373  InitReg(MISCREG_TLBI_VAE1_Xt)
4374  .writes(1).exceptUserMode();
4375  InitReg(MISCREG_TLBI_ASIDE1_Xt)
4376  .writes(1).exceptUserMode();
4377  InitReg(MISCREG_TLBI_VAAE1_Xt)
4378  .writes(1).exceptUserMode();
4379  InitReg(MISCREG_TLBI_VALE1_Xt)
4380  .writes(1).exceptUserMode();
4381  InitReg(MISCREG_TLBI_VAALE1_Xt)
4382  .writes(1).exceptUserMode();
4383  InitReg(MISCREG_TLBI_IPAS2E1IS_Xt)
4384  .hypWrite().monSecureWrite().monNonSecureWrite();
4386  .hypWrite().monSecureWrite().monNonSecureWrite();
4387  InitReg(MISCREG_TLBI_ALLE2IS)
4388  .monNonSecureWrite().hypWrite();
4389  InitReg(MISCREG_TLBI_VAE2IS_Xt)
4390  .monNonSecureWrite().hypWrite();
4391  InitReg(MISCREG_TLBI_ALLE1IS)
4392  .hypWrite().monSecureWrite().monNonSecureWrite();
4393  InitReg(MISCREG_TLBI_VALE2IS_Xt)
4394  .monNonSecureWrite().hypWrite();
4395  InitReg(MISCREG_TLBI_VMALLS12E1IS)
4396  .hypWrite().monSecureWrite().monNonSecureWrite();
4397  InitReg(MISCREG_TLBI_IPAS2E1_Xt)
4398  .hypWrite().monSecureWrite().monNonSecureWrite();
4399  InitReg(MISCREG_TLBI_IPAS2LE1_Xt)
4400  .hypWrite().monSecureWrite().monNonSecureWrite();
4401  InitReg(MISCREG_TLBI_ALLE2)
4402  .monNonSecureWrite().hypWrite();
4403  InitReg(MISCREG_TLBI_VAE2_Xt)
4404  .monNonSecureWrite().hypWrite();
4405  InitReg(MISCREG_TLBI_ALLE1)
4406  .hypWrite().monSecureWrite().monNonSecureWrite();
4407  InitReg(MISCREG_TLBI_VALE2_Xt)
4408  .monNonSecureWrite().hypWrite();
4409  InitReg(MISCREG_TLBI_VMALLS12E1)
4410  .hypWrite().monSecureWrite().monNonSecureWrite();
4411  InitReg(MISCREG_TLBI_ALLE3IS)
4412  .monSecureWrite().monNonSecureWrite();
4413  InitReg(MISCREG_TLBI_VAE3IS_Xt)
4414  .monSecureWrite().monNonSecureWrite();
4415  InitReg(MISCREG_TLBI_VALE3IS_Xt)
4416  .monSecureWrite().monNonSecureWrite();
4417  InitReg(MISCREG_TLBI_ALLE3)
4418  .monSecureWrite().monNonSecureWrite();
4419  InitReg(MISCREG_TLBI_VAE3_Xt)
4420  .monSecureWrite().monNonSecureWrite();
4421  InitReg(MISCREG_TLBI_VALE3_Xt)
4422  .monSecureWrite().monNonSecureWrite();
4423  InitReg(MISCREG_PMINTENSET_EL1)
4424  .allPrivileges().exceptUserMode()
4425  .mapsTo(MISCREG_PMINTENSET);
4426  InitReg(MISCREG_PMINTENCLR_EL1)
4427  .allPrivileges().exceptUserMode()
4428  .mapsTo(MISCREG_PMINTENCLR);
4429  InitReg(MISCREG_PMCR_EL0)
4430  .allPrivileges()
4431  .mapsTo(MISCREG_PMCR);
4432  InitReg(MISCREG_PMCNTENSET_EL0)
4433  .allPrivileges()
4434  .mapsTo(MISCREG_PMCNTENSET);
4435  InitReg(MISCREG_PMCNTENCLR_EL0)
4436  .allPrivileges()
4437  .mapsTo(MISCREG_PMCNTENCLR);
4438  InitReg(MISCREG_PMOVSCLR_EL0)
4439  .allPrivileges();
4440 // .mapsTo(MISCREG_PMOVSCLR);
4441  InitReg(MISCREG_PMSWINC_EL0)
4442  .writes(1).user()
4443  .mapsTo(MISCREG_PMSWINC);
4444  InitReg(MISCREG_PMSELR_EL0)
4445  .allPrivileges()
4446  .mapsTo(MISCREG_PMSELR);
4447  InitReg(MISCREG_PMCEID0_EL0)
4448  .reads(1).user()
4449  .mapsTo(MISCREG_PMCEID0);
4450  InitReg(MISCREG_PMCEID1_EL0)
4451  .reads(1).user()
4452  .mapsTo(MISCREG_PMCEID1);
4453  InitReg(MISCREG_PMCCNTR_EL0)
4454  .allPrivileges()
4455  .mapsTo(MISCREG_PMCCNTR);
4456  InitReg(MISCREG_PMXEVTYPER_EL0)
4457  .allPrivileges()
4458  .mapsTo(MISCREG_PMXEVTYPER);
4459  InitReg(MISCREG_PMCCFILTR_EL0)
4460  .allPrivileges();
4461  InitReg(MISCREG_PMXEVCNTR_EL0)
4462  .allPrivileges()
4463  .mapsTo(MISCREG_PMXEVCNTR);
4464  InitReg(MISCREG_PMUSERENR_EL0)
4465  .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4466  .mapsTo(MISCREG_PMUSERENR);
4467  InitReg(MISCREG_PMOVSSET_EL0)
4468  .allPrivileges()
4469  .mapsTo(MISCREG_PMOVSSET);
4470  InitReg(MISCREG_MAIR_EL1)
4471  .allPrivileges().exceptUserMode()
4472  .mapsTo(MISCREG_PRRR_NS, MISCREG_NMRR_NS);
4473  InitReg(MISCREG_AMAIR_EL1)
4474  .allPrivileges().exceptUserMode()
4476  InitReg(MISCREG_MAIR_EL2)
4477  .hyp().mon()
4478  .mapsTo(MISCREG_HMAIR0, MISCREG_HMAIR1);
4479  InitReg(MISCREG_AMAIR_EL2)
4480  .hyp().mon()
4481  .mapsTo(MISCREG_HAMAIR0, MISCREG_HAMAIR1);
4482  InitReg(MISCREG_MAIR_EL3)
4483  .mon();
4484  InitReg(MISCREG_AMAIR_EL3)
4485  .mon();
4486  InitReg(MISCREG_L2CTLR_EL1)
4487  .allPrivileges().exceptUserMode();
4488  InitReg(MISCREG_L2ECTLR_EL1)
4489  .allPrivileges().exceptUserMode();
4490  InitReg(MISCREG_VBAR_EL1)
4491  .allPrivileges().exceptUserMode()
4492  .mapsTo(MISCREG_VBAR_NS);
4493  InitReg(MISCREG_RVBAR_EL1)
4494  .allPrivileges().exceptUserMode().writes(0);
4495  InitReg(MISCREG_ISR_EL1)
4496  .allPrivileges().exceptUserMode().writes(0);
4497  InitReg(MISCREG_VBAR_EL2)
4498  .hyp().mon()
4499  .res0(0x7ff)
4500  .mapsTo(MISCREG_HVBAR);
4501  InitReg(MISCREG_RVBAR_EL2)
4502  .mon().hyp().writes(0);
4503  InitReg(MISCREG_VBAR_EL3)
4504  .mon();
4505  InitReg(MISCREG_RVBAR_EL3)
4506  .mon().writes(0);
4507  InitReg(MISCREG_RMR_EL3)
4508  .mon();
4509  InitReg(MISCREG_CONTEXTIDR_EL1)
4510  .allPrivileges().exceptUserMode()
4511  .mapsTo(MISCREG_CONTEXTIDR_NS);
4512  InitReg(MISCREG_TPIDR_EL1)
4513  .allPrivileges().exceptUserMode()
4514  .mapsTo(MISCREG_TPIDRPRW_NS);
4515  InitReg(MISCREG_TPIDR_EL0)
4516  .allPrivileges()
4517  .mapsTo(MISCREG_TPIDRURW_NS);
4518  InitReg(MISCREG_TPIDRRO_EL0)
4519  .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4520  .mapsTo(MISCREG_TPIDRURO_NS);
4521  InitReg(MISCREG_TPIDR_EL2)
4522  .hyp().mon()
4523  .mapsTo(MISCREG_HTPIDR);
4524  InitReg(MISCREG_TPIDR_EL3)
4525  .mon();
4526  // BEGIN Generic Timer (AArch64)
4527  InitReg(MISCREG_CNTFRQ_EL0)
4528  .reads(1)
4529  .highest(system)
4530  .privSecureWrite(aarch32EL3)
4531  .mapsTo(MISCREG_CNTFRQ);
4532  InitReg(MISCREG_CNTPCT_EL0)
4533  .unverifiable()
4534  .reads(1)
4535  .mapsTo(MISCREG_CNTPCT);
4536  InitReg(MISCREG_CNTVCT_EL0)
4537  .unverifiable()
4538  .reads(1)
4539  .mapsTo(MISCREG_CNTVCT);
4540  InitReg(MISCREG_CNTP_CTL_EL0)
4541  .allPrivileges()
4542  .res0(0xfffffffffffffff8)
4543  .mapsTo(MISCREG_CNTP_CTL_NS);
4544  InitReg(MISCREG_CNTP_CVAL_EL0)
4545  .allPrivileges()
4546  .mapsTo(MISCREG_CNTP_CVAL_NS);
4547  InitReg(MISCREG_CNTP_TVAL_EL0)
4548  .allPrivileges()
4549  .res0(0xffffffff00000000)
4550  .mapsTo(MISCREG_CNTP_TVAL_NS);
4551  InitReg(MISCREG_CNTV_CTL_EL0)
4552  .allPrivileges()
4553  .res0(0xfffffffffffffff8)
4554  .mapsTo(MISCREG_CNTV_CTL);
4555  InitReg(MISCREG_CNTV_CVAL_EL0)
4556  .allPrivileges()
4557  .mapsTo(MISCREG_CNTV_CVAL);
4558  InitReg(MISCREG_CNTV_TVAL_EL0)
4559  .allPrivileges()
4560  .res0(0xffffffff00000000)
4561  .mapsTo(MISCREG_CNTV_TVAL);
4562  InitReg(MISCREG_CNTP_CTL_EL02)
4563  .monE2H()
4564  .hypE2H()
4565  .res0(0xfffffffffffffff8)
4566  .mapsTo(MISCREG_CNTP_CTL_NS);
4567  InitReg(MISCREG_CNTP_CVAL_EL02)
4568  .monE2H()
4569  .hypE2H()
4570  .mapsTo(MISCREG_CNTP_CVAL_NS);
4571  InitReg(MISCREG_CNTP_TVAL_EL02)
4572  .monE2H()
4573  .hypE2H()
4574  .res0(0xffffffff00000000)
4575  .mapsTo(MISCREG_CNTP_TVAL_NS);
4576  InitReg(MISCREG_CNTV_CTL_EL02)
4577  .monE2H()
4578  .hypE2H()
4579  .res0(0xfffffffffffffff8)
4580  .mapsTo(MISCREG_CNTV_CTL);
4581  InitReg(MISCREG_CNTV_CVAL_EL02)
4582  .monE2H()
4583  .hypE2H()
4584  .mapsTo(MISCREG_CNTV_CVAL);
4585  InitReg(MISCREG_CNTV_TVAL_EL02)
4586  .monE2H()
4587  .hypE2H()
4588  .res0(0xffffffff00000000)
4589  .mapsTo(MISCREG_CNTV_TVAL);
4590  InitReg(MISCREG_CNTKCTL_EL1)
4591  .allPrivileges()
4592  .exceptUserMode()
4593  .res0(0xfffffffffffdfc00)
4594  .mapsTo(MISCREG_CNTKCTL);
4595  InitReg(MISCREG_CNTKCTL_EL12)
4596  .monE2H()
4597  .hypE2H()
4598  .res0(0xfffffffffffdfc00)
4599  .mapsTo(MISCREG_CNTKCTL);
4600  InitReg(MISCREG_CNTPS_CTL_EL1)
4601  .mon()
4602  .privSecure()
4603  .res0(0xfffffffffffffff8);
4604  InitReg(MISCREG_CNTPS_CVAL_EL1)
4605  .mon()
4606  .privSecure();
4607  InitReg(MISCREG_CNTPS_TVAL_EL1)
4608  .mon()
4609  .privSecure()
4610  .res0(0xffffffff00000000);
4611  InitReg(MISCREG_CNTHCTL_EL2)
4612  .mon()
4613  .hyp()
4614  .res0(0xfffffffffffc0000)
4615  .mapsTo(MISCREG_CNTHCTL);
4616  InitReg(MISCREG_CNTHP_CTL_EL2)
4617  .mon()
4618  .hyp()
4619  .res0(0xfffffffffffffff8)
4620  .mapsTo(MISCREG_CNTHP_CTL);
4621  InitReg(MISCREG_CNTHP_CVAL_EL2)
4622  .mon()
4623  .hyp()
4624  .mapsTo(MISCREG_CNTHP_CVAL);
4625  InitReg(MISCREG_CNTHP_TVAL_EL2)
4626  .mon()
4627  .hyp()
4628  .res0(0xffffffff00000000)
4629  .mapsTo(MISCREG_CNTHP_TVAL);
4630  // IF Armv8.1-VHE
4631  InitReg(MISCREG_CNTHV_CTL_EL2)
4632  .mon()
4633  .hyp()
4634  .res0(0xfffffffffffffff8);
4635  InitReg(MISCREG_CNTHV_CVAL_EL2)
4636  .mon()
4637  .hyp();
4638  InitReg(MISCREG_CNTHV_TVAL_EL2)
4639  .mon()
4640  .hyp()
4641  .res0(0xffffffff00000000);
4642  // ENDIF Armv8.1-VHE
4643  InitReg(MISCREG_CNTVOFF_EL2)
4644  .mon()
4645  .hyp()
4646  .mapsTo(MISCREG_CNTVOFF);
4647  // END Generic Timer (AArch64)
4648  InitReg(MISCREG_PMEVCNTR0_EL0)
4649  .allPrivileges();
4650 // .mapsTo(MISCREG_PMEVCNTR0);
4651  InitReg(MISCREG_PMEVCNTR1_EL0)
4652  .allPrivileges();
4653 // .mapsTo(MISCREG_PMEVCNTR1);
4654  InitReg(MISCREG_PMEVCNTR2_EL0)
4655  .allPrivileges();
4656 // .mapsTo(MISCREG_PMEVCNTR2);
4657  InitReg(MISCREG_PMEVCNTR3_EL0)
4658  .allPrivileges();
4659 // .mapsTo(MISCREG_PMEVCNTR3);
4660  InitReg(MISCREG_PMEVCNTR4_EL0)
4661  .allPrivileges();
4662 // .mapsTo(MISCREG_PMEVCNTR4);
4663  InitReg(MISCREG_PMEVCNTR5_EL0)
4664  .allPrivileges();
4665 // .mapsTo(MISCREG_PMEVCNTR5);
4666  InitReg(MISCREG_PMEVTYPER0_EL0)
4667  .allPrivileges();
4668 // .mapsTo(MISCREG_PMEVTYPER0);
4669  InitReg(MISCREG_PMEVTYPER1_EL0)
4670  .allPrivileges();
4671 // .mapsTo(MISCREG_PMEVTYPER1);
4672  InitReg(MISCREG_PMEVTYPER2_EL0)
4673  .allPrivileges();
4674 // .mapsTo(MISCREG_PMEVTYPER2);
4675  InitReg(MISCREG_PMEVTYPER3_EL0)
4676  .allPrivileges();
4677 // .mapsTo(MISCREG_PMEVTYPER3);
4678  InitReg(MISCREG_PMEVTYPER4_EL0)
4679  .allPrivileges();
4680 // .mapsTo(MISCREG_PMEVTYPER4);
4681  InitReg(MISCREG_PMEVTYPER5_EL0)
4682  .allPrivileges();
4683 // .mapsTo(MISCREG_PMEVTYPER5);
4684  InitReg(MISCREG_IL1DATA0_EL1)
4685  .allPrivileges().exceptUserMode();
4686  InitReg(MISCREG_IL1DATA1_EL1)
4687  .allPrivileges().exceptUserMode();
4688  InitReg(MISCREG_IL1DATA2_EL1)
4689  .allPrivileges().exceptUserMode();
4690  InitReg(MISCREG_IL1DATA3_EL1)
4691  .allPrivileges().exceptUserMode();
4692  InitReg(MISCREG_DL1DATA0_EL1)
4693  .allPrivileges().exceptUserMode();
4694  InitReg(MISCREG_DL1DATA1_EL1)
4695  .allPrivileges().exceptUserMode();
4696  InitReg(MISCREG_DL1DATA2_EL1)
4697  .allPrivileges().exceptUserMode();
4698  InitReg(MISCREG_DL1DATA3_EL1)
4699  .allPrivileges().exceptUserMode();
4700  InitReg(MISCREG_DL1DATA4_EL1)
4701  .allPrivileges().exceptUserMode();
4702  InitReg(MISCREG_L2ACTLR_EL1)
4703  .allPrivileges().exceptUserMode();
4704  InitReg(MISCREG_CPUACTLR_EL1)
4705  .allPrivileges().exceptUserMode();
4706  InitReg(MISCREG_CPUECTLR_EL1)
4707  .allPrivileges().exceptUserMode();
4708  InitReg(MISCREG_CPUMERRSR_EL1)
4709  .allPrivileges().exceptUserMode();
4710  InitReg(MISCREG_L2MERRSR_EL1)
4711  .unimplemented()
4712  .warnNotFail()
4713  .allPrivileges().exceptUserMode();
4714  InitReg(MISCREG_CBAR_EL1)
4715  .allPrivileges().exceptUserMode().writes(0);
4716  InitReg(MISCREG_CONTEXTIDR_EL2)
4717  .mon().hyp();
4718 
4719  // GICv3 AArch64
4720  InitReg(MISCREG_ICC_PMR_EL1)
4721  .res0(0xffffff00) // [31:8]
4722  .allPrivileges().exceptUserMode()
4723  .mapsTo(MISCREG_ICC_PMR);
4724  InitReg(MISCREG_ICC_IAR0_EL1)
4725  .allPrivileges().exceptUserMode().writes(0)
4726  .mapsTo(MISCREG_ICC_IAR0);
4727  InitReg(MISCREG_ICC_EOIR0_EL1)
4728  .allPrivileges().exceptUserMode().reads(0)
4729  .mapsTo(MISCREG_ICC_EOIR0);
4730  InitReg(MISCREG_ICC_HPPIR0_EL1)
4731  .allPrivileges().exceptUserMode().writes(0)
4732  .mapsTo(MISCREG_ICC_HPPIR0);
4733  InitReg(MISCREG_ICC_BPR0_EL1)
4734  .res0(0xfffffff8) // [31:3]
4735  .allPrivileges().exceptUserMode()
4736  .mapsTo(MISCREG_ICC_BPR0);
4737  InitReg(MISCREG_ICC_AP0R0_EL1)
4738  .allPrivileges().exceptUserMode()
4739  .mapsTo(MISCREG_ICC_AP0R0);
4740  InitReg(MISCREG_ICC_AP0R1_EL1)
4741  .allPrivileges().exceptUserMode()
4742  .mapsTo(MISCREG_ICC_AP0R1);
4743  InitReg(MISCREG_ICC_AP0R2_EL1)
4744  .allPrivileges().exceptUserMode()
4745  .mapsTo(MISCREG_ICC_AP0R2);
4746  InitReg(MISCREG_ICC_AP0R3_EL1)
4747  .allPrivileges().exceptUserMode()
4748  .mapsTo(MISCREG_ICC_AP0R3);
4749  InitReg(MISCREG_ICC_AP1R0_EL1)
4750  .banked64()
4751  .mapsTo(MISCREG_ICC_AP1R0);
4752  InitReg(MISCREG_ICC_AP1R0_EL1_NS)
4753  .bankedChild()
4754  .allPrivileges().exceptUserMode()
4755  .mapsTo(MISCREG_ICC_AP1R0_NS);
4756  InitReg(MISCREG_ICC_AP1R0_EL1_S)
4757  .bankedChild()
4758  .allPrivileges().exceptUserMode()
4759  .mapsTo(MISCREG_ICC_AP1R0_S);
4760  InitReg(MISCREG_ICC_AP1R1_EL1)
4761  .banked64()
4762  .mapsTo(MISCREG_ICC_AP1R1);
4763  InitReg(MISCREG_ICC_AP1R1_EL1_NS)
4764  .bankedChild()
4765  .allPrivileges().exceptUserMode()
4766  .mapsTo(MISCREG_ICC_AP1R1_NS);
4767  InitReg(MISCREG_ICC_AP1R1_EL1_S)
4768  .bankedChild()
4769  .allPrivileges().exceptUserMode()
4770  .mapsTo(MISCREG_ICC_AP1R1_S);
4771  InitReg(MISCREG_ICC_AP1R2_EL1)
4772  .banked64()
4773  .mapsTo(MISCREG_ICC_AP1R2);
4774  InitReg(MISCREG_ICC_AP1R2_EL1_NS)
4775  .bankedChild()
4776  .allPrivileges().exceptUserMode()
4777  .mapsTo(MISCREG_ICC_AP1R2_NS);
4778  InitReg(MISCREG_ICC_AP1R2_EL1_S)
4779  .bankedChild()
4780  .allPrivileges().exceptUserMode()
4781  .mapsTo(MISCREG_ICC_AP1R2_S);
4782  InitReg(MISCREG_ICC_AP1R3_EL1)
4783  .banked64()
4784  .mapsTo(MISCREG_ICC_AP1R3);
4785  InitReg(MISCREG_ICC_AP1R3_EL1_NS)
4786  .bankedChild()
4787  .allPrivileges().exceptUserMode()
4788  .mapsTo(MISCREG_ICC_AP1R3_NS);
4789  InitReg(MISCREG_ICC_AP1R3_EL1_S)
4790  .bankedChild()
4791  .allPrivileges().exceptUserMode()
4792  .mapsTo(MISCREG_ICC_AP1R3_S);
4793  InitReg(MISCREG_ICC_DIR_EL1)
4794  .res0(0xFF000000) // [31:24]
4795  .allPrivileges().exceptUserMode().reads(0)
4796  .mapsTo(MISCREG_ICC_DIR);
4797  InitReg(MISCREG_ICC_RPR_EL1)
4798  .allPrivileges().exceptUserMode().writes(0)
4799  .mapsTo(MISCREG_ICC_RPR);
4800  InitReg(MISCREG_ICC_SGI1R_EL1)
4801  .allPrivileges().exceptUserMode().reads(0)
4802  .mapsTo(MISCREG_ICC_SGI1R);
4803  InitReg(MISCREG_ICC_ASGI1R_EL1)
4804  .allPrivileges().exceptUserMode().reads(0)
4805  .mapsTo(MISCREG_ICC_ASGI1R);
4806  InitReg(MISCREG_ICC_SGI0R_EL1)
4807  .allPrivileges().exceptUserMode().reads(0)
4808  .mapsTo(MISCREG_ICC_SGI0R);
4809  InitReg(MISCREG_ICC_IAR1_EL1)
4810  .allPrivileges().exceptUserMode().writes(0)
4811  .mapsTo(MISCREG_ICC_IAR1);
4812  InitReg(MISCREG_ICC_EOIR1_EL1)
4813  .res0(0xFF000000) // [31:24]
4814  .allPrivileges().exceptUserMode().reads(0)
4815  .mapsTo(MISCREG_ICC_EOIR1);
4816  InitReg(MISCREG_ICC_HPPIR1_EL1)
4817  .allPrivileges().exceptUserMode().writes(0)
4818  .mapsTo(MISCREG_ICC_HPPIR1);
4819  InitReg(MISCREG_ICC_BPR1_EL1)
4820  .banked64()
4821  .mapsTo(MISCREG_ICC_BPR1);
4822  InitReg(MISCREG_ICC_BPR1_EL1_NS)
4823  .bankedChild()
4824  .res0(0xfffffff8) // [31:3]
4825  .allPrivileges().exceptUserMode()
4826  .mapsTo(MISCREG_ICC_BPR1_NS);
4827  InitReg(MISCREG_ICC_BPR1_EL1_S)
4828  .bankedChild()
4829  .res0(0xfffffff8) // [31:3]
4830  .secure().exceptUserMode()
4831  .mapsTo(MISCREG_ICC_BPR1_S);
4832  InitReg(MISCREG_ICC_CTLR_EL1)
4833  .banked64()
4834  .mapsTo(MISCREG_ICC_CTLR);
4835  InitReg(MISCREG_ICC_CTLR_EL1_NS)
4836  .bankedChild()
4837  .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4838  .allPrivileges().exceptUserMode()
4839  .mapsTo(MISCREG_ICC_CTLR_NS);
4840  InitReg(MISCREG_ICC_CTLR_EL1_S)
4841  .bankedChild()
4842  .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4843  .secure().exceptUserMode()
4844  .mapsTo(MISCREG_ICC_CTLR_S);
4845  InitReg(MISCREG_ICC_SRE_EL1)
4846  .banked()
4847  .mapsTo(MISCREG_ICC_SRE);
4848  InitReg(MISCREG_ICC_SRE_EL1_NS)
4849  .bankedChild()
4850  .res0(0xFFFFFFF8) // [31:3]
4851  .allPrivileges().exceptUserMode()
4852  .mapsTo(MISCREG_ICC_SRE_NS);
4853  InitReg(MISCREG_ICC_SRE_EL1_S)
4854  .bankedChild()
4855  .res0(0xFFFFFFF8) // [31:3]
4856  .secure().exceptUserMode()
4857  .mapsTo(MISCREG_ICC_SRE_S);
4858  InitReg(MISCREG_ICC_IGRPEN0_EL1)
4859  .res0(0xFFFFFFFE) // [31:1]
4860  .allPrivileges().exceptUserMode()
4861  .mapsTo(MISCREG_ICC_IGRPEN0);
4862  InitReg(MISCREG_ICC_IGRPEN1_EL1)
4863  .banked64()
4864  .mapsTo(MISCREG_ICC_IGRPEN1);
4866  .bankedChild()
4867  .res0(0xFFFFFFFE) // [31:1]
4868  .allPrivileges().exceptUserMode()
4869  .mapsTo(MISCREG_ICC_IGRPEN1_NS);
4870  InitReg(MISCREG_ICC_IGRPEN1_EL1_S)
4871  .bankedChild()
4872  .res0(0xFFFFFFFE) // [31:1]
4873  .secure().exceptUserMode()
4874  .mapsTo(MISCREG_ICC_IGRPEN1_S);
4875  InitReg(MISCREG_ICC_SRE_EL2)
4876  .hyp().mon()
4877  .mapsTo(MISCREG_ICC_HSRE);
4878  InitReg(MISCREG_ICC_CTLR_EL3)
4879  .allPrivileges().exceptUserMode()
4880  .mapsTo(MISCREG_ICC_MCTLR);
4881  InitReg(MISCREG_ICC_SRE_EL3)
4882  .allPrivileges().exceptUserMode()
4883  .mapsTo(MISCREG_ICC_MSRE);
4884  InitReg(MISCREG_ICC_IGRPEN1_EL3)
4885  .allPrivileges().exceptUserMode()
4886  .mapsTo(MISCREG_ICC_MGRPEN1);
4887 
4888  InitReg(MISCREG_ICH_AP0R0_EL2)
4889  .hyp().mon()
4890  .mapsTo(MISCREG_ICH_AP0R0);
4891  InitReg(MISCREG_ICH_AP0R1_EL2)
4892  .hyp().mon()
4893  .unimplemented()
4894  .mapsTo(MISCREG_ICH_AP0R1);
4895  InitReg(MISCREG_ICH_AP0R2_EL2)
4896  .hyp().mon()
4897  .unimplemented()
4898  .mapsTo(MISCREG_ICH_AP0R2);
4899  InitReg(MISCREG_ICH_AP0R3_EL2)
4900  .hyp().mon()
4901  .unimplemented()
4902  .mapsTo(MISCREG_ICH_AP0R3);
4903  InitReg(MISCREG_ICH_AP1R0_EL2)
4904  .hyp().mon()
4905  .mapsTo(MISCREG_ICH_AP1R0);
4906  InitReg(MISCREG_ICH_AP1R1_EL2)
4907  .hyp().mon()
4908  .unimplemented()
4909  .mapsTo(MISCREG_ICH_AP1R1);
4910  InitReg(MISCREG_ICH_AP1R2_EL2)
4911  .hyp().mon()
4912  .unimplemented()
4913  .mapsTo(MISCREG_ICH_AP1R2);
4914  InitReg(MISCREG_ICH_AP1R3_EL2)
4915  .hyp().mon()
4916  .unimplemented()
4917  .mapsTo(MISCREG_ICH_AP1R3);
4918  InitReg(MISCREG_ICH_HCR_EL2)
4919  .hyp().mon()
4920  .mapsTo(MISCREG_ICH_HCR);
4921  InitReg(MISCREG_ICH_VTR_EL2)
4922  .hyp().mon().writes(0)
4923  .mapsTo(MISCREG_ICH_VTR);
4924  InitReg(MISCREG_ICH_MISR_EL2)
4925  .hyp().mon().writes(0)
4926  .mapsTo(MISCREG_ICH_MISR);
4927  InitReg(MISCREG_ICH_EISR_EL2)
4928  .hyp().mon().writes(0)
4929  .mapsTo(MISCREG_ICH_EISR);
4930  InitReg(MISCREG_ICH_ELRSR_EL2)
4931  .hyp().mon().writes(0)
4932  .mapsTo(MISCREG_ICH_ELRSR);
4933  InitReg(MISCREG_ICH_VMCR_EL2)
4934  .hyp().mon()
4935  .mapsTo(MISCREG_ICH_VMCR);
4936  InitReg(MISCREG_ICH_LR0_EL2)
4937  .hyp().mon()
4938  .allPrivileges().exceptUserMode();
4939  InitReg(MISCREG_ICH_LR1_EL2)
4940  .hyp().mon()
4941  .allPrivileges().exceptUserMode();
4942  InitReg(MISCREG_ICH_LR2_EL2)
4943  .hyp().mon()
4944  .allPrivileges().exceptUserMode();
4945  InitReg(MISCREG_ICH_LR3_EL2)
4946  .hyp().mon()
4947  .allPrivileges().exceptUserMode();
4948  InitReg(MISCREG_ICH_LR4_EL2)
4949  .hyp().mon()
4950  .allPrivileges().exceptUserMode();
4951  InitReg(MISCREG_ICH_LR5_EL2)
4952  .hyp().mon()
4953  .allPrivileges().exceptUserMode();
4954  InitReg(MISCREG_ICH_LR6_EL2)
4955  .hyp().mon()
4956  .allPrivileges().exceptUserMode();
4957  InitReg(MISCREG_ICH_LR7_EL2)
4958  .hyp().mon()
4959  .allPrivileges().exceptUserMode();
4960  InitReg(MISCREG_ICH_LR8_EL2)
4961  .hyp().mon()
4962  .allPrivileges().exceptUserMode();
4963  InitReg(MISCREG_ICH_LR9_EL2)
4964  .hyp().mon()
4965  .allPrivileges().exceptUserMode();
4966  InitReg(MISCREG_ICH_LR10_EL2)
4967  .hyp().mon()
4968  .allPrivileges().exceptUserMode();
4969  InitReg(MISCREG_ICH_LR11_EL2)
4970  .hyp().mon()
4971  .allPrivileges().exceptUserMode();
4972  InitReg(MISCREG_ICH_LR12_EL2)
4973  .hyp().mon()
4974  .allPrivileges().exceptUserMode();
4975  InitReg(MISCREG_ICH_LR13_EL2)
4976  .hyp().mon()
4977  .allPrivileges().exceptUserMode();
4978  InitReg(MISCREG_ICH_LR14_EL2)
4979  .hyp().mon()
4980  .allPrivileges().exceptUserMode();
4981  InitReg(MISCREG_ICH_LR15_EL2)
4982  .hyp().mon()
4983  .allPrivileges().exceptUserMode();
4984 
4985  // GICv3 AArch32
4986  InitReg(MISCREG_ICC_AP0R0)
4987  .allPrivileges().exceptUserMode();
4988  InitReg(MISCREG_ICC_AP0R1)
4989  .allPrivileges().exceptUserMode();
4990  InitReg(MISCREG_ICC_AP0R2)
4991  .allPrivileges().exceptUserMode();
4992  InitReg(MISCREG_ICC_AP0R3)
4993  .allPrivileges().exceptUserMode();
4994  InitReg(MISCREG_ICC_AP1R0)
4995  .allPrivileges().exceptUserMode();
4996  InitReg(MISCREG_ICC_AP1R0_NS)
4997  .allPrivileges().exceptUserMode();
4998  InitReg(MISCREG_ICC_AP1R0_S)
4999  .allPrivileges().exceptUserMode();
5000  InitReg(MISCREG_ICC_AP1R1)
5001  .allPrivileges().exceptUserMode();
5002  InitReg(MISCREG_ICC_AP1R1_NS)
5003  .allPrivileges().exceptUserMode();
5004  InitReg(MISCREG_ICC_AP1R1_S)
5005  .allPrivileges().exceptUserMode();
5006  InitReg(MISCREG_ICC_AP1R2)
5007  .allPrivileges().exceptUserMode();
5008  InitReg(MISCREG_ICC_AP1R2_NS)
5009  .allPrivileges().exceptUserMode();
5010  InitReg(MISCREG_ICC_AP1R2_S)
5011  .allPrivileges().exceptUserMode();
5012  InitReg(MISCREG_ICC_AP1R3)
5013  .allPrivileges().exceptUserMode();
5014  InitReg(MISCREG_ICC_AP1R3_NS)
5015  .allPrivileges().exceptUserMode();
5016  InitReg(MISCREG_ICC_AP1R3_S)
5017  .allPrivileges().exceptUserMode();
5018  InitReg(MISCREG_ICC_ASGI1R)
5019  .allPrivileges().exceptUserMode().reads(0);
5020  InitReg(MISCREG_ICC_BPR0)
5021  .allPrivileges().exceptUserMode();
5022  InitReg(MISCREG_ICC_BPR1)
5023  .allPrivileges().exceptUserMode();
5024  InitReg(MISCREG_ICC_BPR1_NS)
5025  .allPrivileges().exceptUserMode();
5026  InitReg(MISCREG_ICC_BPR1_S)
5027  .allPrivileges().exceptUserMode();
5028  InitReg(MISCREG_ICC_CTLR)
5029  .allPrivileges().exceptUserMode();
5030  InitReg(MISCREG_ICC_CTLR_NS)
5031  .allPrivileges().exceptUserMode();
5032  InitReg(MISCREG_ICC_CTLR_S)
5033  .allPrivileges().exceptUserMode();
5034  InitReg(MISCREG_ICC_DIR)
5035  .allPrivileges().exceptUserMode().reads(0);
5036  InitReg(MISCREG_ICC_EOIR0)
5037  .allPrivileges().exceptUserMode().reads(0);
5038  InitReg(MISCREG_ICC_EOIR1)
5039  .allPrivileges().exceptUserMode().reads(0);
5040  InitReg(MISCREG_ICC_HPPIR0)
5041  .allPrivileges().exceptUserMode().writes(0);
5042  InitReg(MISCREG_ICC_HPPIR1)
5043  .allPrivileges().exceptUserMode().writes(0);
5044  InitReg(MISCREG_ICC_HSRE)
5045  .allPrivileges().exceptUserMode();
5046  InitReg(MISCREG_ICC_IAR0)
5047  .allPrivileges().exceptUserMode().writes(0);
5048  InitReg(MISCREG_ICC_IAR1)
5049  .allPrivileges().exceptUserMode().writes(0);
5050  InitReg(MISCREG_ICC_IGRPEN0)
5051  .allPrivileges().exceptUserMode();
5052  InitReg(MISCREG_ICC_IGRPEN1)
5053  .allPrivileges().exceptUserMode();
5054  InitReg(MISCREG_ICC_IGRPEN1_NS)
5055  .allPrivileges().exceptUserMode();
5056  InitReg(MISCREG_ICC_IGRPEN1_S)
5057  .allPrivileges().exceptUserMode();
5058  InitReg(MISCREG_ICC_MCTLR)
5059  .allPrivileges().exceptUserMode();
5060  InitReg(MISCREG_ICC_MGRPEN1)
5061  .allPrivileges().exceptUserMode();
5062  InitReg(MISCREG_ICC_MSRE)
5063  .allPrivileges().exceptUserMode();
5064  InitReg(MISCREG_ICC_PMR)
5065  .allPrivileges().exceptUserMode();
5066  InitReg(MISCREG_ICC_RPR)
5067  .allPrivileges().exceptUserMode().writes(0);
5068  InitReg(MISCREG_ICC_SGI0R)
5069  .allPrivileges().exceptUserMode().reads(0);
5070  InitReg(MISCREG_ICC_SGI1R)
5071  .allPrivileges().exceptUserMode().reads(0);
5072  InitReg(MISCREG_ICC_SRE)
5073  .allPrivileges().exceptUserMode();
5074  InitReg(MISCREG_ICC_SRE_NS)
5075  .allPrivileges().exceptUserMode();
5076  InitReg(MISCREG_ICC_SRE_S)
5077  .allPrivileges().exceptUserMode();
5078 
5079  InitReg(MISCREG_ICH_AP0R0)
5080  .hyp().mon();
5081  InitReg(MISCREG_ICH_AP0R1)
5082  .hyp().mon();
5083  InitReg(MISCREG_ICH_AP0R2)
5084  .hyp().mon();
5085  InitReg(MISCREG_ICH_AP0R3)
5086  .hyp().mon();
5087  InitReg(MISCREG_ICH_AP1R0)
5088  .hyp().mon();
5089  InitReg(MISCREG_ICH_AP1R1)
5090  .hyp().mon();
5091  InitReg(MISCREG_ICH_AP1R2)
5092  .hyp().mon();
5093  InitReg(MISCREG_ICH_AP1R3)
5094  .hyp().mon();
5095  InitReg(MISCREG_ICH_HCR)
5096  .hyp().mon();
5097  InitReg(MISCREG_ICH_VTR)
5098  .hyp().mon().writes(0);
5099  InitReg(MISCREG_ICH_MISR)
5100  .hyp().mon().writes(0);
5101  InitReg(MISCREG_ICH_EISR)
5102  .hyp().mon().writes(0);
5103  InitReg(MISCREG_ICH_ELRSR)
5104  .hyp().mon().writes(0);
5105  InitReg(MISCREG_ICH_VMCR)
5106  .hyp().mon();
5107  InitReg(MISCREG_ICH_LR0)
5108  .hyp().mon();
5109  InitReg(MISCREG_ICH_LR1)
5110  .hyp().mon();
5111  InitReg(MISCREG_ICH_LR2)
5112  .hyp().mon();
5113  InitReg(MISCREG_ICH_LR3)
5114  .hyp().mon();
5115  InitReg(MISCREG_ICH_LR4)
5116  .hyp().mon();
5117  InitReg(MISCREG_ICH_LR5)
5118  .hyp().mon();
5119  InitReg(MISCREG_ICH_LR6)
5120  .hyp().mon();
5121  InitReg(MISCREG_ICH_LR7)
5122  .hyp().mon();
5123  InitReg(MISCREG_ICH_LR8)
5124  .hyp().mon();
5125  InitReg(MISCREG_ICH_LR9)
5126  .hyp().mon();
5127  InitReg(MISCREG_ICH_LR10)
5128  .hyp().mon();
5129  InitReg(MISCREG_ICH_LR11)
5130  .hyp().mon();
5131  InitReg(MISCREG_ICH_LR12)
5132  .hyp().mon();
5133  InitReg(MISCREG_ICH_LR13)
5134  .hyp().mon();
5135  InitReg(MISCREG_ICH_LR14)
5136  .hyp().mon();
5137  InitReg(MISCREG_ICH_LR15)
5138  .hyp().mon();
5139  InitReg(MISCREG_ICH_LRC0)
5140  .mapsTo(MISCREG_ICH_LR0)
5141  .hyp().mon();
5142  InitReg(MISCREG_ICH_LRC1)
5143  .mapsTo(MISCREG_ICH_LR1)
5144  .hyp().mon();
5145  InitReg(MISCREG_ICH_LRC2)
5146  .mapsTo(MISCREG_ICH_LR2)
5147  .hyp().mon();
5148  InitReg(MISCREG_ICH_LRC3)
5149  .mapsTo(MISCREG_ICH_LR3)
5150  .hyp().mon();
5151  InitReg(MISCREG_ICH_LRC4)
5152  .mapsTo(MISCREG_ICH_LR4)
5153  .hyp().mon();
5154  InitReg(MISCREG_ICH_LRC5)
5155  .mapsTo(MISCREG_ICH_LR5)
5156  .hyp().mon();
5157  InitReg(MISCREG_ICH_LRC6)
5158  .mapsTo(MISCREG_ICH_LR6)
5159  .hyp().mon();
5160  InitReg(MISCREG_ICH_LRC7)
5161  .mapsTo(MISCREG_ICH_LR7)
5162  .hyp().mon();
5163  InitReg(MISCREG_ICH_LRC8)
5164  .mapsTo(MISCREG_ICH_LR8)
5165  .hyp().mon();
5166  InitReg(MISCREG_ICH_LRC9)
5167  .mapsTo(MISCREG_ICH_LR9)
5168  .hyp().mon();
5169  InitReg(MISCREG_ICH_LRC10)
5170  .mapsTo(MISCREG_ICH_LR10)
5171  .hyp().mon();
5172  InitReg(MISCREG_ICH_LRC11)
5173  .mapsTo(MISCREG_ICH_LR11)
5174  .hyp().mon();
5175  InitReg(MISCREG_ICH_LRC12)
5176  .mapsTo(MISCREG_ICH_LR12)
5177  .hyp().mon();
5178  InitReg(MISCREG_ICH_LRC13)
5179  .mapsTo(MISCREG_ICH_LR13)
5180  .hyp().mon();
5181  InitReg(MISCREG_ICH_LRC14)
5182  .mapsTo(MISCREG_ICH_LR14)
5183  .hyp().mon();
5184  InitReg(MISCREG_ICH_LRC15)
5185  .mapsTo(MISCREG_ICH_LR15)
5186  .hyp().mon();
5187 
5188  // SVE
5189  InitReg(MISCREG_ID_AA64ZFR0_EL1)
5190  .allPrivileges().exceptUserMode().writes(0);
5191  InitReg(MISCREG_ZCR_EL3)
5192  .mon();
5193  InitReg(MISCREG_ZCR_EL2)
5194  .hyp().mon();
5195  InitReg(MISCREG_ZCR_EL12)
5196  .unimplemented().warnNotFail();
5197  InitReg(MISCREG_ZCR_EL1)
5198  .allPrivileges().exceptUserMode();
5199 
5200  // Dummy registers
5201  InitReg(MISCREG_NOP)
5202  .allPrivileges();
5203  InitReg(MISCREG_RAZ)
5204  .allPrivileges().exceptUserMode().writes(0);
5205  InitReg(MISCREG_CP14_UNIMPL)
5206  .unimplemented()
5207  .warnNotFail();
5208  InitReg(MISCREG_CP15_UNIMPL)
5209  .unimplemented()
5210  .warnNotFail();
5211  InitReg(MISCREG_UNKNOWN);
5212  InitReg(MISCREG_IMPDEF_UNIMPL)
5213  .unimplemented()
5214  .warnNotFail(impdefAsNop);
5215 
5216  // RAS extension (unimplemented)
5217  InitReg(MISCREG_ERRIDR_EL1)
5218  .unimplemented()
5219  .warnNotFail();
5220  InitReg(MISCREG_ERRSELR_EL1)
5221  .unimplemented()
5222  .warnNotFail();
5223  InitReg(MISCREG_ERXFR_EL1)
5224  .unimplemented()
5225  .warnNotFail();
5226  InitReg(MISCREG_ERXCTLR_EL1)
5227  .unimplemented()
5228  .warnNotFail();
5229  InitReg(MISCREG_ERXSTATUS_EL1)
5230  .unimplemented()
5231  .warnNotFail();
5232  InitReg(MISCREG_ERXADDR_EL1)
5233  .unimplemented()
5234  .warnNotFail();
5235  InitReg(MISCREG_ERXMISC0_EL1)
5236  .unimplemented()
5237  .warnNotFail();
5238  InitReg(MISCREG_ERXMISC1_EL1)
5239  .unimplemented()
5240  .warnNotFail();
5241  InitReg(MISCREG_DISR_EL1)
5242  .unimplemented()
5243  .warnNotFail();
5244  InitReg(MISCREG_VSESR_EL2)
5245  .unimplemented()
5246  .warnNotFail();
5247  InitReg(MISCREG_VDISR_EL2)
5248  .unimplemented()
5249  .warnNotFail();
5250 
5251  // Register mappings for some unimplemented registers:
5252  // ESR_EL1 -> DFSR
5253  // RMR_EL1 -> RMR
5254  // RMR_EL2 -> HRMR
5255  // DBGDTR_EL0 -> DBGDTR{R or T}Xint
5256  // DBGDTRRX_EL0 -> DBGDTRRXint
5257  // DBGDTRTX_EL0 -> DBGDTRRXint
5258  // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
5259 
5260  completed = true;
5261 }
5262 
5263 } // namespace ArmISA
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:163
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
Definition: miscregs.cc:1109
MiscRegIndex
Definition: miscregs.hh:56
bitset< NUM_MISCREG_INFOS > miscRegInfo[NUM_MISCREGS]
Definition: miscregs.cc:2946
Bitfield< 5, 3 > reg
Definition: types.hh:87
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to write coprocessor registers.
Definition: miscregs.cc:1033
Bitfield< 7 > i
bool AArch32isUndefinedGenericTimer(MiscRegIndex reg, ThreadContext *tc)
Definition: miscregs.cc:1079
bool haveSecurity() const
Returns true if this system implements the Security Extensions.
Definition: system.hh:150
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8) ...
Definition: system.hh:193
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:132
void preUnflattenMiscReg()
Definition: miscregs.cc:1127
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:587
Definition: ccregs.hh:41
ThreadContext is the external interface to all thread state for anything outside of the CPU...
static ExceptionLevel currEL(const ThreadContext *tc)
Definition: utility.hh:141
int unflattenResultMiscReg[NUM_MISCREGS]
If the reg is a child reg of a banked set, then the parent is the last banked one in the list...
Definition: miscregs.cc:1124
ExceptionLevel
Definition: types.hh:583
MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1)
Definition: miscregs.cc:928
Bitfield< 0 > ns
Bitfield< 3, 2 > el
int unflattenMiscReg(int reg)
Definition: miscregs.cc:1143
void initializeMiscRegMetadata()
Definition: miscregs.cc:2949
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
Definition: miscregs.cc:1239
#define M5_FALLTHROUGH
Definition: compiler.hh:84
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
Definition: utility.cc:342
bool canReadAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)
Definition: miscregs.cc:1149
virtual BaseISA * getIsaPtr()=0
Bitfield< 15 > system
Definition: misc.hh:997
ExceptionLevel highestEL() const
Returns the highest implemented exception level.
Definition: system.hh:197
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
Definition: miscregs.cc:1091
Bitfield< 7, 5 > opc2
Definition: types.hh:114
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to read coprocessor registers.
Definition: miscregs.cc:987
#define warn(...)
Definition: logging.hh:208
bool EL2Enabled(ThreadContext *tc)
Definition: utility.cc:328
MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
Definition: miscregs.cc:128
virtual RegVal readMiscReg(RegIndex misc_reg)=0
MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
Definition: miscregs.cc:51
bool condGenericTimerSystemAccessTrapEL1(const MiscRegIndex miscReg, ThreadContext *tc)
Definition: utility.cc:917
bool canWriteAArch64SysReg(MiscRegIndex reg, HCR hcr, SCR scr, CPSR cpsr, ThreadContext *tc)
Definition: miscregs.cc:1191

Generated on Fri Jul 3 2020 15:42:39 for gem5 by doxygen 1.8.13