-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathhighlight_arm_system_insn.py
2489 lines (2375 loc) · 194 KB
/
highlight_arm_system_insn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# -*- coding: utf-8 -*-
#
# Script to highlight low-level instructions in ARM code.
# Automatically comment coprocessor accesses (MRC*/MCR*) with documentation.
#
# Support up to ARMv7-A / ARMv8 processors.
#
# Author: Guillaume Delugré.
#
from idc import *
from idautils import *
global current_arch
global summary_info
summary_info = {
"Page table": set(),
"Interrupt vectors": set(),
"Return from interrupt": set(),
"System calls": set(),
"Cryptography": set(),
}
CRYPTO_INSN = (
"AESE", "AESMC", "AESD",
"BCAX", "EOR3", "RAX1", "XAR",
"SHA1C", "SHA1H", "SHA1M", "SHA1P", "SHA1SU0", "SHA1SU1",
"SHA256H2", "SHA256H", "SHA256SU0", "SHA256SU1",
"SHA512H2", "SHA512H", "SHA512SU0", "SHA512SU1",
"SM3PARTW1", "SM3PARTW2", "SM3SS1", "SM3TT1A", "SM3TT1B", "SM3TT2A", "SM3TT2B",
"SM4E", "SM4EKEY"
)
SYSTEM_CALL_INSN = (
"SVC", "SWI", "SMC", "SMI", "HVC"
)
SYSTEM_INSN = (
# CPSR access
"MSR", "MRS", "CPSIE", "CPSID",
# CP access
"MRC", "MRC2", "MRRC", "MRRC2", "MCR", "MCR2", "MCRR", "MCRR2", "LDC", "LDC2", "STC", "STC2", "CDP", "CDP2",
# System (AArch64)
"SYS", "SYSL", "IC", "DC", "AT", "TLBI",
# Barriers,
"DSB", "DMB", "ISB", "CLREX",
# Misc
"SRS", "VMRS", "VMSR", "DBG", "DCPS1", "DCPS2", "DCPS3", "DRPS",
# Hints
"YIELD", "WFE", "WFI", "SEV", "SEVL", "HINT"
# Exceptions generating
"BKPT", # AArch32
"BRK", # AArch64
*SYSTEM_CALL_INSN,
# Special modes
"ENTERX", "LEAVEX", "BXJ"
# Return from exception
"RFE", # Aarch32
"ERET", # Aarch64
# Pointer authentication
"PACDA", "PACDZA", "PACDB", "PACDZB", "PACGA",
"PACIA", "PACIA1716", "PACIASP", "PACIAZ", "PACIZA",
"PACIB", "PACIB1716", "PACIBSP", "PACIBZ", "PACIZB",
"AUTDA", "AUTDZA", "AUTDB", "AUTDZB",
"AUTIA", "AUTIA1716", "AUTIASP", "AUTIAZ", "AUTIZA",
"AUTIB", "AUTIB1716", "AUTIBSP", "AUTIBZ", "AUTIZB",
# Crypto
*CRYPTO_INSN
)
# 64 bits registers accessible from AArch32.
# Extracted from the XML specifications for v8.7-A (2021-06).
AARCH32_COPROC_REGISTERS_64 = {
# MMU registers
( "p15", 0, "c2" ) : ( "TTBR0", "Translation Table Base Register 0" ),
( "p15", 1, "c2" ) : ( "TTBR1", "Translation Table Base Register 1" ),
( "p15", 6, "c2" ) : ( "VTTBR", "Virtualization Translation Table Base Register" ),
( "p15", 4, "c2" ) : ( "HTTBR", "Hyp Translation Table Base Register" ),
( "p15", 0, "c7" ) : ( "PAR", "Physical Address Register" ),
# Counters
( "p15", 0, "c9" ) : ( "PMCCNTR", "Performance Monitors Cycle Count Register" ),
( "p15", 0, "c14" ) : ( "CNTPCT", "Counter-timer Physical Count register" ),
( "p15", 1, "c14" ) : ( "CNTVCT", "Counter-timer Virtual Count register" ),
( "p15", 2, "c14" ) : ( "CNTP_CVAL", "Counter-timer Physical Timer CompareValue register",
"CNTHP_CVAL", "Counter-timer Hyp Physical CompareValue register",
"CNTHPS_CVAL", "Counter-timer Secure Physical Timer CompareValue Register (EL2)" ),
( "p15", 3, "c14" ) : ( "CNTV_CVAL", "Counter-timer Virtual Timer CompareValue register",
"CNTHV_CVAL", "Counter-timer Virtual Timer CompareValue register (EL2)",
"CNTHVS_CVAL", "Counter-timer Secure Virtual Timer CompareValue Register (EL2)" ),
( "p15", 4, "c14" ) : ( "CNTVOFF", "Counter-timer Virtual Offset register" ),
( "p15", 6, "c14" ) : ( "CNTHP_CVAL", "Counter-timer Hyp Physical CompareValue register" ),
( "p15", 8, "c14" ) : ( "CNTPCTSS", "Counter-timer Self-Synchronized Physical Count register" ),
( "p15", 9, "c14" ) : ( "CNTVCTSS", "Counter-timer Self-Synchronized Virtual Count register" ),
# CPU control/status registers.
( "p15", 0, "c15" ) : ( "CPUACTLR", "CPU Auxiliary Control Register" ),
( "p15", 1, "c15" ) : ( "CPUECTLR", "CPU Extended Control Register" ),
( "p15", 2, "c15" ) : ( "CPUMERRSR", "CPU Memory Error Syndrome Register" ),
( "p15", 3, "c15" ) : ( "L2MERRSR", "L2 Memory Error Syndrome Register" ),
# Interrupts
( "p15", 0, "c12" ) : ( "ICC_SGI1R", "Interrupt Controller Software Generated Interrupt Group 1 Register" ),
( "p15", 1, "c12" ) : ( "ICC_ASGI1R", "Interrupt Controller Alias Software Generated Interrupt Group 1 Register" ),
( "p15", 2, "c12" ) : ( "ICC_SGI0R", "Interrupt Controller Software Generated Interrupt Group 0 Register" ),
# Preload Engine operations
( "p15", 0, "c11" ) : ( "N/A", "Preload Engine Program New Channel operation" ),
# Debug registers
( "p14", 0, "c1" ) : ( "DBGDRAR", "Debug ROM Address Register" ),
( "p14", 0, "c2" ) : ( "DBGDSAR", "Debug Self Address Register" ),
# Activity monitors
( "p15", 0, "c0" ) : ( "AMEVCNTR00", "Activity Monitors Event Counter Registers 0" ),
( "p15", 1, "c0" ) : ( "AMEVCNTR01", "Activity Monitors Event Counter Registers 0" ),
( "p15", 2, "c0" ) : ( "AMEVCNTR02", "Activity Monitors Event Counter Registers 0" ),
( "p15", 3, "c0" ) : ( "AMEVCNTR03", "Activity Monitors Event Counter Registers 0" ),
( "p15", 0, "c2" ) : ( "AMEVCNTR10", "Activity Monitors Event Counter Registers 1" ),
( "p15", 1, "c2" ) : ( "AMEVCNTR11", "Activity Monitors Event Counter Registers 1" ),
( "p15", 2, "c2" ) : ( "AMEVCNTR12", "Activity Monitors Event Counter Registers 1" ),
( "p15", 3, "c2" ) : ( "AMEVCNTR13", "Activity Monitors Event Counter Registers 1" ),
( "p15", 4, "c2" ) : ( "AMEVCNTR14", "Activity Monitors Event Counter Registers 1" ),
( "p15", 5, "c2" ) : ( "AMEVCNTR15", "Activity Monitors Event Counter Registers 1" ),
( "p15", 6, "c2" ) : ( "AMEVCNTR16", "Activity Monitors Event Counter Registers 1" ),
( "p15", 7, "c2" ) : ( "AMEVCNTR17", "Activity Monitors Event Counter Registers 1" ),
( "p15", 0, "c3" ) : ( "AMEVCNTR18", "Activity Monitors Event Counter Registers 1" ),
( "p15", 1, "c3" ) : ( "AMEVCNTR19", "Activity Monitors Event Counter Registers 1" ),
( "p15", 2, "c3" ) : ( "AMEVCNTR110", "Activity Monitors Event Counter Registers 1" ),
( "p15", 3, "c3" ) : ( "AMEVCNTR111", "Activity Monitors Event Counter Registers 1" ),
( "p15", 4, "c3" ) : ( "AMEVCNTR112", "Activity Monitors Event Counter Registers 1" ),
( "p15", 5, "c3" ) : ( "AMEVCNTR113", "Activity Monitors Event Counter Registers 1" ),
( "p15", 6, "c3" ) : ( "AMEVCNTR114", "Activity Monitors Event Counter Registers 1" ),
( "p15", 7, "c3" ) : ( "AMEVCNTR115", "Activity Monitors Event Counter Registers 1" ),
}
# Extracted from the XML specifications for v8.7-A (2021-06).
AARCH32_COPROC_REGISTERS = {
( "p15", "c0", 0, "c0", 0 ) : ( "MIDR", "Main ID Register" ),
( "p15", "c0", 0, "c0", 1 ) : ( "CTR", "Cache Type Register" ),
( "p15", "c0", 0, "c0", 2 ) : ( "TCMTR", "TCM Type Register" ),
( "p15", "c0", 0, "c0", 3 ) : ( "TLBTR", "TLB Type Register" ),
( "p15", "c0", 0, "c0", 5 ) : ( "MPIDR", "Multiprocessor Affinity Register" ),
( "p15", "c0", 0, "c0", 6 ) : ( "REVIDR", "Revision ID Register" ),
# Aliases
( "p15", "c0", 0, "c0", 4 ) : ( "MIDR", "Main ID Register" ),
( "p15", "c0", 0, "c0", 7 ) : ( "MIDR", "Main ID Register" ),
# CPUID registers
( "p15", "c0", 0, "c1", 0 ) : ( "ID_PFR0", "Processor Feature Register 0" ),
( "p15", "c0", 0, "c1", 1 ) : ( "ID_PFR1", "Processor Feature Register 1" ),
( "p15", "c0", 0, "c3", 4 ) : ( "ID_PFR2", "Processor Feature Register 2" ),
( "p15", "c0", 0, "c1", 2 ) : ( "ID_DFR0", "Debug Feature Register 0" ),
( "p15", "c0", 0, "c1", 3 ) : ( "ID_AFR0", "Auxiliary Feature Register 0" ),
( "p15", "c0", 0, "c1", 4 ) : ( "ID_MMFR0", "Memory Model Feature Register 0" ),
( "p15", "c0", 0, "c1", 5 ) : ( "ID_MMFR1", "Memory Model Feature Register 1" ),
( "p15", "c0", 0, "c1", 6 ) : ( "ID_MMFR2", "Memory Model Feature Register 2" ),
( "p15", "c0", 0, "c1", 7 ) : ( "ID_MMFR3", "Memory Model Feature Register 3" ),
( "p15", "c0", 0, "c2", 6 ) : ( "ID_MMFR4", "Memory Model Feature Register 4" ),
( "p15", "c0", 0, "c3", 6 ) : ( "ID_MMFR5", "Memory Model Feature Register 5" ),
( "p15", "c0", 0, "c2", 0 ) : ( "ID_ISAR0", "Instruction Set Attribute Register 0" ),
( "p15", "c0", 0, "c2", 1 ) : ( "ID_ISAR1", "Instruction Set Attribute Register 1" ),
( "p15", "c0", 0, "c2", 2 ) : ( "ID_ISAR2", "Instruction Set Attribute Register 2" ),
( "p15", "c0", 0, "c2", 3 ) : ( "ID_ISAR3", "Instruction Set Attribute Register 3" ),
( "p15", "c0", 0, "c2", 4 ) : ( "ID_ISAR4", "Instruction Set Attribute Register 4" ),
( "p15", "c0", 0, "c2", 5 ) : ( "ID_ISAR5", "Instruction Set Attribute Register 5" ),
( "p15", "c0", 0, "c2", 7 ) : ( "ID_ISAR6", "Instruction Set Attribute Register 6" ),
( "p15", "c0", 1, "c0", 0 ) : ( "CCSIDR", "Current Cache Size ID Register" ),
( "p15", "c0", 1, "c0", 2 ) : ( "CCSIDR2", "Current Cache Size ID Register 2" ),
( "p15", "c0", 1, "c0", 1 ) : ( "CLIDR", "Cache Level ID Register" ),
( "p15", "c0", 1, "c0", 7 ) : ( "AIDR", "Auxiliary ID Register" ),
( "p15", "c0", 2, "c0", 0 ) : ( "CSSELR", "Cache Size Selection Register" ),
( "p15", "c0", 4, "c0", 0 ) : ( "VPIDR", "Virtualization Processor ID Register" ),
( "p15", "c0", 4, "c0", 5 ) : ( "VMPIDR", "Virtualization Multiprocessor ID Register" ),
# System control registers
( "p15", "c1", 0, "c0", 0 ) : ( "SCTLR", "System Control Register" ),
( "p15", "c1", 0, "c0", 1 ) : ( "ACTLR", "Auxiliary Control Register" ),
( "p15", "c1", 0, "c0", 3 ) : ( "ACTLR2", "Auxiliary Control Register 2" ),
( "p15", "c1", 0, "c0", 2 ) : ( "CPACR", "Architectural Feature Access Control Register" ),
( "p15", "c1", 0, "c1", 0 ) : ( "SCR", "Secure Configuration Register" ),
( "p15", "c1", 0, "c1", 1 ) : ( "SDER", "Secure Debug Enable Register" ),
( "p15", "c1", 0, "c3", 1 ) : ( "SDCR", "Secure Debug Control Register" ),
( "p15", "c1", 0, "c1", 2 ) : ( "NSACR", "Non-Secure Access Control Register" ),
( "p15", "c1", 4, "c0", 0 ) : ( "HSCTLR", "Hyp System Control Register" ),
( "p15", "c1", 4, "c0", 1 ) : ( "HACTLR", "Hyp Auxiliary Control Register" ),
( "p15", "c1", 4, "c0", 3 ) : ( "HACTLR2", "Hyp Auxiliary Control Register 2" ),
( "p15", "c1", 4, "c1", 0 ) : ( "HCR", "Hyp Configuration Register" ),
( "p15", "c1", 4, "c1", 4 ) : ( "HCR2", "Hyp Configuration Register 2" ),
( "p15", "c1", 4, "c1", 1 ) : ( "HDCR", "Hyp Debug Control Register" ),
( "p15", "c1", 4, "c1", 2 ) : ( "HCPTR", "Hyp Architectural Feature Trap Register" ),
( "p15", "c1", 4, "c1", 3 ) : ( "HSTR", "Hyp System Trap Register" ),
( "p15", "c1", 4, "c1", 7 ) : ( "HACR", "Hyp Auxiliary Configuration Register" ),
# Translation Table Base Registers
( "p15", "c2", 0, "c0", 0 ) : ( "TTBR0", "Translation Table Base Register 0" ),
( "p15", "c2", 0, "c0", 1 ) : ( "TTBR1", "Translation Table Base Register 1" ),
( "p15", "c2", 4, "c0", 2 ) : ( "HTCR", "Hyp Translation Control Register" ),
( "p15", "c2", 4, "c1", 2 ) : ( "VTCR", "Virtualization Translation Control Register" ),
( "p15", "c2", 0, "c0", 2 ) : ( "TTBCR", "Translation Table Base Control Register" ),
( "p15", "c2", 0, "c0", 3 ) : ( "TTBCR2", "Translation Table Base Control Register 2" ),
# Domain Access Control registers
( "p15", "c3", 0, "c0", 0 ) : ( "DACR", "Domain Access Control Register" ),
# Fault Status registers
( "p15", "c5", 0, "c0", 0 ) : ( "DFSR", "Data Fault Status Register" ),
( "p15", "c5", 0, "c0", 1 ) : ( "IFSR", "Instruction Fault Status Register" ),
( "p15", "c5", 0, "c1", 0 ) : ( "ADFSR", "Auxiliary Data Fault Status Register" ),
( "p15", "c5", 0, "c1", 1 ) : ( "AIFSR", "Auxiliary Instruction Fault Status Register" ),
( "p15", "c5", 4, "c1", 0 ) : ( "HADFSR", "Hyp Auxiliary Data Fault Status Register" ),
( "p15", "c5", 4, "c1", 1 ) : ( "HAIFSR", "Hyp Auxiliary Instruction Fault Status Register" ),
( "p15", "c5", 4, "c2", 0 ) : ( "HSR", "Hyp Syndrome Register" ),
# Fault Address registers
( "p15", "c6", 0, "c0", 0 ) : ( "DFAR", "Data Fault Address Register" ),
( "p15", "c6", 0, "c0", 1 ) : ( "N/A", "Watchpoint Fault Address" ), # ARM11
( "p15", "c6", 0, "c0", 2 ) : ( "IFAR", "Instruction Fault Address Register" ),
( "p15", "c6", 4, "c0", 0 ) : ( "HDFAR", "Hyp Data Fault Address Register" ),
( "p15", "c6", 4, "c0", 2 ) : ( "HIFAR", "Hyp Instruction Fault Address Register" ),
( "p15", "c6", 4, "c0", 4 ) : ( "HPFAR", "Hyp IPA Fault Address Register" ),
# Cache maintenance registers
( "p15", "c7", 0, "c0", 4 ) : ( "NOP", "No Operation / Wait For Interrupt" ),
( "p15", "c7", 0, "c1", 0 ) : ( "ICIALLUIS", "Instruction Cache Invalidate All to PoU, Inner Shareable" ),
( "p15", "c7", 0, "c1", 6 ) : ( "BPIALLIS", "Branch Predictor Invalidate All, Inner Shareable" ),
( "p15", "c7", 0, "c4", 0 ) : ( "PAR", "Physical Address Register" ),
( "p15", "c7", 0, "c5", 0 ) : ( "ICIALLU", "Instruction Cache Invalidate All to PoU" ),
( "p15", "c7", 0, "c5", 1 ) : ( "ICIMVAU", "Instruction Cache line Invalidate by VA to PoU" ),
( "p15", "c7", 0, "c5", 2 ) : ( "N/A", "Invalidate all instruction caches by set/way" ), # ARM11
( "p15", "c7", 0, "c5", 4 ) : ( "CP15ISB", "Instruction Synchronization Barrier System instruction" ),
( "p15", "c7", 0, "c5", 6 ) : ( "BPIALL", "Branch Predictor Invalidate All" ),
( "p15", "c7", 0, "c5", 7 ) : ( "BPIMVA", "Branch Predictor Invalidate by VA" ),
( "p15", "c7", 0, "c6", 0 ) : ( "N/A", "Invalidate entire data cache" ),
( "p15", "c7", 0, "c6", 1 ) : ( "DCIMVAC", "Data Cache line Invalidate by VA to PoC" ),
( "p15", "c7", 0, "c6", 2 ) : ( "DCISW", "Data Cache line Invalidate by Set/Way" ),
( "p15", "c7", 0, "c7", 0 ) : ( "N/A", "Invalidate instruction cache and data cache" ), # ARM11
( "p15", "c7", 0, "c8", 0 ) : ( "ATS1CPR", "Address Translate Stage 1 Current state PL1 Read" ),
( "p15", "c7", 0, "c8", 1 ) : ( "ATS1CPW", "Address Translate Stage 1 Current state PL1 Write" ),
( "p15", "c7", 0, "c8", 2 ) : ( "ATS1CUR", "Address Translate Stage 1 Current state Unprivileged Read" ),
( "p15", "c7", 0, "c8", 3 ) : ( "ATS1CUW", "Address Translate Stage 1 Current state Unprivileged Write" ),
( "p15", "c7", 0, "c8", 4 ) : ( "ATS12NSOPR", "Address Translate Stages 1 and 2 Non-secure Only PL1 Read" ),
( "p15", "c7", 0, "c8", 5 ) : ( "ATS12NSOPW", "Address Translate Stages 1 and 2 Non-secure Only PL1 Write" ),
( "p15", "c7", 0, "c8", 6 ) : ( "ATS12NSOUR", "Address Translate Stages 1 and 2 Non-secure Only Unprivileged Read" ),
( "p15", "c7", 0, "c8", 7 ) : ( "ATS12NSOUW", "Address Translate Stages 1 and 2 Non-secure Only Unprivileged Write" ),
( "p15", "c7", 0, "c9", 0 ) : ( "ATS1CPRP", "Address Translate Stage 1 Current state PL1 Read PAN" ),
( "p15", "c7", 0, "c9", 1 ) : ( "ATS1CPWP", "Address Translate Stage 1 Current state PL1 Write PAN" ),
( "p15", "c7", 0, "c10", 0 ) : ( "N/A", "Clean entire data cache" ), # ARM11
( "p15", "c7", 0, "c10", 1 ) : ( "DCCMVAC", "Data Cache line Clean by VA to PoC" ),
( "p15", "c7", 0, "c10", 2 ) : ( "DCCSW", "Data Cache line Clean by Set/Way" ),
( "p15", "c7", 0, "c10", 3 ) : ( "N/A", "Test and clean data cache" ), # ARM9
( "p15", "c7", 0, "c10", 4 ) : ( "CP15DSB", "Data Synchronization Barrier System instruction" ),
( "p15", "c7", 0, "c10", 5 ) : ( "CP15DMB", "Data Memory Barrier System instruction" ),
( "p15", "c7", 0, "c10", 6 ) : ( "N/A", "Read Cache Dirty Status Register" ), # ARM11
( "p15", "c7", 0, "c11", 1 ) : ( "DCCMVAU", "Data Cache line Clean by VA to PoU" ),
( "p15", "c7", 0, "c12", 4 ) : ( "N/A", "Read Block Transfer Status Register" ), # ARM11
( "p15", "c7", 0, "c12", 5 ) : ( "N/A", "Stop Prefetch Range" ), # ARM11
( "p15", "c7", 0, "c13", 1 ) : ( "NOP", "No Operation / Prefetch Instruction Cache Line" ),
( "p15", "c7", 0, "c14", 0 ) : ( "N/A", "Clean and invalidate entire data cache" ), # ARM11
( "p15", "c7", 0, "c14", 1 ) : ( "DCCIMVAC", "Data Cache line Clean and Invalidate by VA to PoC" ),
( "p15", "c7", 0, "c14", 2 ) : ( "DCCISW", "Data Cache line Clean and Invalidate by Set/Way" ),
( "p15", "c7", 0, "c14", 3 ) : ( "N/A", "Test, clean, and invalidate data cache" ), # ARM9
( "p15", "c7", 4, "c8", 0 ) : ( "ATS1HR", "Address Translate Stage 1 Hyp mode Read" ),
( "p15", "c7", 4, "c8", 1 ) : ( "ATS1HW", "Stage 1 Hyp mode write" ),
# TLB maintenance operations
( "p15", "c8", 0, "c3", 0 ) : ( "TLBIALLIS", "TLB Invalidate All, Inner Shareable" ),
( "p15", "c8", 0, "c3", 1 ) : ( "TLBIMVAIS", "TLB Invalidate by VA, Inner Shareable" ),
( "p15", "c8", 0, "c3", 2 ) : ( "TLBIASIDIS", "TLB Invalidate by ASID match, Inner Shareable" ),
( "p15", "c8", 0, "c3", 3 ) : ( "TLBIMVAAIS", "TLB Invalidate by VA, All ASID, Inner Shareable" ),
( "p15", "c8", 0, "c3", 5 ) : ( "TLBIMVALIS", "TLB Invalidate by VA, Last level, Inner Shareable" ),
( "p15", "c8", 0, "c3", 7 ) : ( "TLBIMVAALIS", "TLB Invalidate by VA, All ASID, Last level, Inner Shareable" ),
( "p15", "c8", 0, "c5", 0 ) : ( "ITLBIALL", "Instruction TLB Invalidate All" ),
( "p15", "c8", 0, "c5", 1 ) : ( "ITLBIMVA", "Instruction TLB Invalidate by VA" ),
( "p15", "c8", 0, "c5", 2 ) : ( "ITLBIASID", "Instruction TLB Invalidate by ASID match" ),
( "p15", "c8", 0, "c6", 0 ) : ( "DTLBIALL", "Data TLB Invalidate All" ),
( "p15", "c8", 0, "c6", 1 ) : ( "DTLBIMVA", "Data TLB Invalidate by VA" ),
( "p15", "c8", 0, "c6", 2 ) : ( "DTLBIASID", "Data TLB Invalidate by ASID match" ),
( "p15", "c8", 0, "c7", 0 ) : ( "TLBIALL", "TLB Invalidate All" ),
( "p15", "c8", 0, "c7", 1 ) : ( "TLBIMVA", "TLB Invalidate by VA" ),
( "p15", "c8", 0, "c7", 2 ) : ( "TLBIASID", "TLB Invalidate by ASID match" ),
( "p15", "c8", 0, "c7", 3 ) : ( "TLBIMVAA", "TLB Invalidate by VA, All ASID" ),
( "p15", "c8", 0, "c7", 5 ) : ( "TLBIMVAL", "TLB Invalidate by VA, Last level" ),
( "p15", "c8", 0, "c7", 7 ) : ( "TLBIMVAAL", "TLB Invalidate by VA, All ASID, Last level" ),
( "p15", "c8", 4, "c0", 1 ) : ( "TLBIIPAS2IS", "TLB Invalidate by Intermediate Physical Address, Stage 2, Inner Shareable" ),
( "p15", "c8", 4, "c0", 5 ) : ( "TLBIIPAS2LIS", "TLB Invalidate by Intermediate Physical Address, Stage 2, Last level, Inner Shareable" ),
( "p15", "c8", 4, "c3", 0 ) : ( "TLBIALLHIS", "TLB Invalidate All, Hyp mode, Inner Shareable" ),
( "p15", "c8", 4, "c3", 1 ) : ( "TLBIMVAHIS", "TLB Invalidate by VA, Hyp mode, Inner Shareable" ),
( "p15", "c8", 4, "c3", 4 ) : ( "TLBIALLNSNHIS", "TLB Invalidate All, Non-Secure Non-Hyp, Inner Shareable" ),
( "p15", "c8", 4, "c3", 5 ) : ( "TLBIMVALHIS", "TLB Invalidate by VA, Last level, Hyp mode, Inner Shareable" ),
( "p15", "c8", 4, "c4", 1 ) : ( "TLBIIPAS2", "TLB Invalidate by Intermediate Physical Address, Stage 2" ),
( "p15", "c8", 4, "c4", 5 ) : ( "TLBIIPAS2L", "TLB Invalidate by Intermediate Physical Address, Stage 2, Last level" ),
( "p15", "c8", 4, "c7", 0 ) : ( "TLBIALLH", "TLB Invalidate All, Hyp mode" ),
( "p15", "c8", 4, "c7", 1 ) : ( "TLBIMVAH", "TLB Invalidate by VA, Hyp mode" ),
( "p15", "c8", 4, "c7", 4 ) : ( "TLBIALLNSNH", "TLB Invalidate All, Non-Secure Non-Hyp" ),
( "p15", "c8", 4, "c7", 5 ) : ( "TLBIMVALH", "TLB Invalidate by VA, Last level, Hyp mode" ),
( "p15", "c9", 0, "c0", 0 ) : ( "N/A", "Data Cache Lockdown" ), # ARM11
( "p15", "c9", 0, "c0", 1 ) : ( "N/A", "Instruction Cache Lockdown" ), # ARM11
( "p15", "c9", 0, "c1", 0 ) : ( "N/A", "Data TCM Region" ), # ARM11
( "p15", "c9", 0, "c1", 1 ) : ( "N/A", "Instruction TCM Region" ), # ARM11
( "p15", "c9", 1, "c0", 2 ) : ( "L2CTLR", "L2 Control Register" ),
( "p15", "c9", 1, "c0", 3 ) : ( "L2ECTLR", "L2 Extended Control Register" ),
# Performance monitor registers
( "p15", "c9", 0, "c12", 0 ) : ( "PMCR", "Performance Monitors Control Register" ),
( "p15", "c9", 0, "c12", 1) : ( "PMCNTENSET", "Performance Monitor Count Enable Set Register" ),
( "p15", "c9", 0, "c12", 2) : ( "PMCNTENCLR", "Performance Monitor Control Enable Clear Register" ),
( "p15", "c9", 0, "c12", 3 ) : ( "PMOVSR", "Performance Monitors Overflow Flag Status Register" ),
( "p15", "c9", 0, "c12", 4 ) : ( "PMSWINC", "Performance Monitors Software Increment register" ),
( "p15", "c9", 0, "c12", 5 ) : ( "PMSELR", "Performance Monitors Event Counter Selection Register" ),
( "p15", "c9", 0, "c12", 6 ) : ( "PMCEID0", "Performance Monitors Common Event Identification register 0" ),
( "p15", "c9", 0, "c12", 7 ) : ( "PMCEID1", "Performance Monitors Common Event Identification register 1" ),
( "p15", "c9", 0, "c13", 0 ) : ( "PMCCNTR", "Performance Monitors Cycle Count Register" ),
( "p15", "c9", 0, "c13", 1 ) : ( "PMXEVTYPER", "Performance Monitors Selected Event Type Register" ),
( "p15", "c9", 0, "c13", 2 ) : ( "PMXEVCNTR", "Performance Monitors Selected Event Count Register" ),
( "p15", "c9", 0, "c14", 0 ) : ( "PMUSERENR", "Performance Monitors User Enable Register" ),
( "p15", "c9", 0, "c14", 1 ) : ( "PMINTENSET", "Performance Monitors Interrupt Enable Set register" ),
( "p15", "c9", 0, "c14", 2 ) : ( "PMINTENCLR", "Performance Monitors Interrupt Enable Clear register" ),
( "p15", "c9", 0, "c14", 3 ) : ( "PMOVSSET", "Performance Monitors Overflow Flag Status Set register" ),
( "p15", "c9", 0, "c14", 4 ) : ( "PMCEID2", "Performance Monitors Common Event Identification register 2" ),
( "p15", "c9", 0, "c14", 5 ) : ( "PMCEID3", "Performance Monitors Common Event Identification register 3" ),
( "p15", "c9", 0, "c14", 6 ) : ( "PMMIR", "Performance Monitors Machine Identification Register" ),
( "p15", "c14", 0, "c8", 0 ) : ( "PMEVCNTR0", "Performance Monitors Event Count Register 0" ),
( "p15", "c14", 0, "c8", 1 ) : ( "PMEVCNTR1", "Performance Monitors Event Count Register 1" ),
( "p15", "c14", 0, "c8", 2 ) : ( "PMEVCNTR2", "Performance Monitors Event Count Register 2" ),
( "p15", "c14", 0, "c8", 3 ) : ( "PMEVCNTR3", "Performance Monitors Event Count Register 3" ),
( "p15", "c14", 0, "c8", 4 ) : ( "PMEVCNTR4", "Performance Monitors Event Count Register 4" ),
( "p15", "c14", 0, "c8", 5 ) : ( "PMEVCNTR5", "Performance Monitors Event Count Register 5" ),
( "p15", "c14", 0, "c8", 6 ) : ( "PMEVCNTR6", "Performance Monitors Event Count Register 6" ),
( "p15", "c14", 0, "c8", 7 ) : ( "PMEVCNTR7", "Performance Monitors Event Count Register 7" ),
( "p15", "c14", 0, "c9", 0 ) : ( "PMEVCNTR8", "Performance Monitors Event Count Register 8" ),
( "p15", "c14", 0, "c9", 1 ) : ( "PMEVCNTR9", "Performance Monitors Event Count Register 9" ),
( "p15", "c14", 0, "c9", 2 ) : ( "PMEVCNTR10", "Performance Monitors Event Count Register 10" ),
( "p15", "c14", 0, "c9", 3 ) : ( "PMEVCNTR11", "Performance Monitors Event Count Register 11" ),
( "p15", "c14", 0, "c9", 4 ) : ( "PMEVCNTR12", "Performance Monitors Event Count Register 12" ),
( "p15", "c14", 0, "c9", 5 ) : ( "PMEVCNTR13", "Performance Monitors Event Count Register 13" ),
( "p15", "c14", 0, "c9", 6 ) : ( "PMEVCNTR14", "Performance Monitors Event Count Register 14" ),
( "p15", "c14", 0, "c9", 7 ) : ( "PMEVCNTR15", "Performance Monitors Event Count Register 15" ),
( "p15", "c14", 0, "c10", 0 ) : ( "PMEVCNTR16", "Performance Monitors Event Count Register 16" ),
( "p15", "c14", 0, "c10", 1 ) : ( "PMEVCNTR17", "Performance Monitors Event Count Register 17" ),
( "p15", "c14", 0, "c10", 2 ) : ( "PMEVCNTR18", "Performance Monitors Event Count Register 18" ),
( "p15", "c14", 0, "c10", 3 ) : ( "PMEVCNTR19", "Performance Monitors Event Count Register 19" ),
( "p15", "c14", 0, "c10", 4 ) : ( "PMEVCNTR20", "Performance Monitors Event Count Register 20" ),
( "p15", "c14", 0, "c10", 5 ) : ( "PMEVCNTR21", "Performance Monitors Event Count Register 21" ),
( "p15", "c14", 0, "c10", 6 ) : ( "PMEVCNTR22", "Performance Monitors Event Count Register 22" ),
( "p15", "c14", 0, "c10", 7 ) : ( "PMEVCNTR23", "Performance Monitors Event Count Register 23" ),
( "p15", "c14", 0, "c11", 0 ) : ( "PMEVCNTR24", "Performance Monitors Event Count Register 24" ),
( "p15", "c14", 0, "c11", 1 ) : ( "PMEVCNTR25", "Performance Monitors Event Count Register 25" ),
( "p15", "c14", 0, "c11", 2 ) : ( "PMEVCNTR26", "Performance Monitors Event Count Register 26" ),
( "p15", "c14", 0, "c11", 3 ) : ( "PMEVCNTR27", "Performance Monitors Event Count Register 27" ),
( "p15", "c14", 0, "c11", 4 ) : ( "PMEVCNTR28", "Performance Monitors Event Count Register 28" ),
( "p15", "c14", 0, "c11", 5 ) : ( "PMEVCNTR29", "Performance Monitors Event Count Register 29" ),
( "p15", "c14", 0, "c11", 6 ) : ( "PMEVCNTR30", "Performance Monitors Event Count Register 30" ),
( "p15", "c14", 0, "c12", 0 ) : ( "PMEVTYPER0", "Performance Monitors Event Type Register 0" ),
( "p15", "c14", 0, "c12", 1 ) : ( "PMEVTYPER1", "Performance Monitors Event Type Register 1" ),
( "p15", "c14", 0, "c12", 2 ) : ( "PMEVTYPER2", "Performance Monitors Event Type Register 2" ),
( "p15", "c14", 0, "c12", 3 ) : ( "PMEVTYPER3", "Performance Monitors Event Type Register 3" ),
( "p15", "c14", 0, "c12", 4 ) : ( "PMEVTYPER4", "Performance Monitors Event Type Register 4" ),
( "p15", "c14", 0, "c12", 5 ) : ( "PMEVTYPER5", "Performance Monitors Event Type Register 5" ),
( "p15", "c14", 0, "c12", 6 ) : ( "PMEVTYPER6", "Performance Monitors Event Type Register 6" ),
( "p15", "c14", 0, "c12", 7 ) : ( "PMEVTYPER7", "Performance Monitors Event Type Register 7" ),
( "p15", "c14", 0, "c13", 0 ) : ( "PMEVTYPER8", "Performance Monitors Event Type Register 8" ),
( "p15", "c14", 0, "c13", 1 ) : ( "PMEVTYPER9", "Performance Monitors Event Type Register 9" ),
( "p15", "c14", 0, "c13", 2 ) : ( "PMEVTYPER10", "Performance Monitors Event Type Register 10" ),
( "p15", "c14", 0, "c13", 3 ) : ( "PMEVTYPER11", "Performance Monitors Event Type Register 11" ),
( "p15", "c14", 0, "c13", 4 ) : ( "PMEVTYPER12", "Performance Monitors Event Type Register 12" ),
( "p15", "c14", 0, "c13", 5 ) : ( "PMEVTYPER13", "Performance Monitors Event Type Register 13" ),
( "p15", "c14", 0, "c13", 6 ) : ( "PMEVTYPER14", "Performance Monitors Event Type Register 14" ),
( "p15", "c14", 0, "c13", 7 ) : ( "PMEVTYPER15", "Performance Monitors Event Type Register 15" ),
( "p15", "c14", 0, "c14", 0 ) : ( "PMEVTYPER16", "Performance Monitors Event Type Register 16" ),
( "p15", "c14", 0, "c14", 1 ) : ( "PMEVTYPER17", "Performance Monitors Event Type Register 17" ),
( "p15", "c14", 0, "c14", 2 ) : ( "PMEVTYPER18", "Performance Monitors Event Type Register 18" ),
( "p15", "c14", 0, "c14", 3 ) : ( "PMEVTYPER19", "Performance Monitors Event Type Register 19" ),
( "p15", "c14", 0, "c14", 4 ) : ( "PMEVTYPER20", "Performance Monitors Event Type Register 20" ),
( "p15", "c14", 0, "c14", 5 ) : ( "PMEVTYPER21", "Performance Monitors Event Type Register 21" ),
( "p15", "c14", 0, "c14", 6 ) : ( "PMEVTYPER22", "Performance Monitors Event Type Register 22" ),
( "p15", "c14", 0, "c14", 7 ) : ( "PMEVTYPER23", "Performance Monitors Event Type Register 23" ),
( "p15", "c14", 0, "c15", 0 ) : ( "PMEVTYPER24", "Performance Monitors Event Type Register 24" ),
( "p15", "c14", 0, "c15", 1 ) : ( "PMEVTYPER25", "Performance Monitors Event Type Register 25" ),
( "p15", "c14", 0, "c15", 2 ) : ( "PMEVTYPER26", "Performance Monitors Event Type Register 26" ),
( "p15", "c14", 0, "c15", 3 ) : ( "PMEVTYPER27", "Performance Monitors Event Type Register 27" ),
( "p15", "c14", 0, "c15", 4 ) : ( "PMEVTYPER28", "Performance Monitors Event Type Register 28" ),
( "p15", "c14", 0, "c15", 5 ) : ( "PMEVTYPER29", "Performance Monitors Event Type Register 29" ),
( "p15", "c14", 0, "c15", 6 ) : ( "PMEVTYPER30", "Performance Monitors Event Type Register 30" ),
( "p15", "c14", 0, "c15", 7 ) : ( "PMCCFILTR", "Performance Monitors Cycle Count Filter Register" ),
# Activity Monitors
( "p15", "c13", 0, "c2", 1 ) : ( "AMCFGR", "Activity Monitors Configuration Register" ),
( "p15", "c13", 0, "c2", 2 ) : ( "AMCGCR", "Activity Monitors Counter Group Configuration Register" ),
( "p15", "c13", 0, "c2", 4 ) : ( "AMCNTENCLR0", "Activity Monitors Count Enable Clear Register 0" ),
( "p15", "c13", 0, "c3", 0 ) : ( "AMCNTENCLR1", "Activity Monitors Count Enable Clear Register 1" ),
( "p15", "c13", 0, "c2", 5 ) : ( "AMCNTENSET0", "Activity Monitors Count Enable Set Register 0" ),
( "p15", "c13", 0, "c3", 1 ) : ( "AMCNTENSET1", "Activity Monitors Count Enable Set Register 1" ),
( "p15", "c13", 0, "c2", 0 ) : ( "AMCR", "Activity Monitors Control Register" ),
( "p15", "c13", 0, "c6", 0 ) : ( "AMEVTYPER00", "Activity Monitors Event Type Registers 0" ),
( "p15", "c13", 0, "c6", 1 ) : ( "AMEVTYPER01", "Activity Monitors Event Type Registers 0" ),
( "p15", "c13", 0, "c6", 2 ) : ( "AMEVTYPER02", "Activity Monitors Event Type Registers 0" ),
( "p15", "c13", 0, "c14", 0 ) : ( "AMEVTYPER10", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 1 ) : ( "AMEVTYPER11", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 2 ) : ( "AMEVTYPER12", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 3 ) : ( "AMEVTYPER13", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 4 ) : ( "AMEVTYPER14", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 5 ) : ( "AMEVTYPER15", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 6 ) : ( "AMEVTYPER16", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c14", 7 ) : ( "AMEVTYPER17", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 0 ) : ( "AMEVTYPER18", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 1 ) : ( "AMEVTYPER19", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 2 ) : ( "AMEVTYPER110", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 3 ) : ( "AMEVTYPER111", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 4 ) : ( "AMEVTYPER112", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 5 ) : ( "AMEVTYPER113", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c15", 6 ) : ( "AMEVTYPER114", "Activity Monitors Event Type Registers 1" ),
( "p15", "c13", 0, "c2", 3 ) : ( "AMUSERENR", "Activity Monitors User Enable Register" ),
# Reliability
( "p15", "c12", 0, "c1", 1 ) : ( "DISR", "Deferred Interrupt Status Register" ),
( "p15", "c5", 0, "c3", 0 ) : ( "ERRIDR", "Error Record ID Register" ),
( "p15", "c5", 0, "c3", 1 ) : ( "ERRSELR", "Error Record Select Register" ),
( "p15", "c5", 0, "c4", 3 ) : ( "ERXADDR", "Selected Error Record Address Register" ),
( "p15", "c5", 0, "c4", 7 ) : ( "ERXADDR2", "Selected Error Record Address Register 2" ),
( "p15", "c5", 0, "c4", 1 ) : ( "ERXCTLR", "Selected Error Record Control Register" ),
( "p15", "c5", 0, "c4", 5 ) : ( "ERXCTLR2", "Selected Error Record Control Register 2" ),
( "p15", "c5", 0, "c4", 0 ) : ( "ERXFR", "Selected Error Record Feature Register" ),
( "p15", "c5", 0, "c4", 4 ) : ( "ERXFR2", "Selected Error Record Feature Register 2" ),
( "p15", "c5", 0, "c5", 0 ) : ( "ERXMISC0", "Selected Error Record Miscellaneous Register 0" ),
( "p15", "c5", 0, "c5", 1 ) : ( "ERXMISC1", "Selected Error Record Miscellaneous Register 1" ),
( "p15", "c5", 0, "c5", 4 ) : ( "ERXMISC2", "Selected Error Record Miscellaneous Register 2" ),
( "p15", "c5", 0, "c5", 5 ) : ( "ERXMISC3", "Selected Error Record Miscellaneous Register 3" ),
( "p15", "c5", 0, "c5", 2 ) : ( "ERXMISC4", "Selected Error Record Miscellaneous Register 4" ),
( "p15", "c5", 0, "c5", 3 ) : ( "ERXMISC5", "Selected Error Record Miscellaneous Register 5" ),
( "p15", "c5", 0, "c5", 6 ) : ( "ERXMISC6", "Selected Error Record Miscellaneous Register 6" ),
( "p15", "c5", 0, "c5", 7 ) : ( "ERXMISC7", "Selected Error Record Miscellaneous Register 7" ),
( "p15", "c5", 0, "c4", 2 ) : ( "ERXSTATUS", "Selected Error Record Primary Status Register" ),
( "p15", "c5", 4, "c2", 3 ) : ( "VDFSR", "Virtual SError Exception Syndrome Register" ),
( "p15", "c12", 4, "c1", 1 ) : ( "VDISR", "Virtual Deferred Interrupt Status Register" ),
# Memory attribute registers
( "p15", "c10", 0, "c0", 0 ) : ( "N/A", "TLB Lockdown" ), # ARM11
( "p15", "c10", 0, "c2", 0 ) : ( "MAIR0", "Memory Attribute Indirection Register 0", "PRRR", "Primary Region Remap Register" ),
( "p15", "c10", 0, "c2", 1 ) : ( "MAIR1", "Memory Attribute Indirection Register 1", "NMRR", "Normal Memory Remap Register" ),
( "p15", "c10", 0, "c3", 0 ) : ( "AMAIR0", "Auxiliary Memory Attribute Indirection Register 0" ),
( "p15", "c10", 0, "c3", 1 ) : ( "AMAIR1", "Auxiliary Memory Attribute Indirection Register 1" ),
( "p15", "c10", 4, "c2", 0 ) : ( "HMAIR0", "Hyp Memory Attribute Indirection Register 0" ),
( "p15", "c10", 4, "c2", 1 ) : ( "HMAIR1", "Hyp Memory Attribute Indirection Register 1" ),
( "p15", "c10", 4, "c3", 0 ) : ( "HAMAIR0", "Hyp Auxiliary Memory Attribute Indirection Register 0" ),
( "p15", "c10", 4, "c3", 1 ) : ( "HAMAIR1", "Hyp Auxiliary Memory Attribute Indirection Register 1" ),
# DMA registers (ARM11)
( "p15", "c11", 0, "c0", 0 ) : ( "N/A", "DMA Identification and Status (Present)" ),
( "p15", "c11", 0, "c0", 1 ) : ( "N/A", "DMA Identification and Status (Queued)" ),
( "p15", "c11", 0, "c0", 2 ) : ( "N/A", "DMA Identification and Status (Running)" ),
( "p15", "c11", 0, "c0", 3 ) : ( "N/A", "DMA Identification and Status (Interrupting)" ),
( "p15", "c11", 0, "c1", 0 ) : ( "N/A", "DMA User Accessibility" ),
( "p15", "c11", 0, "c2", 0 ) : ( "N/A", "DMA Channel Number" ),
( "p15", "c11", 0, "c3", 0 ) : ( "N/A", "DMA Enable (Stop)" ),
( "p15", "c11", 0, "c3", 1 ) : ( "N/A", "DMA Enable (Start)" ),
( "p15", "c11", 0, "c3", 2 ) : ( "N/A", "DMA Enable (Clear)" ),
( "p15", "c11", 0, "c4", 0 ) : ( "N/A", "DMA Control" ),
( "p15", "c11", 0, "c5", 0 ) : ( "N/A", "DMA Internal Start Address" ),
( "p15", "c11", 0, "c6", 0 ) : ( "N/A", "DMA External Start Address" ),
( "p15", "c11", 0, "c7", 0 ) : ( "N/A", "DMA Internal End Address" ),
( "p15", "c11", 0, "c8", 0 ) : ( "N/A", "DMA Channel Status" ),
( "p15", "c11", 0, "c15", 0) : ( "N/A", "DMA Context ID" ),
# Reset management registers.
( "p15", "c12", 0, "c0", 0 ) : ( "VBAR", "Vector Base Address Register" ),
( "p15", "c12", 0, "c0", 1 ) : ( "RVBAR", "Reset Vector Base Address Register" ,
"MVBAR", "Monitor Vector Base Address Register" ),
( "p15", "c12", 0, "c0", 2 ) : ( "RMR", "Reset Management Register" ),
( "p15", "c12", 4, "c0", 2 ) : ( "HRMR", "Hyp Reset Management Register" ),
( "p15", "c12", 0, "c1", 0 ) : ( "ISR", "Interrupt Status Register" ),
( "p15", "c12", 4, "c0", 0 ) : ( "HVBAR", "Hyp Vector Base Address Register" ),
( "p15", "c13", 0, "c0", 0 ) : ( "FCSEIDR", "FCSE Process ID register" ),
( "p15", "c13", 0, "c0", 1 ) : ( "CONTEXTIDR", "Context ID Register" ),
( "p15", "c13", 0, "c0", 2 ) : ( "TPIDRURW", "PL0 Read/Write Software Thread ID Register" ),
( "p15", "c13", 0, "c0", 3 ) : ( "TPIDRURO", "PL0 Read-Only Software Thread ID Register" ),
( "p15", "c13", 0, "c0", 4 ) : ( "TPIDRPRW", "PL1 Software Thread ID Register" ),
( "p15", "c13", 4, "c0", 2 ) : ( "HTPIDR", "Hyp Software Thread ID Register" ),
# Generic timer registers.
( "p15", "c14", 0, "c0", 0 ) : ( "CNTFRQ", "Counter-timer Frequency register" ),
( "p15", "c14", 0, "c1", 0 ) : ( "CNTKCTL", "Counter-timer Kernel Control register" ),
( "p15", "c14", 0, "c2", 0 ) : ( "CNTP_TVAL", "Counter-timer Physical Timer TimerValue register",
"CNTHP_TVAL", "Counter-timer Hyp Physical Timer TimerValue register",
"CNTHPS_TVAL", "Counter-timer Secure Physical Timer TimerValue Register (EL2)" ),
( "p15", "c14", 0, "c2", 1 ) : ( "CNTP_CTL", "Counter-timer Physical Timer Control register",
"CNTHP_CTL", "Counter-timer Hyp Physical Timer Control register",
"CNTHPS_CTL", "Counter-timer Secure Physical Timer Control Register (EL2)" ),
( "p15", "c14", 0, "c3", 0 ) : ( "CNTV_TVAL", "Counter-timer Virtual Timer TimerValue register",
"CNTHV_TVAL", "Counter-timer Virtual Timer TimerValue register (EL2)",
"CNTHVS_TVAL", "Counter-timer Secure Virtual Timer TimerValue Register (EL2)" ),
( "p15", "c14", 0, "c3", 1 ) : ( "CNTV_CTL", "Counter-timer Virtual Timer Control register",
"CNTHV_CTL", "Counter-timer Virtual Timer Control register (EL2)",
"CNTHVS_CTL", "Counter-timer Secure Virtual Timer Control Register (EL2)" ),
( "p15", "c14", 4, "c1", 0 ) : ( "CNTHCTL", "Counter-timer Hyp Control register" ),
( "p15", "c14", 4, "c2", 0 ) : ( "CNTHP_TVAL", "Counter-timer Hyp Physical Timer TimerValue register" ),
( "p15", "c14", 4, "c2", 1 ) : ( "CNTHP_CTL", "Counter-timer Hyp Physical Timer Control register" ),
# Generic interrupt controller registers.
( "p15", "c4", 0, "c6", 0 ) : ( "ICC_PMR", "Interrupt Controller Interrupt Priority Mask Register",
"ICV_PMR", "Interrupt Controller Virtual Interrupt Priority Mask Register" ),
( "p15", "c12", 0, "c8", 0 ) : ( "ICC_IAR0", "Interrupt Controller Interrupt Acknowledge Register 0",
"ICV_IAR0", "Interrupt Controller Virtual Interrupt Acknowledge Register 0" ),
( "p15", "c12", 0, "c8", 1 ) : ( "ICC_EOIR0", "Interrupt Controller End Of Interrupt Register 0",
"ICV_EOIR0", "Interrupt Controller Virtual End Of Interrupt Register 0" ),
( "p15", "c12", 0, "c8", 2 ) : ( "ICC_HPPIR0", "Interrupt Controller Highest Priority Pending Interrupt Register 0",
"ICV_HPPIR0", "Interrupt Controller Virtual Highest Priority Pending Interrupt Register 0" ),
( "p15", "c12", 0, "c8", 3 ) : ( "ICC_BPR0", "Interrupt Controller Binary Point Register 0",
"ICV_BPR0", "Interrupt Controller Virtual Binary Point Register 0" ),
( "p15", "c12", 0, "c8", 4 ) : ( "ICC_AP0R0", "Interrupt Controller Active Priorities Group 0 Register 0",
"ICV_AP0R0", "Interrupt Controller Virtual Active Priorities Group 0 Register 0" ),
( "p15", "c12", 0, "c8", 5 ) : ( "ICC_AP0R1", "Interrupt Controller Active Priorities Group 0 Register 1",
"ICV_AP0R1", "Interrupt Controller Virtual Active Priorities Group 0 Register 1" ),
( "p15", "c12", 0, "c8", 6 ) : ( "ICC_AP0R2", "Interrupt Controller Active Priorities Group 0 Register 2",
"ICV_AP0R2", "Interrupt Controller Virtual Active Priorities Group 0 Register 2" ),
( "p15", "c12", 0, "c8", 7 ) : ( "ICC_AP0R3", "Interrupt Controller Active Priorities Group 0 Register 3",
"ICV_AP0R3", "Interrupt Controller Virtual Active Priorities Group 0 Register 3" ),
( "p15", "c12", 0, "c9", 0 ) : ( "ICC_AP1R0", "Interrupt Controller Active Priorities Group 1 Register 0",
"ICV_AP1R0", "Interrupt Controller Virtual Active Priorities Group 1 Register 0" ),
( "p15", "c12", 0, "c9", 1 ) : ( "ICC_AP1R1", "Interrupt Controller Active Priorities Group 1 Register 1",
"ICV_AP1R1", "Interrupt Controller Virtual Active Priorities Group 1 Register 1" ),
( "p15", "c12", 0, "c9", 2 ) : ( "ICC_AP1R2", "Interrupt Controller Active Priorities Group 1 Register 2",
"ICV_AP1R2", "Interrupt Controller Virtual Active Priorities Group 1 Register 2" ),
( "p15", "c12", 0, "c9", 3 ) : ( "ICC_AP1R3", "Interrupt Controller Active Priorities Group 1 Register 3",
"ICV_AP1R3", "Interrupt Controller Virtual Active Priorities Group 1 Register 3" ),
( "p15", "c12", 0, "c11", 1 ) : ( "ICC_DIR", "Interrupt Controller Deactivate Interrupt Register",
"ICV_DIR", "Interrupt Controller Deactivate Virtual Interrupt Register" ),
( "p15", "c12", 0, "c11", 3 ) : ( "ICC_RPR", "Interrupt Controller Running Priority Register",
"ICV_RPR", "Interrupt Controller Virtual Running Priority Register" ),
( "p15", "c12", 0, "c12", 0 ) : ( "ICC_IAR1", "Interrupt Controller Interrupt Acknowledge Register 1",
"ICV_IAR1", "Interrupt Controller Virtual Interrupt Acknowledge Register 1" ),
( "p15", "c12", 0, "c12", 1 ) : ( "ICC_EOIR1", "Interrupt Controller End Of Interrupt Register 1",
"ICV_EOIR1", "Interrupt Controller Virtual End Of Interrupt Register 1" ),
( "p15", "c12", 0, "c12", 2 ) : ( "ICC_HPPIR1", "Interrupt Controller Highest Priority Pending Interrupt Register 1",
"ICV_HPPIR1", "Interrupt Controller Virtual Highest Priority Pending Interrupt Register 1" ),
( "p15", "c12", 0, "c12", 3 ) : ( "ICC_BPR1", "Interrupt Controller Binary Point Register 1",
"ICV_BPR1", "Interrupt Controller Virtual Binary Point Register 1" ),
( "p15", "c12", 0, "c12", 4 ) : ( "ICC_CTLR", "Interrupt Controller Control Register",
"ICV_CTLR", "Interrupt Controller Virtual Control Register" ),
( "p15", "c12", 0, "c12", 5 ) : ( "ICC_SRE", "Interrupt Controller System Register Enable register" ),
( "p15", "c12", 0, "c12", 6 ) : ( "ICC_IGRPEN0", "Interrupt Controller Interrupt Group 0 Enable register",
"ICV_IGRPEN0", "Interrupt Controller Virtual Interrupt Group 0 Enable register" ),
( "p15", "c12", 0, "c12", 7 ) : ( "ICC_IGRPEN1", "Interrupt Controller Interrupt Group 1 Enable register",
"ICV_IGRPEN1", "Interrupt Controller Virtual Interrupt Group 1 Enable register" ),
( "p15", "c12", 4, "c8", 0 ) : ( "ICH_AP0R0", "Interrupt Controller Hyp Active Priorities Group 0 Register 0" ),
( "p15", "c12", 4, "c8", 1 ) : ( "ICH_AP0R1", "Interrupt Controller Hyp Active Priorities Group 0 Register 1" ),
( "p15", "c12", 4, "c8", 2 ) : ( "ICH_AP0R2", "Interrupt Controller Hyp Active Priorities Group 0 Register 2" ),
( "p15", "c12", 4, "c8", 3 ) : ( "ICH_AP0R3", "Interrupt Controller Hyp Active Priorities Group 0 Register 3" ),
( "p15", "c12", 4, "c9", 0 ) : ( "ICH_AP1R0", "Interrupt Controller Hyp Active Priorities Group 1 Register 0" ),
( "p15", "c12", 4, "c9", 1 ) : ( "ICH_AP1R1", "Interrupt Controller Hyp Active Priorities Group 1 Register 1" ),
( "p15", "c12", 4, "c9", 2 ) : ( "ICH_AP1R2", "Interrupt Controller Hyp Active Priorities Group 1 Register 2" ),
( "p15", "c12", 4, "c9", 3 ) : ( "ICH_AP1R3", "Interrupt Controller Hyp Active Priorities Group 1 Register 3" ),
( "p15", "c12", 4, "c9", 5 ) : ( "ICC_HSRE", "Interrupt Controller Hyp System Register Enable register" ),
( "p15", "c12", 4, "c11", 0 ) : ( "ICH_HCR", "Interrupt Controller Hyp Control Register" ),
( "p15", "c12", 4, "c11", 1 ) : ( "ICH_VTR", "Interrupt Controller VGIC Type Register" ),
( "p15", "c12", 4, "c11", 2 ) : ( "ICH_MISR", "Interrupt Controller Maintenance Interrupt State Register" ),
( "p15", "c12", 4, "c11", 3 ) : ( "ICH_EISR", "Interrupt Controller End of Interrupt Status Register" ),
( "p15", "c12", 4, "c11", 5 ) : ( "ICH_ELRSR", "Interrupt Controller Empty List Register Status Register" ),
( "p15", "c12", 4, "c11", 7 ) : ( "ICH_VMCR", "Interrupt Controller Virtual Machine Control Register" ),
( "p15", "c12", 4, "c12", 0 ) : ( "ICH_LR0", "Interrupt Controller List Register 0" ),
( "p15", "c12", 4, "c12", 1 ) : ( "ICH_LR1", "Interrupt Controller List Register 1" ),
( "p15", "c12", 4, "c12", 2 ) : ( "ICH_LR2", "Interrupt Controller List Register 2" ),
( "p15", "c12", 4, "c12", 3 ) : ( "ICH_LR3", "Interrupt Controller List Register 3" ),
( "p15", "c12", 4, "c12", 4 ) : ( "ICH_LR4", "Interrupt Controller List Register 4" ),
( "p15", "c12", 4, "c12", 5 ) : ( "ICH_LR5", "Interrupt Controller List Register 5" ),
( "p15", "c12", 4, "c12", 6 ) : ( "ICH_LR6", "Interrupt Controller List Register 6" ),
( "p15", "c12", 4, "c12", 7 ) : ( "ICH_LR7", "Interrupt Controller List Register 7" ),
( "p15", "c12", 4, "c13", 0 ) : ( "ICH_LR8", "Interrupt Controller List Register 8" ),
( "p15", "c12", 4, "c13", 1 ) : ( "ICH_LR9", "Interrupt Controller List Register 9" ),
( "p15", "c12", 4, "c13", 2 ) : ( "ICH_LR10", "Interrupt Controller List Register 10" ),
( "p15", "c12", 4, "c13", 3 ) : ( "ICH_LR11", "Interrupt Controller List Register 11" ),
( "p15", "c12", 4, "c13", 4 ) : ( "ICH_LR12", "Interrupt Controller List Register 12" ),
( "p15", "c12", 4, "c13", 5 ) : ( "ICH_LR13", "Interrupt Controller List Register 13" ),
( "p15", "c12", 4, "c13", 6 ) : ( "ICH_LR14", "Interrupt Controller List Register 14" ),
( "p15", "c12", 4, "c13", 7 ) : ( "ICH_LR15", "Interrupt Controller List Register 15" ),
( "p15", "c12", 4, "c14", 0 ) : ( "ICH_LRC0", "Interrupt Controller List Register 0" ),
( "p15", "c12", 4, "c14", 1 ) : ( "ICH_LRC1", "Interrupt Controller List Register 1" ),
( "p15", "c12", 4, "c14", 2 ) : ( "ICH_LRC2", "Interrupt Controller List Register 2" ),
( "p15", "c12", 4, "c14", 3 ) : ( "ICH_LRC3", "Interrupt Controller List Register 3" ),
( "p15", "c12", 4, "c14", 4 ) : ( "ICH_LRC4", "Interrupt Controller List Register 4" ),
( "p15", "c12", 4, "c14", 5 ) : ( "ICH_LRC5", "Interrupt Controller List Register 5" ),
( "p15", "c12", 4, "c14", 6 ) : ( "ICH_LRC6", "Interrupt Controller List Register 6" ),
( "p15", "c12", 4, "c14", 7 ) : ( "ICH_LRC7", "Interrupt Controller List Register 7" ),
( "p15", "c12", 4, "c15", 0 ) : ( "ICH_LRC8", "Interrupt Controller List Register 8" ),
( "p15", "c12", 4, "c15", 1 ) : ( "ICH_LRC9", "Interrupt Controller List Register 9" ),
( "p15", "c12", 4, "c15", 2 ) : ( "ICH_LRC10", "Interrupt Controller List Register 10" ),
( "p15", "c12", 4, "c15", 3 ) : ( "ICH_LRC11", "Interrupt Controller List Register 11" ),
( "p15", "c12", 4, "c15", 4 ) : ( "ICH_LRC12", "Interrupt Controller List Register 12" ),
( "p15", "c12", 4, "c15", 5 ) : ( "ICH_LRC13", "Interrupt Controller List Register 13" ),
( "p15", "c12", 4, "c15", 6 ) : ( "ICH_LRC14", "Interrupt Controller List Register 14" ),
( "p15", "c12", 4, "c15", 7 ) : ( "ICH_LRC15", "Interrupt Controller List Register 15" ),
( "p15", "c12", 6, "c12", 4 ) : ( "ICC_MCTLR", "Interrupt Controller Monitor Control Register" ),
( "p15", "c12", 6, "c12", 5 ) : ( "ICC_MSRE", "Interrupt Controller Monitor System Register Enable register" ),
( "p15", "c12", 6, "c12", 7 ) : ( "ICC_MGRPEN1", "Interrupt Controller Monitor Interrupt Group 1 Enable register" ),
( "p15", "c15", 0, "c0", 0 ) : ( "IL1Data0", "Instruction L1 Data n Register" ),
( "p15", "c15", 0, "c0", 1 ) : ( "IL1Data1", "Instruction L1 Data n Register" ),
( "p15", "c15", 0, "c0", 2 ) : ( "IL1Data2", "Instruction L1 Data n Register" ),
( "p15", "c15", 0, "c1", 0 ) : ( "DL1Data0", "Data L1 Data n Register" ),
( "p15", "c15", 0, "c1", 1 ) : ( "DL1Data1", "Data L1 Data n Register" ),
( "p15", "c15", 0, "c1", 2 ) : ( "DL1Data2", "Data L1 Data n Register" ),
( "p15", "c15", 0, "c2", 0 ) : ( "N/A", "Data Memory Remap" ), # ARM11
( "p15", "c15", 0, "c2", 1 ) : ( "N/A", "Instruction Memory Remap" ), # ARM11
( "p15", "c15", 0, "c2", 2 ) : ( "N/A", "DMA Memory Remap" ), # ARM11
( "p15", "c15", 0, "c2", 3 ) : ( "N/A", "Peripheral Port Memory Remap" ), # ARM11
( "p15", "c15", 0, "c4", 0 ) : ( "RAMINDEX", "RAM Index Register" ),
( "p15", "c15", 0, "c12", 0 ) : ( "N/A", "Performance Monitor Control" ), #ARM11
( "p15", "c15", 0, "c12", 1 ) : ( "CCNT", "Cycle Counter" ), #ARM11
( "p15", "c15", 0, "c12", 2 ) : ( "PMN0", "Count 0" ), #ARM11
( "p15", "c15", 0, "c12", 3 ) : ( "PMN1", "Count 1" ), #ARM11
( "p15", "c15", 1, "c0", 0 ) : ( "L2ACTLR", "L2 Auxiliary Control Register" ),
( "p15", "c15", 1, "c0", 3 ) : ( "L2FPR", "L2 Prefetch Control Register" ),
( "p15", "c15", 3, "c0", 0 ) : ( "N/A", "Data Debug Cache" ), # ARM11
( "p15", "c15", 3, "c0", 1 ) : ( "N/A", "Instruction Debug Cache" ), # ARM11
( "p15", "c15", 3, "c2", 0 ) : ( "N/A", "Data Tag RAM Read Operation" ), # ARM11
( "p15", "c15", 3, "c2", 1 ) : ( "N/A", "Instruction Tag RAM Read Operation" ), # ARM11
( "p15", "c15", 4, "c0", 0 ) : ( "CBAR", "Configuration Base Address Register" ),
( "p15", "c15", 5, "c4", 0 ) : ( "N/A", "Data MicroTLB Index" ), # ARM11
( "p15", "c15", 5, "c4", 1 ) : ( "N/A", "Instruction MicroTLB Index" ), # ARM11
( "p15", "c15", 5, "c4", 2 ) : ( "N/A", "Read Main TLB Entry" ), # ARM11
( "p15", "c15", 5, "c4", 4 ) : ( "N/A", "Write Main TLB Entry" ), # ARM11
( "p15", "c15", 5, "c5", 0 ) : ( "N/A", "Data MicroTLB VA" ), # ARM11
( "p15", "c15", 5, "c5", 1 ) : ( "N/A", "Instruction MicroTLB VA" ), # ARM11
( "p15", "c15", 5, "c5", 2 ) : ( "N/A", "Main TLB VA" ), # ARM11
( "p15", "c15", 5, "c7", 0 ) : ( "N/A", "Data MicroTLB Attribute" ), # ARM11
( "p15", "c15", 5, "c7", 1 ) : ( "N/A", "Instruction MicroTLB Attribute" ), # ARM11
( "p15", "c15", 5, "c7", 2 ) : ( "N/A", "Main TLB Attribute" ), # ARM11
( "p15", "c15", 7, "c0", 0 ) : ( "N/A", "Cache Debug Control" ), # ARM11
( "p15", "c15", 7, "c1", 0 ) : ( "N/A", "TLB Debug Control" ), # ARM11
# Preload Engine control registers
( "p15", "c11", 0, "c0", 0 ) : ( "PLEIDR", "Preload Engine ID Register" ),
( "p15", "c11", 0, "c0", 2 ) : ( "PLEASR", "Preload Engine Activity Status Register" ),
( "p15", "c11", 0, "c0", 4 ) : ( "PLEFSR", "Preload Engine FIFO Status Register" ),
( "p15", "c11", 0, "c1", 0 ) : ( "PLEUAR", "Preload Engine User Accessibility Register" ),
( "p15", "c11", 0, "c1", 1 ) : ( "PLEPCR", "Preload Engine Parameters Control Register" ),
# Preload Engine operations
( "p15", "c11", 0, "c2", 1 ) : ( "PLEFF", "Preload Engine FIFO flush operation" ),
( "p15", "c11", 0, "c3", 0 ) : ( "PLEPC", "Preload Engine pause channel operation" ),
( "p15", "c11", 0, "c3", 1 ) : ( "PLERC", "Preload Engine resume channel operation" ),
( "p15", "c11", 0, "c3", 2 ) : ( "PLEKC", "Preload Engine kill channel operation" ),
# Jazelle registers
( "p14", "c0", 7, "c0", 0 ) : ( "JIDR", "Jazelle ID Register" ),
( "p14", "c1", 7, "c0", 0 ) : ( "JOSCR", "Jazelle OS Control Register" ),
( "p14", "c2", 7, "c0", 0 ) : ( "JMCR", "Jazelle Main Configuration Register" ),
# Debug registers
( "p15", "c4", 3, "c5", 0 ) : ( "DSPSR", "Debug Saved Program Status Register" ),
( "p15", "c4", 3, "c5", 1 ) : ( "DLR", "Debug Link Register" ),
( "p15", "c0", 0, "c3", 5 ) : ( "ID_DFR1", "Debug Feature Register 1" ),
( "p14", "c0", 0, "c0", 0 ) : ( "DBGDIDR", "Debug ID Register" ),
( "p14", "c0", 0, "c6", 0 ) : ( "DBGWFAR", "Debug Watchpoint Fault Address Register" ),
( "p14", "c0", 0, "c6", 2 ) : ( "DBGOSECCR", "Debug OS Lock Exception Catch Control Register" ),
( "p14", "c0", 0, "c7", 0 ) : ( "DBGVCR", "Debug Vector Catch Register" ),
( "p14", "c0", 0, "c0", 2 ) : ( "DBGDTRRXext", "Debug OS Lock Data Transfer Register, Receive, External View" ),
( "p14", "c0", 0, "c2", 0 ) : ( "DBGDCCINT", "DCC Interrupt Enable Register" ),
( "p14", "c0", 0, "c2", 2 ) : ( "DBGDSCRext", "Debug Status and Control Register, External View" ),
( "p14", "c0", 0, "c3", 2 ) : ( "DBGDTRTXext", "Debug OS Lock Data Transfer Register, Transmit" ),
( "p14", "c0", 0, "c0", 4 ) : ( "DBGBVR0", "Debug Breakpoint Value Register 0" ),
( "p14", "c0", 0, "c1", 4 ) : ( "DBGBVR1", "Debug Breakpoint Value Register 1" ),
( "p14", "c0", 0, "c2", 4 ) : ( "DBGBVR2", "Debug Breakpoint Value Register 2" ),
( "p14", "c0", 0, "c3", 4 ) : ( "DBGBVR3", "Debug Breakpoint Value Register 3" ),
( "p14", "c0", 0, "c4", 4 ) : ( "DBGBVR4", "Debug Breakpoint Value Register 4" ),
( "p14", "c0", 0, "c5", 4 ) : ( "DBGBVR5", "Debug Breakpoint Value Register 5" ),
( "p14", "c0", 0, "c6", 4 ) : ( "DBGBVR6", "Debug Breakpoint Value Register 6" ),
( "p14", "c0", 0, "c7", 4 ) : ( "DBGBVR7", "Debug Breakpoint Value Register 7" ),
( "p14", "c0", 0, "c8", 4 ) : ( "DBGBVR8", "Debug Breakpoint Value Register 8" ),
( "p14", "c0", 0, "c9", 4 ) : ( "DBGBVR9", "Debug Breakpoint Value Register 9" ),
( "p14", "c0", 0, "c10", 4 ) : ( "DBGBVR10", "Debug Breakpoint Value Register 10" ),
( "p14", "c0", 0, "c11", 4 ) : ( "DBGBVR11", "Debug Breakpoint Value Register 11" ),
( "p14", "c0", 0, "c12", 4 ) : ( "DBGBVR12", "Debug Breakpoint Value Register 12" ),
( "p14", "c0", 0, "c13", 4 ) : ( "DBGBVR13", "Debug Breakpoint Value Register 13" ),
( "p14", "c0", 0, "c14", 4 ) : ( "DBGBVR14", "Debug Breakpoint Value Register 14" ),
( "p14", "c0", 0, "c15", 4 ) : ( "DBGBVR15", "Debug Breakpoint Value Register 15" ),
( "p14", "c0", 0, "c0", 5 ) : ( "DBGBCR0", "Debug Breakpoint Control Register 0" ),
( "p14", "c0", 0, "c1", 5 ) : ( "DBGBCR1", "Debug Breakpoint Control Register 1" ),
( "p14", "c0", 0, "c2", 5 ) : ( "DBGBCR2", "Debug Breakpoint Control Register 2" ),
( "p14", "c0", 0, "c3", 5 ) : ( "DBGBCR3", "Debug Breakpoint Control Register 3" ),
( "p14", "c0", 0, "c4", 5 ) : ( "DBGBCR4", "Debug Breakpoint Control Register 4" ),
( "p14", "c0", 0, "c5", 5 ) : ( "DBGBCR5", "Debug Breakpoint Control Register 5" ),
( "p14", "c0", 0, "c6", 5 ) : ( "DBGBCR6", "Debug Breakpoint Control Register 6" ),
( "p14", "c0", 0, "c7", 5 ) : ( "DBGBCR7", "Debug Breakpoint Control Register 7" ),
( "p14", "c0", 0, "c8", 5 ) : ( "DBGBCR8", "Debug Breakpoint Control Register 8" ),
( "p14", "c0", 0, "c9", 5 ) : ( "DBGBCR9", "Debug Breakpoint Control Register 9" ),
( "p14", "c0", 0, "c10", 5 ) : ( "DBGBCR10", "Debug Breakpoint Control Register 10" ),
( "p14", "c0", 0, "c11", 5 ) : ( "DBGBCR11", "Debug Breakpoint Control Register 11" ),
( "p14", "c0", 0, "c12", 5 ) : ( "DBGBCR12", "Debug Breakpoint Control Register 12" ),
( "p14", "c0", 0, "c13", 5 ) : ( "DBGBCR13", "Debug Breakpoint Control Register 13" ),
( "p14", "c0", 0, "c14", 5 ) : ( "DBGBCR14", "Debug Breakpoint Control Register 14" ),
( "p14", "c0", 0, "c15", 5 ) : ( "DBGBCR15", "Debug Breakpoint Control Register 15" ),
( "p14", "c0", 0, "c0", 6 ) : ( "DBGWVR0", "Debug Watchpoint Value Register 0" ),
( "p14", "c0", 0, "c1", 6 ) : ( "DBGWVR1", "Debug Watchpoint Value Register 1" ),
( "p14", "c0", 0, "c2", 6 ) : ( "DBGWVR2", "Debug Watchpoint Value Register 2" ),
( "p14", "c0", 0, "c3", 6 ) : ( "DBGWVR3", "Debug Watchpoint Value Register 3" ),
( "p14", "c0", 0, "c4", 6 ) : ( "DBGWVR4", "Debug Watchpoint Value Register 4" ),
( "p14", "c0", 0, "c5", 6 ) : ( "DBGWVR5", "Debug Watchpoint Value Register 5" ),
( "p14", "c0", 0, "c6", 6 ) : ( "DBGWVR6", "Debug Watchpoint Value Register 6" ),
( "p14", "c0", 0, "c7", 6 ) : ( "DBGWVR7", "Debug Watchpoint Value Register 7" ),
( "p14", "c0", 0, "c8", 6 ) : ( "DBGWVR8", "Debug Watchpoint Value Register 8" ),
( "p14", "c0", 0, "c9", 6 ) : ( "DBGWVR9", "Debug Watchpoint Value Register 9" ),
( "p14", "c0", 0, "c10", 6 ) : ( "DBGWVR10", "Debug Watchpoint Value Register 10" ),
( "p14", "c0", 0, "c11", 6 ) : ( "DBGWVR11", "Debug Watchpoint Value Register 11" ),
( "p14", "c0", 0, "c12", 6 ) : ( "DBGWVR12", "Debug Watchpoint Value Register 12" ),
( "p14", "c0", 0, "c13", 6 ) : ( "DBGWVR13", "Debug Watchpoint Value Register 13" ),
( "p14", "c0", 0, "c14", 6 ) : ( "DBGWVR14", "Debug Watchpoint Value Register 14" ),
( "p14", "c0", 0, "c15", 6 ) : ( "DBGWVR15", "Debug Watchpoint Value Register 15" ),
( "p14", "c0", 0, "c0", 7 ) : ( "DBGWCR0", "Debug Watchpoint Control Register 0" ),
( "p14", "c0", 0, "c1", 7 ) : ( "DBGWCR1", "Debug Watchpoint Control Register 1" ),
( "p14", "c0", 0, "c2", 7 ) : ( "DBGWCR2", "Debug Watchpoint Control Register 2" ),
( "p14", "c0", 0, "c3", 7 ) : ( "DBGWCR3", "Debug Watchpoint Control Register 3" ),
( "p14", "c0", 0, "c4", 7 ) : ( "DBGWCR4", "Debug Watchpoint Control Register 4" ),
( "p14", "c0", 0, "c5", 7 ) : ( "DBGWCR5", "Debug Watchpoint Control Register 5" ),
( "p14", "c0", 0, "c6", 7 ) : ( "DBGWCR6", "Debug Watchpoint Control Register 6" ),
( "p14", "c0", 0, "c7", 7 ) : ( "DBGWCR7", "Debug Watchpoint Control Register 7" ),
( "p14", "c0", 0, "c8", 7 ) : ( "DBGWCR8", "Debug Watchpoint Control Register 8" ),
( "p14", "c0", 0, "c9", 7 ) : ( "DBGWCR9", "Debug Watchpoint Control Register 9" ),
( "p14", "c0", 0, "c10", 7 ) : ( "DBGWCR10", "Debug Watchpoint Control Register 10" ),
( "p14", "c0", 0, "c11", 7 ) : ( "DBGWCR11", "Debug Watchpoint Control Register 11" ),
( "p14", "c0", 0, "c12", 7 ) : ( "DBGWCR12", "Debug Watchpoint Control Register 12" ),
( "p14", "c0", 0, "c13", 7 ) : ( "DBGWCR13", "Debug Watchpoint Control Register 13" ),
( "p14", "c0", 0, "c14", 7 ) : ( "DBGWCR14", "Debug Watchpoint Control Register 14" ),
( "p14", "c0", 0, "c15", 7 ) : ( "DBGWCR15", "Debug Watchpoint Control Register 15" ),
( "p14", "c1", 0, "c0", 1 ) : ( "DBGBXVR0", "Debug Breakpoint Extended Value Register 0" ),
( "p14", "c1", 0, "c1", 1 ) : ( "DBGBXVR1", "Debug Breakpoint Extended Value Register 1" ),
( "p14", "c1", 0, "c2", 1 ) : ( "DBGBXVR2", "Debug Breakpoint Extended Value Register 2" ),
( "p14", "c1", 0, "c3", 1 ) : ( "DBGBXVR3", "Debug Breakpoint Extended Value Register 3" ),
( "p14", "c1", 0, "c4", 1 ) : ( "DBGBXVR4", "Debug Breakpoint Extended Value Register 4" ),
( "p14", "c1", 0, "c5", 1 ) : ( "DBGBXVR5", "Debug Breakpoint Extended Value Register 5" ),
( "p14", "c1", 0, "c6", 1 ) : ( "DBGBXVR6", "Debug Breakpoint Extended Value Register 6" ),
( "p14", "c1", 0, "c7", 1 ) : ( "DBGBXVR7", "Debug Breakpoint Extended Value Register 7" ),
( "p14", "c1", 0, "c8", 1 ) : ( "DBGBXVR8", "Debug Breakpoint Extended Value Register 8" ),
( "p14", "c1", 0, "c9", 1 ) : ( "DBGBXVR9", "Debug Breakpoint Extended Value Register 9" ),
( "p14", "c1", 0, "c10", 1 ) : ( "DBGBXVR10", "Debug Breakpoint Extended Value Register 10" ),
( "p14", "c1", 0, "c11", 1 ) : ( "DBGBXVR11", "Debug Breakpoint Extended Value Register 11" ),
( "p14", "c1", 0, "c12", 1 ) : ( "DBGBXVR12", "Debug Breakpoint Extended Value Register 12" ),
( "p14", "c1", 0, "c13", 1 ) : ( "DBGBXVR13", "Debug Breakpoint Extended Value Register 13" ),
( "p14", "c1", 0, "c14", 1 ) : ( "DBGBXVR14", "Debug Breakpoint Extended Value Register 14" ),
( "p14", "c1", 0, "c15", 1 ) : ( "DBGBXVR15", "Debug Breakpoint Extended Value Register 15" ),
( "p14", "c1", 0, "c0", 4 ) : ( "DBGOSLAR", "Debug OS Lock Access Register" ),
( "p14", "c1", 0, "c1", 4 ) : ( "DBGOSLSR", "Debug OS Lock Status Register" ),
( "p14", "c1", 0, "c4", 4 ) : ( "DBGPRCR", "Debug Power Control Register" ),
( "p14", "c7", 0, "c14", 6 ) : ( "DBGAUTHSTATUS", "Debug Authentication Status register" ),
( "p14", "c7", 0, "c0", 7 ) : ( "DBGDEVID2", "Debug Device ID register 2" ),
( "p14", "c7", 0, "c1", 7 ) : ( "DBGDEVID1", "Debug Device ID register 1" ),
( "p14", "c7", 0, "c2", 7 ) : ( "DBGDEVID", "Debug Device ID register 0" ),
( "p14", "c7", 0, "c8", 6 ) : ( "DBGCLAIMSET", "Debug Claim Tag Set register" ),
( "p14", "c7", 0, "c9", 6 ) : ( "DBGCLAIMCLR", "Debug Claim Tag Clear register" ),
( "p14", "c0", 0, "c1", 0 ) : ( "DBGDSCRint", "Debug Status and Control Register, Internal View" ),
( "p14", "c0", 0, "c5", 0 ) : ( "DBGDTRRXint", "Debug Data Transfer Register, Receive",
"DBGDTRTXint", "Debug Data Transfer Register, Transmit" ),
( "p14", "c1", 0, "c0", 0 ) : ( "DBGDRAR", "Debug ROM Address Register" ),
( "p14", "c1", 0, "c3", 4 ) : ( "DBGOSDLR", "Debug OS Double Lock Register" ),
( "p14", "c2", 0, "c0", 0 ) : ( "DBGDSAR", "Debug Self Address Register" ),
( "p15", "c1", 4, "c2", 1 ) : ( "HTRFCR", "Hyp Trace Filter Control Register" ),
( "p15", "c1", 0, "c2", 1 ) : ( "TRFCR", "Trace Filter Control Register" ),
}
# Aarch64 system registers.
# Extracted from the XML specifications for v8.7-A (2021-06).
AARCH64_SYSTEM_REGISTERS = {
# Special purpose registers.
( 0b011, 0b000, "c4", "c2", 0b010 ) : ( "CurrentEL", "Current Exception Level" ),
( 0b011, 0b011, "c4", "c2", 0b001 ) : ( "DAIF", "Interrupt Mask Bits" ),
( 0b011, 0b000, "c4", "c0", 0b001 ) : ( "ELR_EL1", "Exception Link Register (EL1)" ),
( 0b011, 0b100, "c4", "c0", 0b001 ) : ( "ELR_EL2", "Exception Link Register (EL2)" ),
( 0b011, 0b101, "c4", "c0", 0b001 ) : ( "ELR_EL12", "Exception Link Register (EL1)" ),
( 0b011, 0b110, "c4", "c0", 0b001 ) : ( "ELR_EL3", "Exception Link Register (EL3)" ),
( 0b011, 0b011, "c4", "c4", 0b001 ) : ( "FPSR", "Floating-point Status Register" ),
( 0b011, 0b011, "c4", "c4", 0b000 ) : ( "FPCR", "Floating-point Control Register" ),
( 0b011, 0b011, "c4", "c2", 0b000 ) : ( "NZCV", "Condition Flags" ),
( 0b011, 0b000, "c4", "c1", 0b000 ) : ( "SP_EL0", "Stack Pointer (EL0)" ),
( 0b011, 0b100, "c4", "c1", 0b000 ) : ( "SP_EL1", "Stack Pointer (EL1)" ),
( 0b011, 0b110, "c4", "c1", 0b000 ) : ( "SP_EL2", "Stack Pointer (EL2)" ),
( 0b011, 0b000, "c4", "c2", 0b000 ) : ( "SPSel", "Stack Pointer Select" ),
( 0b011, 0b100, "c4", "c3", 0b001 ) : ( "SPSR_abt", "Saved Program Status Register (Abort mode)" ),
( 0b011, 0b000, "c4", "c0", 0b000 ) : ( "SPSR_EL1", "Saved Program Status Register (EL1)" ),
( 0b011, 0b100, "c4", "c0", 0b000 ) : ( "SPSR_EL2", "Saved Program Status Register (EL2)" ),
( 0b011, 0b101, "c4", "c0", 0b000 ) : ( "SPSR_EL12", "Saved Program Status Register (EL1)" ),
( 0b011, 0b110, "c4", "c0", 0b000 ) : ( "SPSR_EL3", "Saved Program Status Register (EL3)" ),
( 0b011, 0b100, "c4", "c3", 0b011 ) : ( "SPSR_fiq", "Saved Program Status Register (FIQ mode)" ),
( 0b011, 0b100, "c4", "c3", 0b000 ) : ( "SPSR_irq", "Saved Program Status Register (IRQ mode)" ),
( 0b011, 0b100, "c4", "c3", 0b010 ) : ( "SPSR_und", "Saved Program Status Register (Undefined mode)" ),
( 0b011, 0b011, "c4", "c2", 0b101 ) : ( "DIT", "Data Independent Timing" ),
( 0b011, 0b011, "c4", "c2", 0b110 ) : ( "SSBS", "Speculative Store Bypass Safe" ),
( 0b011, 0b011, "c4", "c2", 0b111 ) : ( "TCO", "Tag Check Override" ),
# General system control registers.
( 0b011, 0b000, "c1", "c0", 0b001 ) : ( "ACTLR_EL1", "Auxiliary Control Register (EL1)" ),
( 0b011, 0b100, "c1", "c0", 0b001 ) : ( "ACTLR_EL2", "Auxiliary Control Register (EL2)" ),
( 0b011, 0b110, "c1", "c0", 0b001 ) : ( "ACTLR_EL3", "Auxiliary Control Register (EL3)" ),
( 0b011, 0b000, "c4", "c2", 0b011 ) : ( "PAN", "Privileged Access Never" ),
( 0b011, 0b000, "c4", "c2", 0b100 ) : ( "UAO", "User Access Override" ),
( 0b011, 0b000, "c5", "c1", 0b000 ) : ( "AFSR0_EL1", "Auxiliary Fault Status Register 0 (EL1)" ),
( 0b011, 0b100, "c5", "c1", 0b000 ) : ( "AFSR0_EL2", "Auxiliary Fault Status Register 0 (EL2)" ),
( 0b011, 0b101, "c5", "c1", 0b000 ) : ( "AFSR0_EL12", "Auxiliary Fault Status Register 0 (EL1)" ),
( 0b011, 0b110, "c5", "c1", 0b000 ) : ( "AFSR0_EL3", "Auxiliary Fault Status Register 0 (EL3)" ),
( 0b011, 0b000, "c5", "c1", 0b001 ) : ( "AFSR1_EL1", "Auxiliary Fault Status Register 1 (EL1)" ),
( 0b011, 0b100, "c5", "c1", 0b001 ) : ( "AFSR1_EL2", "Auxiliary Fault Status Register 1 (EL2)" ),
( 0b011, 0b101, "c5", "c1", 0b001 ) : ( "AFSR1_EL12", "Auxiliary Fault Status Register 1 (EL1)" ),
( 0b011, 0b110, "c5", "c1", 0b001 ) : ( "AFSR1_EL3", "Auxiliary Fault Status Register 1 (EL3)" ),
( 0b011, 0b001, "c0", "c0", 0b111 ) : ( "AIDR_EL1", "Auxiliary ID Register" ),
( 0b011, 0b000, "c10", "c3", 0b000 ) : ( "AMAIR_EL1", "Auxiliary Memory Attribute Indirection Register (EL1)" ),
( 0b011, 0b100, "c10", "c3", 0b000 ) : ( "AMAIR_EL2", "Auxiliary Memory Attribute Indirection Register (EL2)" ),
( 0b011, 0b101, "c10", "c3", 0b000 ) : ( "AMAIR_EL12", "Auxiliary Memory Attribute Indirection Register (EL1)" ),
( 0b011, 0b110, "c10", "c3", 0b000 ) : ( "AMAIR_EL3", "Auxiliary Memory Attribute Indirection Register (EL3)" ),
( 0b011, 0b001, "c0", "c0", 0b000 ) : ( "CCSIDR_EL1", "Current Cache Size ID Register" ),
( 0b011, 0b001, "c0", "c0", 0b010 ) : ( "CCSIDR2_EL1", "Current Cache Size ID Register 2" ),
( 0b011, 0b001, "c0", "c0", 0b001 ) : ( "CLIDR_EL1", "Cache Level ID Register" ),
( 0b011, 0b000, "c13", "c0", 0b001 ) : ( "CONTEXTIDR_EL1", "Context ID Register (EL1)" ),
( 0b011, 0b100, "c13", "c0", 0b001 ) : ( "CONTEXTIDR_EL2", "Context ID Register (EL2)" ),
( 0b011, 0b101, "c13", "c0", 0b001 ) : ( "CONTEXTIDR_EL12", "Context ID Register (EL1)" ),
( 0b011, 0b000, "c1", "c0", 0b010 ) : ( "CPACR_EL1", "Architectural Feature Access Control Register (EL1)" ),
( 0b011, 0b101, "c1", "c0", 0b010 ) : ( "CPACR_EL12", "Architectural Feature Access Control Register (EL1)" ),
( 0b011, 0b100, "c1", "c1", 0b010 ) : ( "CPTR_EL2", "Architectural Feature Trap Register (EL2)" ),
( 0b011, 0b110, "c1", "c1", 0b010 ) : ( "CPTR_EL3", "Architectural Feature Trap Register (EL3)" ),
( 0b011, 0b010, "c0", "c0", 0b000 ) : ( "CSSELR_EL1", "Cache Size Selection Register" ),
( 0b011, 0b011, "c0", "c0", 0b001 ) : ( "CTR_EL0", "Cache Type Register" ),
( 0b011, 0b100, "c3", "c0", 0b000 ) : ( "DACR32_EL2", "Domain Access Control Register" ),
( 0b011, 0b011, "c0", "c0", 0b111 ) : ( "DCZID_EL0", "Data Cache Zero ID register" ),
( 0b011, 0b000, "c5", "c2", 0b000 ) : ( "ESR_EL1", "Exception Syndrome Register (EL1)" ),
( 0b011, 0b100, "c5", "c2", 0b000 ) : ( "ESR_EL2", "Exception Syndrome Register (EL2)" ),
( 0b011, 0b101, "c5", "c2", 0b000 ) : ( "ESR_EL12", "Exception Syndrome Register (EL1)" ),
( 0b011, 0b110, "c5", "c2", 0b000 ) : ( "ESR_EL3", "Exception Syndrome Register (EL3)" ),
( 0b011, 0b000, "c6", "c0", 0b000 ) : ( "FAR_EL1", "Fault Address Register (EL1)" ),
( 0b011, 0b100, "c6", "c0", 0b000 ) : ( "FAR_EL2", "Fault Address Register (EL2)" ),
( 0b011, 0b101, "c6", "c0", 0b000 ) : ( "FAR_EL12", "Fault Address Register (EL1)" ),
( 0b011, 0b110, "c6", "c0", 0b000 ) : ( "FAR_EL3", "Fault Address Register (EL3)" ),
( 0b011, 0b100, "c5", "c3", 0b000 ) : ( "FPEXC32_EL2", "Floating-Point Exception Control register" ),
( 0b011, 0b100, "c1", "c1", 0b111 ) : ( "HACR_EL2", "Hypervisor Auxiliary Control Register" ),
( 0b011, 0b100, "c1", "c1", 0b000 ) : ( "HCR_EL2", "Hypervisor Configuration Register" ),
( 0b011, 0b100, "c6", "c0", 0b100 ) : ( "HPFAR_EL2", "Hypervisor IPA Fault Address Register" ),
( 0b011, 0b100, "c1", "c1", 0b011 ) : ( "HSTR_EL2", "Hypervisor System Trap Register" ),
( 0b011, 0b100, "c3", "c1", 0b110 ) : ( "HAFGRTR_EL2", "Hypervisor Activity Monitors Fine-Grained Read Trap Register" ),
( 0b011, 0b100, "c1", "c2", 0b010 ) : ( "HCRX_EL2", "Extended Hypervisor Configuration Register" ),
( 0b011, 0b100, "c3", "c1", 0b100 ) : ( "HDFGRTR_EL2", "Hypervisor Debug Fine-Grained Read Trap Register" ),
( 0b011, 0b100, "c3", "c1", 0b101 ) : ( "HDFGWTR_EL2", "Hypervisor Debug Fine-Grained Write Trap Register" ),
( 0b011, 0b100, "c1", "c1", 0b110 ) : ( "HFGITR_EL2", "Hypervisor Fine-Grained Instruction Trap Register" ),
( 0b011, 0b100, "c1", "c1", 0b100 ) : ( "HFGRTR_EL2", "Hypervisor Fine-Grained Read Trap Register" ),
( 0b011, 0b100, "c1", "c1", 0b101 ) : ( "HFGWTR_EL2", "Hypervisor Fine-Grained Write Trap Register" ),
( 0b011, 0b000, "c0", "c5", 0b100 ) : ( "ID_AA64AFR0_EL1", "AArch64 Auxiliary Feature Register 0" ),
( 0b011, 0b000, "c0", "c5", 0b101 ) : ( "ID_AA64AFR1_EL1", "AArch64 Auxiliary Feature Register 1" ),
( 0b011, 0b000, "c0", "c5", 0b000 ) : ( "ID_AA64DFR0_EL1", "AArch64 Debug Feature Register 0" ),
( 0b011, 0b000, "c0", "c5", 0b001 ) : ( "ID_AA64DFR1_EL1", "AArch64 Debug Feature Register 1" ),
( 0b011, 0b000, "c0", "c6", 0b000 ) : ( "ID_AA64ISAR0_EL1", "AArch64 Instruction Set Attribute Register 0" ),
( 0b011, 0b000, "c0", "c6", 0b001 ) : ( "ID_AA64ISAR1_EL1", "AArch64 Instruction Set Attribute Register 1" ),
( 0b011, 0b000, "c0", "c7", 0b000 ) : ( "ID_AA64MMFR0_EL1", "AArch64 Memory Model Feature Register 0" ),
( 0b011, 0b000, "c0", "c7", 0b001 ) : ( "ID_AA64MMFR1_EL1", "AArch64 Memory Model Feature Register 1" ),
( 0b011, 0b000, "c0", "c7", 0b010 ) : ( "ID_AA64MMFR2_EL1", "AArch64 Memory Model Feature Register 2" ),
( 0b011, 0b000, "c0", "c4", 0b000 ) : ( "ID_AA64PFR0_EL1", "AArch64 Processor Feature Register 0" ),
( 0b011, 0b000, "c0", "c4", 0b001 ) : ( "ID_AA64PFR1_EL1", "AArch64 Processor Feature Register 1" ),
( 0b011, 0b000, "c0", "c1", 0b011 ) : ( "ID_AFR0_EL1", "AArch32 Auxiliary Feature Register 0" ),
( 0b011, 0b000, "c0", "c1", 0b010 ) : ( "ID_DFR0_EL1", "AArch32 Debug Feature Register 0" ),
( 0b011, 0b000, "c0", "c2", 0b000 ) : ( "ID_ISAR0_EL1", "AArch32 Instruction Set Attribute Register 0" ),
( 0b011, 0b000, "c0", "c2", 0b001 ) : ( "ID_ISAR1_EL1", "AArch32 Instruction Set Attribute Register 1" ),
( 0b011, 0b000, "c0", "c2", 0b010 ) : ( "ID_ISAR2_EL1", "AArch32 Instruction Set Attribute Register 2" ),
( 0b011, 0b000, "c0", "c2", 0b011 ) : ( "ID_ISAR3_EL1", "AArch32 Instruction Set Attribute Register 3" ),
( 0b011, 0b000, "c0", "c2", 0b100 ) : ( "ID_ISAR4_EL1", "AArch32 Instruction Set Attribute Register 4" ),
( 0b011, 0b000, "c0", "c2", 0b101 ) : ( "ID_ISAR5_EL1", "AArch32 Instruction Set Attribute Register 5" ),
( 0b011, 0b000, "c0", "c2", 0b111 ) : ( "ID_ISAR6_EL1", "AArch32 Instruction Set Attribute Register 6" ),
( 0b011, 0b000, "c0", "c1", 0b100 ) : ( "ID_MMFR0_EL1", "AArch32 Memory Model Feature Register 0" ),
( 0b011, 0b000, "c0", "c1", 0b101 ) : ( "ID_MMFR1_EL1", "AArch32 Memory Model Feature Register 1" ),
( 0b011, 0b000, "c0", "c1", 0b110 ) : ( "ID_MMFR2_EL1", "AArch32 Memory Model Feature Register 2" ),
( 0b011, 0b000, "c0", "c1", 0b111 ) : ( "ID_MMFR3_EL1", "AArch32 Memory Model Feature Register 3" ),
( 0b011, 0b000, "c0", "c2", 0b110 ) : ( "ID_MMFR4_EL1", "AArch32 Memory Model Feature Register 4" ),
( 0b011, 0b000, "c0", "c1", 0b000 ) : ( "ID_PFR0_EL1", "AArch32 Processor Feature Register 0" ),
( 0b011, 0b000, "c0", "c1", 0b001 ) : ( "ID_PFR1_EL1", "AArch32 Processor Feature Register 1" ),
( 0b011, 0b000, "c0", "c6", 0b010 ) : ( "ID_AA64ISAR2_EL1", "AArch64 Instruction Set Attribute Register 2" ),
( 0b011, 0b000, "c0", "c4", 0b100 ) : ( "ID_AA64ZFR0_EL1", "SVE Feature ID register 0" ),
( 0b011, 0b000, "c0", "c3", 0b101 ) : ( "ID_DFR1_EL1", "Debug Feature Register 1" ),
( 0b011, 0b000, "c0", "c3", 0b110 ) : ( "ID_MMFR5_EL1", "AArch32 Memory Model Feature Register 5" ),
( 0b011, 0b000, "c0", "c3", 0b100 ) : ( "ID_PFR2_EL1", "AArch32 Processor Feature Register 2" ),
( 0b011, 0b100, "c5", "c0", 0b001 ) : ( "IFSR32_EL2", "Instruction Fault Status Register (EL2)" ),
( 0b011, 0b000, "c12", "c1", 0b000 ) : ( "ISR_EL1", "Interrupt Status Register" ),
( 0b011, 0b000, "c10", "c2", 0b000 ) : ( "MAIR_EL1", "Memory Attribute Indirection Register (EL1)" ),
( 0b011, 0b100, "c10", "c2", 0b000 ) : ( "MAIR_EL2", "Memory Attribute Indirection Register (EL2)" ),
( 0b011, 0b101, "c10", "c2", 0b000 ) : ( "MAIR_EL12", "Memory Attribute Indirection Register (EL1)" ),
( 0b011, 0b110, "c10", "c2", 0b000 ) : ( "MAIR_EL3", "Memory Attribute Indirection Register (EL3)" ),
( 0b011, 0b000, "c0", "c0", 0b000 ) : ( "MIDR_EL1", "Main ID Register" ),
( 0b011, 0b000, "c0", "c0", 0b101 ) : ( "MPIDR_EL1", "Multiprocessor Affinity Register" ),
( 0b011, 0b000, "c0", "c3", 0b000 ) : ( "MVFR0_EL1", "AArch32 Media and VFP Feature Register 0" ),
( 0b011, 0b000, "c0", "c3", 0b001 ) : ( "MVFR1_EL1", "AArch32 Media and VFP Feature Register 1" ),
( 0b011, 0b000, "c0", "c3", 0b010 ) : ( "MVFR2_EL1", "AArch32 Media and VFP Feature Register 2" ),
( 0b011, 0b000, "c7", "c4", 0b000 ) : ( "PAR_EL1", "Physical Address Register" ),
( 0b011, 0b000, "c0", "c0", 0b110 ) : ( "REVIDR_EL1", "Revision ID Register" ),
( 0b011, 0b000, "c12", "c0", 0b010 ) : ( "RMR_EL1", "Reset Management Register (EL1)" ),
( 0b011, 0b100, "c12", "c0", 0b010 ) : ( "RMR_EL2", "Reset Management Register (EL2)" ),
( 0b011, 0b110, "c12", "c0", 0b010 ) : ( "RMR_EL3", "Reset Management Register (EL3)" ),
( 0b011, 0b000, "c12", "c0", 0b001 ) : ( "RVBAR_EL1", "Reset Vector Base Address Register (if EL2 and EL3 not implemented)" ),
( 0b011, 0b100, "c12", "c0", 0b001 ) : ( "RVBAR_EL2", "Reset Vector Base Address Register (if EL3 not implemented)" ),
( 0b011, 0b110, "c12", "c0", 0b001 ) : ( "RVBAR_EL3", "Reset Vector Base Address Register (if EL3 implemented)" ),
( 0b011, 0b110, "c1", "c1", 0b000 ) : ( "SCR_EL3", "Secure Configuration Register" ),
( 0b011, 0b110, "c1", "c1", 0b001 ) : ( "SDER_EL3", "AArch32 Secure Debug Enable Register" ),
( 0b011, 0b000, "c1", "c0", 0b000 ) : ( "SCTLR_EL1", "System Control Register (EL1)" ),
( 0b011, 0b100, "c1", "c0", 0b000 ) : ( "SCTLR_EL2", "System Control Register (EL2)" ),
( 0b011, 0b101, "c1", "c0", 0b000 ) : ( "SCTLR_EL12", "System Control Register (EL1)" ),
( 0b011, 0b110, "c1", "c0", 0b000 ) : ( "SCTLR_EL3", "System Control Register (EL3)" ),
( 0b011, 0b000, "c2", "c0", 0b010 ) : ( "TCR_EL1", "Translation Control Register (EL1)" ),
( 0b011, 0b100, "c2", "c0", 0b010 ) : ( "TCR_EL2", "Translation Control Register (EL2)" ),
( 0b011, 0b101, "c2", "c0", 0b010 ) : ( "TCR_EL12", "Translation Control Register (EL1)" ),
( 0b011, 0b110, "c2", "c0", 0b010 ) : ( "TCR_EL3", "Translation Control Register (EL3)" ),
( 0b011, 0b010, "c0", "c0", 0b000 ) : ( "TEECR32_EL1", "T32EE Configuration Register" ), # Not defined in 8.2 specifications.
( 0b011, 0b010, "c1", "c0", 0b000 ) : ( "TEEHBR32_EL1", "T32EE Handler Base Register" ), # Not defined in 8.2 specifications.
( 0b011, 0b011, "c13", "c0", 0b010 ) : ( "TPIDR_EL0", "EL0 Read/Write Software Thread ID Register" ),
( 0b011, 0b000, "c13", "c0", 0b100 ) : ( "TPIDR_EL1", "EL1 Software Thread ID Register" ),
( 0b011, 0b100, "c13", "c0", 0b010 ) : ( "TPIDR_EL2", "EL2 Software Thread ID Register" ),
( 0b011, 0b110, "c13", "c0", 0b010 ) : ( "TPIDR_EL3", "EL3 Software Thread ID Register" ),
( 0b011, 0b011, "c13", "c0", 0b011 ) : ( "TPIDRRO_EL0", "EL0 Read-Only Software Thread ID Register" ),
( 0b011, 0b000, "c2", "c0", 0b000 ) : ( "TTBR0_EL1", "Translation Table Base Register 0 (EL1)" ),
( 0b011, 0b100, "c2", "c0", 0b000 ) : ( "TTBR0_EL2", "Translation Table Base Register 0 (EL2)" ),
( 0b011, 0b101, "c2", "c0", 0b000 ) : ( "TTBR0_EL12", "Translation Table Base Register 0 (EL1)" ),
( 0b011, 0b110, "c2", "c0", 0b000 ) : ( "TTBR0_EL3", "Translation Table Base Register 0 (EL3)" ),
( 0b011, 0b000, "c2", "c0", 0b001 ) : ( "TTBR1_EL1", "Translation Table Base Register 1 (EL1)" ),
( 0b011, 0b100, "c2", "c0", 0b001 ) : ( "TTBR1_EL2", "Translation Table Base Register 1 (EL2)" ),
( 0b011, 0b101, "c2", "c0", 0b001 ) : ( "TTBR1_EL12", "Translation Table Base Register 1 (EL1)" ),
( 0b011, 0b000, "c12", "c0", 0b000 ) : ( "VBAR_EL1", "Vector Base Address Register (EL1)" ),
( 0b011, 0b100, "c12", "c0", 0b000 ) : ( "VBAR_EL2", "Vector Base Address Register (EL2)" ),
( 0b011, 0b101, "c12", "c0", 0b000 ) : ( "VBAR_EL12", "Vector Base Address Register (EL1)" ),
( 0b011, 0b110, "c12", "c0", 0b000 ) : ( "VBAR_EL3", "Vector Base Address Register (EL3)" ),
( 0b011, 0b100, "c0", "c0", 0b101 ) : ( "VMPIDR_EL2", "Virtualization Multiprocessor ID Register" ),
( 0b011, 0b100, "c0", "c0", 0b000 ) : ( "VPIDR_EL2", "Virtualization Processor ID Register" ),
( 0b011, 0b100, "c2", "c1", 0b010 ) : ( "VTCR_EL2", "Virtualization Translation Control Register" ),
( 0b011, 0b100, "c2", "c1", 0b000 ) : ( "VTTBR_EL2", "Virtualization Translation Table Base Register" ),
( 0b011, 0b001, "c15", "c2", 0b000 ) : ( "CPUACTLR_EL1", "CPU Auxiliary Control Register (EL1)" ),
( 0b011, 0b001, "c15", "c2", 0b001 ) : ( "CPUECTLR_EL1", "CPU Extended Control Register (EL1)" ),
( 0b011, 0b001, "c15", "c2", 0b010 ) : ( "CPUMERRSR_EL1", "CPU Memory Error Syndrome Register" ),
( 0b011, 0b001, "c15", "c2", 0b011 ) : ( "L2MERRSR_EL1", "L2 Memory Error Syndrome Register" ),
( 0b011, 0b000, "c13", "c0", 0b101 ) : ( "ACCDATA_EL1", "Accelerator Data" ),
( 0b011, 0b000, "c1", "c0", 0b110 ) : ( "GCR_EL1", "Tag Control Register." ),
( 0b011, 0b001, "c0", "c0", 0b100 ) : ( "GMID_EL1", " Multiple tag transfer ID register" ),
( 0b011, 0b000, "c1", "c0", 0b101 ) : ( "RGSR_EL1", "Random Allocation Tag Seed Register." ),
( 0b011, 0b011, "c2", "c4", 0b000 ) : ( "RNDR", "Random Number" ),
( 0b011, 0b011, "c2", "c4", 0b001 ) : ( "RNDRRS", "Reseeded Random Number" ),
( 0b011, 0b011, "c13", "c0", 0b111 ) : ( "SCXTNUM_EL0", "EL0 Read/Write Software Context Number" ),
( 0b011, 0b000, "c13", "c0", 0b111 ) : ( "SCXTNUM_EL1", "EL1 Read/Write Software Context Number" ),
( 0b011, 0b100, "c13", "c0", 0b111 ) : ( "SCXTNUM_EL2", "EL2 Read/Write Software Context Number" ),
( 0b011, 0b110, "c13", "c0", 0b111 ) : ( "SCXTNUM_EL3", "EL3 Read/Write Software Context Number" ),
( 0b011, 0b000, "c5", "c6", 0b000 ) : ( "TFSR_EL1", "Tag Fault Status Register (EL1)" ),
( 0b011, 0b100, "c5", "c6", 0b000 ) : ( "TFSR_EL2", "Tag Fault Status Register (EL2)" ),
( 0b011, 0b110, "c5", "c6", 0b000 ) : ( "TFSR_EL3", "Tag Fault Status Register (EL3)" ),
( 0b011, 0b000, "c5", "c6", 0b001 ) : ( "TFSRE0_EL1", "Tag Fault Status Register (EL0)." ),
( 0b011, 0b100, "c2", "c2", 0b000 ) : ( "VNCR_EL2", "Virtual Nested Control Register" ),
( 0b011, 0b100, "c2", "c6", 0b010 ) : ( "VSTCR_EL2", "Virtualization Secure Translation Control Register" ),
( 0b011, 0b100, "c2", "c6", 0b000 ) : ( "VSTTBR_EL2", "Virtualization Secure Translation Table Base Register" ),
# SVE.
( 0b011, 0b000, "c1", "c2", 0b000 ) : ( "ZCR_EL1", "SVE Control Register (EL1)" ),
( 0b011, 0b100, "c1", "c2", 0b000 ) : ( "ZCR_EL2", "SVE Control Register (EL2)" ),
( 0b011, 0b110, "c1", "c2", 0b000 ) : ( "ZCR_EL3", "SVE Control Register (EL3)" ),
# Activity Monitors.
( 0b011, 0b011, "c13", "c2", 0b001 ) : ( "AMCFGR_EL0", "Activity Monitors Configuration Register" ),
( 0b011, 0b011, "c13", "c2", 0b110 ) : ( "AMCG1IDR_EL0", "Activity Monitors Counter Group 1 Identification Register" ),
( 0b011, 0b011, "c13", "c2", 0b010 ) : ( "AMCGCR_EL0", "Activity Monitors Counter Group Configuration Register" ),
( 0b011, 0b011, "c13", "c2", 0b100 ) : ( "AMCNTENCLR0_EL0", "Activity Monitors Count Enable Clear Register 0" ),
( 0b011, 0b011, "c13", "c3", 0b000 ) : ( "AMCNTENCLR1_EL0", "Activity Monitors Count Enable Clear Register 1" ),
( 0b011, 0b011, "c13", "c2", 0b101 ) : ( "AMCNTENSET0_EL0", "Activity Monitors Count Enable Set Register 0" ),
( 0b011, 0b011, "c13", "c3", 0b001 ) : ( "AMCNTENSET1_EL0", "Activity Monitors Count Enable Set Register 1" ),
( 0b011, 0b011, "c13", "c2", 0b000 ) : ( "AMCR_EL0", "Activity Monitors Control Register" ),
( 0b011, 0b011, "c13", "c4", 0b000 ) : ( "AMEVCNTR00_EL0", "Activity Monitors Event Counter Registers 0" ),
( 0b011, 0b011, "c13", "c4", 0b001 ) : ( "AMEVCNTR01_EL0", "Activity Monitors Event Counter Registers 0" ),
( 0b011, 0b011, "c13", "c4", 0b010 ) : ( "AMEVCNTR02_EL0", "Activity Monitors Event Counter Registers 0" ),
( 0b011, 0b011, "c13", "c4", 0b011 ) : ( "AMEVCNTR03_EL0", "Activity Monitors Event Counter Registers 0" ),
( 0b011, 0b011, "c13", "c12", 0b000 ) : ( "AMEVCNTR10_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b001 ) : ( "AMEVCNTR11_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b010 ) : ( "AMEVCNTR12_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b011 ) : ( "AMEVCNTR13_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b100 ) : ( "AMEVCNTR14_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b101 ) : ( "AMEVCNTR15_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b110 ) : ( "AMEVCNTR16_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c12", 0b111 ) : ( "AMEVCNTR17_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b000 ) : ( "AMEVCNTR18_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b001 ) : ( "AMEVCNTR19_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b010 ) : ( "AMEVCNTR110_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b011 ) : ( "AMEVCNTR111_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b100 ) : ( "AMEVCNTR112_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b101 ) : ( "AMEVCNTR113_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b110 ) : ( "AMEVCNTR114_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b011, "c13", "c13", 0b111 ) : ( "AMEVCNTR115_EL0", "Activity Monitors Event Counter Registers 1" ),
( 0b011, 0b100, "c13", "c8", 0b000 ) : ( "AMEVCNTVOFF00_EL2", "Activity Monitors Event Counter Virtual Offset Registers 0" ),
( 0b011, 0b100, "c13", "c8", 0b001 ) : ( "AMEVCNTVOFF01_EL2", "Activity Monitors Event Counter Virtual Offset Registers 0" ),
( 0b011, 0b100, "c13", "c8", 0b010 ) : ( "AMEVCNTVOFF02_EL2", "Activity Monitors Event Counter Virtual Offset Registers 0" ),
( 0b011, 0b100, "c13", "c8", 0b011 ) : ( "AMEVCNTVOFF03_EL2", "Activity Monitors Event Counter Virtual Offset Registers 0" ),