xref: /aosp_15_r20/external/capstone/arch/AArch64/AArch64BaseInfo.c (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi //===-- AArch64BaseInfo.cpp - AArch64 Base encoding information------------===//
2*9a0e4156SSadaf Ebrahimi //
3*9a0e4156SSadaf Ebrahimi //                     The LLVM Compiler Infrastructure
4*9a0e4156SSadaf Ebrahimi //
5*9a0e4156SSadaf Ebrahimi // This file is distributed under the University of Illinois Open Source
6*9a0e4156SSadaf Ebrahimi // License. See LICENSE.TXT for details.
7*9a0e4156SSadaf Ebrahimi //
8*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===//
9*9a0e4156SSadaf Ebrahimi //
10*9a0e4156SSadaf Ebrahimi // This file provides basic encoding and assembly information for AArch64.
11*9a0e4156SSadaf Ebrahimi //
12*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===//
13*9a0e4156SSadaf Ebrahimi 
14*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */
15*9a0e4156SSadaf Ebrahimi /* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */
16*9a0e4156SSadaf Ebrahimi 
17*9a0e4156SSadaf Ebrahimi #ifdef CAPSTONE_HAS_ARM64
18*9a0e4156SSadaf Ebrahimi 
19*9a0e4156SSadaf Ebrahimi #if defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64)
20*9a0e4156SSadaf Ebrahimi #pragma warning(disable:4996)			// disable MSVC's warning on strcpy()
21*9a0e4156SSadaf Ebrahimi #pragma warning(disable:28719)		// disable MSVC's warning on strcpy()
22*9a0e4156SSadaf Ebrahimi #endif
23*9a0e4156SSadaf Ebrahimi 
24*9a0e4156SSadaf Ebrahimi #include "../../utils.h"
25*9a0e4156SSadaf Ebrahimi 
26*9a0e4156SSadaf Ebrahimi #include <stdio.h>
27*9a0e4156SSadaf Ebrahimi #include <stdlib.h>
28*9a0e4156SSadaf Ebrahimi 
29*9a0e4156SSadaf Ebrahimi #include "AArch64BaseInfo.h"
30*9a0e4156SSadaf Ebrahimi 
A64NamedImmMapper_toString(const A64NamedImmMapper * N,uint32_t Value,bool * Valid)31*9a0e4156SSadaf Ebrahimi const char *A64NamedImmMapper_toString(const A64NamedImmMapper *N, uint32_t Value, bool *Valid)
32*9a0e4156SSadaf Ebrahimi {
33*9a0e4156SSadaf Ebrahimi 	unsigned i;
34*9a0e4156SSadaf Ebrahimi 	for (i = 0; i < N->NumPairs; ++i) {
35*9a0e4156SSadaf Ebrahimi 		if (N->Pairs[i].Value == Value) {
36*9a0e4156SSadaf Ebrahimi 			*Valid = true;
37*9a0e4156SSadaf Ebrahimi 			return N->Pairs[i].Name;
38*9a0e4156SSadaf Ebrahimi 		}
39*9a0e4156SSadaf Ebrahimi 	}
40*9a0e4156SSadaf Ebrahimi 
41*9a0e4156SSadaf Ebrahimi 	*Valid = false;
42*9a0e4156SSadaf Ebrahimi 	return 0;
43*9a0e4156SSadaf Ebrahimi }
44*9a0e4156SSadaf Ebrahimi 
45*9a0e4156SSadaf Ebrahimi // compare s1 with lower(s2)
46*9a0e4156SSadaf Ebrahimi // return true if s1 == lower(f2), and false otherwise
compare_lower_str(const char * s1,const char * s2)47*9a0e4156SSadaf Ebrahimi static bool compare_lower_str(const char *s1, const char *s2)
48*9a0e4156SSadaf Ebrahimi {
49*9a0e4156SSadaf Ebrahimi 	bool res;
50*9a0e4156SSadaf Ebrahimi 	char *lower = cs_strdup(s2), *c;
51*9a0e4156SSadaf Ebrahimi 	for (c = lower; *c; c++)
52*9a0e4156SSadaf Ebrahimi 		*c = (char)tolower((int) *c);
53*9a0e4156SSadaf Ebrahimi 
54*9a0e4156SSadaf Ebrahimi 	res = (strcmp(s1, lower) == 0);
55*9a0e4156SSadaf Ebrahimi 	cs_mem_free(lower);
56*9a0e4156SSadaf Ebrahimi 
57*9a0e4156SSadaf Ebrahimi 	return res;
58*9a0e4156SSadaf Ebrahimi }
59*9a0e4156SSadaf Ebrahimi 
A64NamedImmMapper_fromString(const A64NamedImmMapper * N,char * Name,bool * Valid)60*9a0e4156SSadaf Ebrahimi uint32_t A64NamedImmMapper_fromString(const A64NamedImmMapper *N, char *Name, bool *Valid)
61*9a0e4156SSadaf Ebrahimi {
62*9a0e4156SSadaf Ebrahimi 	unsigned i;
63*9a0e4156SSadaf Ebrahimi 	for (i = 0; i < N->NumPairs; ++i) {
64*9a0e4156SSadaf Ebrahimi 		if (compare_lower_str(N->Pairs[i].Name, Name)) {
65*9a0e4156SSadaf Ebrahimi 			*Valid = true;
66*9a0e4156SSadaf Ebrahimi 			return N->Pairs[i].Value;
67*9a0e4156SSadaf Ebrahimi 		}
68*9a0e4156SSadaf Ebrahimi 	}
69*9a0e4156SSadaf Ebrahimi 
70*9a0e4156SSadaf Ebrahimi 	*Valid = false;
71*9a0e4156SSadaf Ebrahimi 	return (uint32_t)-1;
72*9a0e4156SSadaf Ebrahimi }
73*9a0e4156SSadaf Ebrahimi 
A64NamedImmMapper_validImm(const A64NamedImmMapper * N,uint32_t Value)74*9a0e4156SSadaf Ebrahimi bool A64NamedImmMapper_validImm(const A64NamedImmMapper *N, uint32_t Value)
75*9a0e4156SSadaf Ebrahimi {
76*9a0e4156SSadaf Ebrahimi 	return Value < N->TooBigImm;
77*9a0e4156SSadaf Ebrahimi }
78*9a0e4156SSadaf Ebrahimi 
79*9a0e4156SSadaf Ebrahimi // return a string representing the number X
80*9a0e4156SSadaf Ebrahimi // NOTE: caller must free() the result itself to avoid memory leak
utostr(uint64_t X,bool isNeg)81*9a0e4156SSadaf Ebrahimi static char *utostr(uint64_t X, bool isNeg)
82*9a0e4156SSadaf Ebrahimi {
83*9a0e4156SSadaf Ebrahimi 	char Buffer[22];
84*9a0e4156SSadaf Ebrahimi 	char *BufPtr = Buffer+21;
85*9a0e4156SSadaf Ebrahimi 	char *result;
86*9a0e4156SSadaf Ebrahimi 
87*9a0e4156SSadaf Ebrahimi 	Buffer[21] = '\0';
88*9a0e4156SSadaf Ebrahimi 	if (X == 0) *--BufPtr = '0';  // Handle special case...
89*9a0e4156SSadaf Ebrahimi 
90*9a0e4156SSadaf Ebrahimi 	while (X) {
91*9a0e4156SSadaf Ebrahimi 		*--BufPtr = X % 10 + '0';
92*9a0e4156SSadaf Ebrahimi 		X /= 10;
93*9a0e4156SSadaf Ebrahimi 	}
94*9a0e4156SSadaf Ebrahimi 
95*9a0e4156SSadaf Ebrahimi 	if (isNeg) *--BufPtr = '-';   // Add negative sign...
96*9a0e4156SSadaf Ebrahimi 
97*9a0e4156SSadaf Ebrahimi 	result = cs_strdup(BufPtr);
98*9a0e4156SSadaf Ebrahimi 	return result;
99*9a0e4156SSadaf Ebrahimi }
100*9a0e4156SSadaf Ebrahimi 
101*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping SysRegPairs[] = {
102*9a0e4156SSadaf Ebrahimi 	{"pan", A64SysReg_PAN},
103*9a0e4156SSadaf Ebrahimi 	{"uao", A64SysReg_UAO},
104*9a0e4156SSadaf Ebrahimi 	{"osdtrrx_el1", A64SysReg_OSDTRRX_EL1},
105*9a0e4156SSadaf Ebrahimi 	{"osdtrtx_el1",  A64SysReg_OSDTRTX_EL1},
106*9a0e4156SSadaf Ebrahimi 	{"teecr32_el1", A64SysReg_TEECR32_EL1},
107*9a0e4156SSadaf Ebrahimi 	{"mdccint_el1", A64SysReg_MDCCINT_EL1},
108*9a0e4156SSadaf Ebrahimi 	{"mdscr_el1", A64SysReg_MDSCR_EL1},
109*9a0e4156SSadaf Ebrahimi 	{"dbgdtr_el0", A64SysReg_DBGDTR_EL0},
110*9a0e4156SSadaf Ebrahimi 	{"oseccr_el1", A64SysReg_OSECCR_EL1},
111*9a0e4156SSadaf Ebrahimi 	{"dbgvcr32_el2", A64SysReg_DBGVCR32_EL2},
112*9a0e4156SSadaf Ebrahimi 	{"dbgbvr0_el1", A64SysReg_DBGBVR0_EL1},
113*9a0e4156SSadaf Ebrahimi 	{"dbgbvr1_el1", A64SysReg_DBGBVR1_EL1},
114*9a0e4156SSadaf Ebrahimi 	{"dbgbvr2_el1", A64SysReg_DBGBVR2_EL1},
115*9a0e4156SSadaf Ebrahimi 	{"dbgbvr3_el1", A64SysReg_DBGBVR3_EL1},
116*9a0e4156SSadaf Ebrahimi 	{"dbgbvr4_el1", A64SysReg_DBGBVR4_EL1},
117*9a0e4156SSadaf Ebrahimi 	{"dbgbvr5_el1", A64SysReg_DBGBVR5_EL1},
118*9a0e4156SSadaf Ebrahimi 	{"dbgbvr6_el1", A64SysReg_DBGBVR6_EL1},
119*9a0e4156SSadaf Ebrahimi 	{"dbgbvr7_el1", A64SysReg_DBGBVR7_EL1},
120*9a0e4156SSadaf Ebrahimi 	{"dbgbvr8_el1", A64SysReg_DBGBVR8_EL1},
121*9a0e4156SSadaf Ebrahimi 	{"dbgbvr9_el1", A64SysReg_DBGBVR9_EL1},
122*9a0e4156SSadaf Ebrahimi 	{"dbgbvr10_el1", A64SysReg_DBGBVR10_EL1},
123*9a0e4156SSadaf Ebrahimi 	{"dbgbvr11_el1", A64SysReg_DBGBVR11_EL1},
124*9a0e4156SSadaf Ebrahimi 	{"dbgbvr12_el1", A64SysReg_DBGBVR12_EL1},
125*9a0e4156SSadaf Ebrahimi 	{"dbgbvr13_el1", A64SysReg_DBGBVR13_EL1},
126*9a0e4156SSadaf Ebrahimi 	{"dbgbvr14_el1", A64SysReg_DBGBVR14_EL1},
127*9a0e4156SSadaf Ebrahimi 	{"dbgbvr15_el1", A64SysReg_DBGBVR15_EL1},
128*9a0e4156SSadaf Ebrahimi 	{"dbgbcr0_el1", A64SysReg_DBGBCR0_EL1},
129*9a0e4156SSadaf Ebrahimi 	{"dbgbcr1_el1", A64SysReg_DBGBCR1_EL1},
130*9a0e4156SSadaf Ebrahimi 	{"dbgbcr2_el1", A64SysReg_DBGBCR2_EL1},
131*9a0e4156SSadaf Ebrahimi 	{"dbgbcr3_el1", A64SysReg_DBGBCR3_EL1},
132*9a0e4156SSadaf Ebrahimi 	{"dbgbcr4_el1", A64SysReg_DBGBCR4_EL1},
133*9a0e4156SSadaf Ebrahimi 	{"dbgbcr5_el1", A64SysReg_DBGBCR5_EL1},
134*9a0e4156SSadaf Ebrahimi 	{"dbgbcr6_el1", A64SysReg_DBGBCR6_EL1},
135*9a0e4156SSadaf Ebrahimi 	{"dbgbcr7_el1", A64SysReg_DBGBCR7_EL1},
136*9a0e4156SSadaf Ebrahimi 	{"dbgbcr8_el1", A64SysReg_DBGBCR8_EL1},
137*9a0e4156SSadaf Ebrahimi 	{"dbgbcr9_el1", A64SysReg_DBGBCR9_EL1},
138*9a0e4156SSadaf Ebrahimi 	{"dbgbcr10_el1", A64SysReg_DBGBCR10_EL1},
139*9a0e4156SSadaf Ebrahimi 	{"dbgbcr11_el1", A64SysReg_DBGBCR11_EL1},
140*9a0e4156SSadaf Ebrahimi 	{"dbgbcr12_el1", A64SysReg_DBGBCR12_EL1},
141*9a0e4156SSadaf Ebrahimi 	{"dbgbcr13_el1", A64SysReg_DBGBCR13_EL1},
142*9a0e4156SSadaf Ebrahimi 	{"dbgbcr14_el1", A64SysReg_DBGBCR14_EL1},
143*9a0e4156SSadaf Ebrahimi 	{"dbgbcr15_el1", A64SysReg_DBGBCR15_EL1},
144*9a0e4156SSadaf Ebrahimi 	{"dbgwvr0_el1", A64SysReg_DBGWVR0_EL1},
145*9a0e4156SSadaf Ebrahimi 	{"dbgwvr1_el1", A64SysReg_DBGWVR1_EL1},
146*9a0e4156SSadaf Ebrahimi 	{"dbgwvr2_el1", A64SysReg_DBGWVR2_EL1},
147*9a0e4156SSadaf Ebrahimi 	{"dbgwvr3_el1", A64SysReg_DBGWVR3_EL1},
148*9a0e4156SSadaf Ebrahimi 	{"dbgwvr4_el1", A64SysReg_DBGWVR4_EL1},
149*9a0e4156SSadaf Ebrahimi 	{"dbgwvr5_el1", A64SysReg_DBGWVR5_EL1},
150*9a0e4156SSadaf Ebrahimi 	{"dbgwvr6_el1", A64SysReg_DBGWVR6_EL1},
151*9a0e4156SSadaf Ebrahimi 	{"dbgwvr7_el1", A64SysReg_DBGWVR7_EL1},
152*9a0e4156SSadaf Ebrahimi 	{"dbgwvr8_el1", A64SysReg_DBGWVR8_EL1},
153*9a0e4156SSadaf Ebrahimi 	{"dbgwvr9_el1", A64SysReg_DBGWVR9_EL1},
154*9a0e4156SSadaf Ebrahimi 	{"dbgwvr10_el1", A64SysReg_DBGWVR10_EL1},
155*9a0e4156SSadaf Ebrahimi 	{"dbgwvr11_el1", A64SysReg_DBGWVR11_EL1},
156*9a0e4156SSadaf Ebrahimi 	{"dbgwvr12_el1", A64SysReg_DBGWVR12_EL1},
157*9a0e4156SSadaf Ebrahimi 	{"dbgwvr13_el1", A64SysReg_DBGWVR13_EL1},
158*9a0e4156SSadaf Ebrahimi 	{"dbgwvr14_el1", A64SysReg_DBGWVR14_EL1},
159*9a0e4156SSadaf Ebrahimi 	{"dbgwvr15_el1", A64SysReg_DBGWVR15_EL1},
160*9a0e4156SSadaf Ebrahimi 	{"dbgwcr0_el1", A64SysReg_DBGWCR0_EL1},
161*9a0e4156SSadaf Ebrahimi 	{"dbgwcr1_el1", A64SysReg_DBGWCR1_EL1},
162*9a0e4156SSadaf Ebrahimi 	{"dbgwcr2_el1", A64SysReg_DBGWCR2_EL1},
163*9a0e4156SSadaf Ebrahimi 	{"dbgwcr3_el1", A64SysReg_DBGWCR3_EL1},
164*9a0e4156SSadaf Ebrahimi 	{"dbgwcr4_el1", A64SysReg_DBGWCR4_EL1},
165*9a0e4156SSadaf Ebrahimi 	{"dbgwcr5_el1", A64SysReg_DBGWCR5_EL1},
166*9a0e4156SSadaf Ebrahimi 	{"dbgwcr6_el1", A64SysReg_DBGWCR6_EL1},
167*9a0e4156SSadaf Ebrahimi 	{"dbgwcr7_el1", A64SysReg_DBGWCR7_EL1},
168*9a0e4156SSadaf Ebrahimi 	{"dbgwcr8_el1", A64SysReg_DBGWCR8_EL1},
169*9a0e4156SSadaf Ebrahimi 	{"dbgwcr9_el1", A64SysReg_DBGWCR9_EL1},
170*9a0e4156SSadaf Ebrahimi 	{"dbgwcr10_el1", A64SysReg_DBGWCR10_EL1},
171*9a0e4156SSadaf Ebrahimi 	{"dbgwcr11_el1", A64SysReg_DBGWCR11_EL1},
172*9a0e4156SSadaf Ebrahimi 	{"dbgwcr12_el1", A64SysReg_DBGWCR12_EL1},
173*9a0e4156SSadaf Ebrahimi 	{"dbgwcr13_el1", A64SysReg_DBGWCR13_EL1},
174*9a0e4156SSadaf Ebrahimi 	{"dbgwcr14_el1", A64SysReg_DBGWCR14_EL1},
175*9a0e4156SSadaf Ebrahimi 	{"dbgwcr15_el1", A64SysReg_DBGWCR15_EL1},
176*9a0e4156SSadaf Ebrahimi 	{"teehbr32_el1", A64SysReg_TEEHBR32_EL1},
177*9a0e4156SSadaf Ebrahimi 	{"osdlr_el1", A64SysReg_OSDLR_EL1},
178*9a0e4156SSadaf Ebrahimi 	{"dbgprcr_el1", A64SysReg_DBGPRCR_EL1},
179*9a0e4156SSadaf Ebrahimi 	{"dbgclaimset_el1", A64SysReg_DBGCLAIMSET_EL1},
180*9a0e4156SSadaf Ebrahimi 	{"dbgclaimclr_el1", A64SysReg_DBGCLAIMCLR_EL1},
181*9a0e4156SSadaf Ebrahimi 	{"csselr_el1", A64SysReg_CSSELR_EL1},
182*9a0e4156SSadaf Ebrahimi 	{"vpidr_el2", A64SysReg_VPIDR_EL2},
183*9a0e4156SSadaf Ebrahimi 	{"vmpidr_el2", A64SysReg_VMPIDR_EL2},
184*9a0e4156SSadaf Ebrahimi 	{"sctlr_el1", A64SysReg_SCTLR_EL1},
185*9a0e4156SSadaf Ebrahimi 	{"sctlr_el12", A64SysReg_SCTLR_EL12},
186*9a0e4156SSadaf Ebrahimi 	{"sctlr_el2", A64SysReg_SCTLR_EL2},
187*9a0e4156SSadaf Ebrahimi 	{"sctlr_el3", A64SysReg_SCTLR_EL3},
188*9a0e4156SSadaf Ebrahimi 	{"actlr_el1", A64SysReg_ACTLR_EL1},
189*9a0e4156SSadaf Ebrahimi 	{"actlr_el2", A64SysReg_ACTLR_EL2},
190*9a0e4156SSadaf Ebrahimi 	{"actlr_el3", A64SysReg_ACTLR_EL3},
191*9a0e4156SSadaf Ebrahimi 	{"cpacr_el1", A64SysReg_CPACR_EL1},
192*9a0e4156SSadaf Ebrahimi 	{"cpacr_el12", A64SysReg_CPACR_EL12},
193*9a0e4156SSadaf Ebrahimi 	{"hcr_el2", A64SysReg_HCR_EL2},
194*9a0e4156SSadaf Ebrahimi 	{"scr_el3", A64SysReg_SCR_EL3},
195*9a0e4156SSadaf Ebrahimi 	{"mdcr_el2", A64SysReg_MDCR_EL2},
196*9a0e4156SSadaf Ebrahimi 	{"sder32_el3", A64SysReg_SDER32_EL3},
197*9a0e4156SSadaf Ebrahimi 	{"cptr_el2", A64SysReg_CPTR_EL2},
198*9a0e4156SSadaf Ebrahimi 	{"cptr_el3", A64SysReg_CPTR_EL3},
199*9a0e4156SSadaf Ebrahimi 	{"hstr_el2", A64SysReg_HSTR_EL2},
200*9a0e4156SSadaf Ebrahimi 	{"hacr_el2", A64SysReg_HACR_EL2},
201*9a0e4156SSadaf Ebrahimi 	{"mdcr_el3", A64SysReg_MDCR_EL3},
202*9a0e4156SSadaf Ebrahimi 	{"ttbr0_el1", A64SysReg_TTBR0_EL1},
203*9a0e4156SSadaf Ebrahimi 	{"ttbr0_el12", A64SysReg_TTBR0_EL12},
204*9a0e4156SSadaf Ebrahimi 	{"ttbr0_el2", A64SysReg_TTBR0_EL2},
205*9a0e4156SSadaf Ebrahimi 	{"ttbr0_el3", A64SysReg_TTBR0_EL3},
206*9a0e4156SSadaf Ebrahimi 	{"ttbr1_el1", A64SysReg_TTBR1_EL1},
207*9a0e4156SSadaf Ebrahimi 	{"ttbr1_el12", A64SysReg_TTBR1_EL12},
208*9a0e4156SSadaf Ebrahimi 	{"ttbr1_el2", A64SysReg_TTBR1_EL2},
209*9a0e4156SSadaf Ebrahimi 	{"tcr_el1", A64SysReg_TCR_EL1},
210*9a0e4156SSadaf Ebrahimi 	{"tcr_el12", A64SysReg_TCR_EL12},
211*9a0e4156SSadaf Ebrahimi 	{"tcr_el2", A64SysReg_TCR_EL2},
212*9a0e4156SSadaf Ebrahimi 	{"tcr_el3", A64SysReg_TCR_EL3},
213*9a0e4156SSadaf Ebrahimi 	{"vttbr_el2", A64SysReg_VTTBR_EL2},
214*9a0e4156SSadaf Ebrahimi 	{"vtcr_el2", A64SysReg_VTCR_EL2},
215*9a0e4156SSadaf Ebrahimi 	{"dacr32_el2", A64SysReg_DACR32_EL2},
216*9a0e4156SSadaf Ebrahimi 	{"spsr_el1", A64SysReg_SPSR_EL1},
217*9a0e4156SSadaf Ebrahimi 	{"spsr_el12", A64SysReg_SPSR_EL12},
218*9a0e4156SSadaf Ebrahimi 	{"spsr_el2", A64SysReg_SPSR_EL2},
219*9a0e4156SSadaf Ebrahimi 	{"spsr_el3", A64SysReg_SPSR_EL3},
220*9a0e4156SSadaf Ebrahimi 	{"elr_el1", A64SysReg_ELR_EL1},
221*9a0e4156SSadaf Ebrahimi 	{"elr_el12", A64SysReg_ELR_EL12},
222*9a0e4156SSadaf Ebrahimi 	{"elr_el2", A64SysReg_ELR_EL2},
223*9a0e4156SSadaf Ebrahimi 	{"elr_el3", A64SysReg_ELR_EL3},
224*9a0e4156SSadaf Ebrahimi 	{"sp_el0", A64SysReg_SP_EL0},
225*9a0e4156SSadaf Ebrahimi 	{"sp_el1", A64SysReg_SP_EL1},
226*9a0e4156SSadaf Ebrahimi 	{"sp_el2", A64SysReg_SP_EL2},
227*9a0e4156SSadaf Ebrahimi 	{"spsel", A64SysReg_SPSel},
228*9a0e4156SSadaf Ebrahimi 	{"nzcv", A64SysReg_NZCV},
229*9a0e4156SSadaf Ebrahimi 	{"daif", A64SysReg_DAIF},
230*9a0e4156SSadaf Ebrahimi 	{"currentel", A64SysReg_CurrentEL},
231*9a0e4156SSadaf Ebrahimi 	{"spsr_irq", A64SysReg_SPSR_irq},
232*9a0e4156SSadaf Ebrahimi 	{"spsr_abt", A64SysReg_SPSR_abt},
233*9a0e4156SSadaf Ebrahimi 	{"spsr_und", A64SysReg_SPSR_und},
234*9a0e4156SSadaf Ebrahimi 	{"spsr_fiq", A64SysReg_SPSR_fiq},
235*9a0e4156SSadaf Ebrahimi 	{"fpcr", A64SysReg_FPCR},
236*9a0e4156SSadaf Ebrahimi 	{"fpsr", A64SysReg_FPSR},
237*9a0e4156SSadaf Ebrahimi 	{"dspsr_el0", A64SysReg_DSPSR_EL0},
238*9a0e4156SSadaf Ebrahimi 	{"dlr_el0", A64SysReg_DLR_EL0},
239*9a0e4156SSadaf Ebrahimi 	{"ifsr32_el2", A64SysReg_IFSR32_EL2},
240*9a0e4156SSadaf Ebrahimi 	{"afsr0_el1", A64SysReg_AFSR0_EL1},
241*9a0e4156SSadaf Ebrahimi 	{"afsr0_el12", A64SysReg_AFSR0_EL12},
242*9a0e4156SSadaf Ebrahimi 	{"afsr0_el2", A64SysReg_AFSR0_EL2},
243*9a0e4156SSadaf Ebrahimi 	{"afsr0_el3", A64SysReg_AFSR0_EL3},
244*9a0e4156SSadaf Ebrahimi 	{"afsr1_el1", A64SysReg_AFSR1_EL1},
245*9a0e4156SSadaf Ebrahimi 	{"afsr1_el12", A64SysReg_AFSR1_EL12},
246*9a0e4156SSadaf Ebrahimi 	{"afsr1_el2", A64SysReg_AFSR1_EL2},
247*9a0e4156SSadaf Ebrahimi 	{"afsr1_el3", A64SysReg_AFSR1_EL3},
248*9a0e4156SSadaf Ebrahimi 	{"esr_el1", A64SysReg_ESR_EL1},
249*9a0e4156SSadaf Ebrahimi 	{"esr_el12", A64SysReg_ESR_EL12},
250*9a0e4156SSadaf Ebrahimi 	{"esr_el2", A64SysReg_ESR_EL2},
251*9a0e4156SSadaf Ebrahimi 	{"esr_el3", A64SysReg_ESR_EL3},
252*9a0e4156SSadaf Ebrahimi 	{"fpexc32_el2", A64SysReg_FPEXC32_EL2},
253*9a0e4156SSadaf Ebrahimi 	{"far_el1", A64SysReg_FAR_EL1},
254*9a0e4156SSadaf Ebrahimi 	{"far_el12", A64SysReg_FAR_EL12},
255*9a0e4156SSadaf Ebrahimi 	{"far_el2", A64SysReg_FAR_EL2},
256*9a0e4156SSadaf Ebrahimi 	{"far_el3", A64SysReg_FAR_EL3},
257*9a0e4156SSadaf Ebrahimi 	{"hpfar_el2", A64SysReg_HPFAR_EL2},
258*9a0e4156SSadaf Ebrahimi 	{"par_el1", A64SysReg_PAR_EL1},
259*9a0e4156SSadaf Ebrahimi 	{"pmcr_el0", A64SysReg_PMCR_EL0},
260*9a0e4156SSadaf Ebrahimi 	{"pmcntenset_el0", A64SysReg_PMCNTENSET_EL0},
261*9a0e4156SSadaf Ebrahimi 	{"pmcntenclr_el0", A64SysReg_PMCNTENCLR_EL0},
262*9a0e4156SSadaf Ebrahimi 	{"pmovsclr_el0", A64SysReg_PMOVSCLR_EL0},
263*9a0e4156SSadaf Ebrahimi 	{"pmselr_el0", A64SysReg_PMSELR_EL0},
264*9a0e4156SSadaf Ebrahimi 	{"pmccntr_el0", A64SysReg_PMCCNTR_EL0},
265*9a0e4156SSadaf Ebrahimi 	{"pmxevtyper_el0", A64SysReg_PMXEVTYPER_EL0},
266*9a0e4156SSadaf Ebrahimi 	{"pmxevcntr_el0", A64SysReg_PMXEVCNTR_EL0},
267*9a0e4156SSadaf Ebrahimi 	{"pmuserenr_el0", A64SysReg_PMUSERENR_EL0},
268*9a0e4156SSadaf Ebrahimi 	{"pmintenset_el1", A64SysReg_PMINTENSET_EL1},
269*9a0e4156SSadaf Ebrahimi 	{"pmintenclr_el1", A64SysReg_PMINTENCLR_EL1},
270*9a0e4156SSadaf Ebrahimi 	{"pmovsset_el0", A64SysReg_PMOVSSET_EL0},
271*9a0e4156SSadaf Ebrahimi 	{"mair_el1", A64SysReg_MAIR_EL1},
272*9a0e4156SSadaf Ebrahimi 	{"mair_el12", A64SysReg_MAIR_EL12},
273*9a0e4156SSadaf Ebrahimi 	{"mair_el2", A64SysReg_MAIR_EL2},
274*9a0e4156SSadaf Ebrahimi 	{"mair_el3", A64SysReg_MAIR_EL3},
275*9a0e4156SSadaf Ebrahimi 	{"amair_el1", A64SysReg_AMAIR_EL1},
276*9a0e4156SSadaf Ebrahimi 	{"amair_el12", A64SysReg_AMAIR_EL12},
277*9a0e4156SSadaf Ebrahimi 	{"amair_el2", A64SysReg_AMAIR_EL2},
278*9a0e4156SSadaf Ebrahimi 	{"amair_el3", A64SysReg_AMAIR_EL3},
279*9a0e4156SSadaf Ebrahimi 	{"vbar_el1", A64SysReg_VBAR_EL1},
280*9a0e4156SSadaf Ebrahimi 	{"vbar_el12", A64SysReg_VBAR_EL12},
281*9a0e4156SSadaf Ebrahimi 	{"vbar_el2", A64SysReg_VBAR_EL2},
282*9a0e4156SSadaf Ebrahimi 	{"vbar_el3", A64SysReg_VBAR_EL3},
283*9a0e4156SSadaf Ebrahimi 	{"rmr_el1", A64SysReg_RMR_EL1},
284*9a0e4156SSadaf Ebrahimi 	{"rmr_el2", A64SysReg_RMR_EL2},
285*9a0e4156SSadaf Ebrahimi 	{"rmr_el3", A64SysReg_RMR_EL3},
286*9a0e4156SSadaf Ebrahimi 	{"contextidr_el1", A64SysReg_CONTEXTIDR_EL1},
287*9a0e4156SSadaf Ebrahimi 	{"contextidr_el12", A64SysReg_CONTEXTIDR_EL12},
288*9a0e4156SSadaf Ebrahimi 	{"contextidr_el2", A64SysReg_CONTEXTIDR_EL2},
289*9a0e4156SSadaf Ebrahimi 	{"tpidr_el0", A64SysReg_TPIDR_EL0},
290*9a0e4156SSadaf Ebrahimi 	{"tpidr_el2", A64SysReg_TPIDR_EL2},
291*9a0e4156SSadaf Ebrahimi 	{"tpidr_el3", A64SysReg_TPIDR_EL3},
292*9a0e4156SSadaf Ebrahimi 	{"tpidrro_el0", A64SysReg_TPIDRRO_EL0},
293*9a0e4156SSadaf Ebrahimi 	{"tpidr_el1", A64SysReg_TPIDR_EL1},
294*9a0e4156SSadaf Ebrahimi 	{"cntfrq_el0", A64SysReg_CNTFRQ_EL0},
295*9a0e4156SSadaf Ebrahimi 	{"cntvoff_el2", A64SysReg_CNTVOFF_EL2},
296*9a0e4156SSadaf Ebrahimi 	{"cntkctl_el1", A64SysReg_CNTKCTL_EL1},
297*9a0e4156SSadaf Ebrahimi 	{"cntkctl_el12", A64SysReg_CNTKCTL_EL12},
298*9a0e4156SSadaf Ebrahimi 	{"cnthctl_el2", A64SysReg_CNTHCTL_EL2},
299*9a0e4156SSadaf Ebrahimi 	{"cntp_tval_el0", A64SysReg_CNTP_TVAL_EL0},
300*9a0e4156SSadaf Ebrahimi 	{"cntp_tval_el02", A64SysReg_CNTP_TVAL_EL02},
301*9a0e4156SSadaf Ebrahimi 	{"cnthp_tval_el2", A64SysReg_CNTHP_TVAL_EL2},
302*9a0e4156SSadaf Ebrahimi 	{"cntps_tval_el1", A64SysReg_CNTPS_TVAL_EL1},
303*9a0e4156SSadaf Ebrahimi 	{"cntp_ctl_el0", A64SysReg_CNTP_CTL_EL0},
304*9a0e4156SSadaf Ebrahimi 	{"cnthp_ctl_el2", A64SysReg_CNTHP_CTL_EL2},
305*9a0e4156SSadaf Ebrahimi 	{"cnthv_ctl_el2", A64SysReg_CNTHVCTL_EL2},
306*9a0e4156SSadaf Ebrahimi 	{"cnthv_cval_el2", A64SysReg_CNTHV_CVAL_EL2},
307*9a0e4156SSadaf Ebrahimi 	{"cnthv_tval_el2", A64SysReg_CNTHV_TVAL_EL2},
308*9a0e4156SSadaf Ebrahimi 	{"cntps_ctl_el1", A64SysReg_CNTPS_CTL_EL1},
309*9a0e4156SSadaf Ebrahimi 	{"cntp_cval_el0", A64SysReg_CNTP_CVAL_EL0},
310*9a0e4156SSadaf Ebrahimi 	{"cntp_cval_el02", A64SysReg_CNTP_CVAL_EL02},
311*9a0e4156SSadaf Ebrahimi 	{"cnthp_cval_el2", A64SysReg_CNTHP_CVAL_EL2},
312*9a0e4156SSadaf Ebrahimi 	{"cntps_cval_el1", A64SysReg_CNTPS_CVAL_EL1},
313*9a0e4156SSadaf Ebrahimi 	{"cntv_tval_el0", A64SysReg_CNTV_TVAL_EL0},
314*9a0e4156SSadaf Ebrahimi 	{"cntv_tval_el02", A64SysReg_CNTV_TVAL_EL02},
315*9a0e4156SSadaf Ebrahimi 	{"cntv_ctl_el0", A64SysReg_CNTV_CTL_EL0},
316*9a0e4156SSadaf Ebrahimi 	{"cntv_ctl_el02", A64SysReg_CNTV_CTL_EL02},
317*9a0e4156SSadaf Ebrahimi 	{"cntv_cval_el0", A64SysReg_CNTV_CVAL_EL0},
318*9a0e4156SSadaf Ebrahimi 	{"cntv_cval_el02", A64SysReg_CNTV_CVAL_EL02},
319*9a0e4156SSadaf Ebrahimi 	{"pmevcntr0_el0", A64SysReg_PMEVCNTR0_EL0},
320*9a0e4156SSadaf Ebrahimi 	{"pmevcntr1_el0", A64SysReg_PMEVCNTR1_EL0},
321*9a0e4156SSadaf Ebrahimi 	{"pmevcntr2_el0", A64SysReg_PMEVCNTR2_EL0},
322*9a0e4156SSadaf Ebrahimi 	{"pmevcntr3_el0", A64SysReg_PMEVCNTR3_EL0},
323*9a0e4156SSadaf Ebrahimi 	{"pmevcntr4_el0", A64SysReg_PMEVCNTR4_EL0},
324*9a0e4156SSadaf Ebrahimi 	{"pmevcntr5_el0", A64SysReg_PMEVCNTR5_EL0},
325*9a0e4156SSadaf Ebrahimi 	{"pmevcntr6_el0", A64SysReg_PMEVCNTR6_EL0},
326*9a0e4156SSadaf Ebrahimi 	{"pmevcntr7_el0", A64SysReg_PMEVCNTR7_EL0},
327*9a0e4156SSadaf Ebrahimi 	{"pmevcntr8_el0", A64SysReg_PMEVCNTR8_EL0},
328*9a0e4156SSadaf Ebrahimi 	{"pmevcntr9_el0", A64SysReg_PMEVCNTR9_EL0},
329*9a0e4156SSadaf Ebrahimi 	{"pmevcntr10_el0", A64SysReg_PMEVCNTR10_EL0},
330*9a0e4156SSadaf Ebrahimi 	{"pmevcntr11_el0", A64SysReg_PMEVCNTR11_EL0},
331*9a0e4156SSadaf Ebrahimi 	{"pmevcntr12_el0", A64SysReg_PMEVCNTR12_EL0},
332*9a0e4156SSadaf Ebrahimi 	{"pmevcntr13_el0", A64SysReg_PMEVCNTR13_EL0},
333*9a0e4156SSadaf Ebrahimi 	{"pmevcntr14_el0", A64SysReg_PMEVCNTR14_EL0},
334*9a0e4156SSadaf Ebrahimi 	{"pmevcntr15_el0", A64SysReg_PMEVCNTR15_EL0},
335*9a0e4156SSadaf Ebrahimi 	{"pmevcntr16_el0", A64SysReg_PMEVCNTR16_EL0},
336*9a0e4156SSadaf Ebrahimi 	{"pmevcntr17_el0", A64SysReg_PMEVCNTR17_EL0},
337*9a0e4156SSadaf Ebrahimi 	{"pmevcntr18_el0", A64SysReg_PMEVCNTR18_EL0},
338*9a0e4156SSadaf Ebrahimi 	{"pmevcntr19_el0", A64SysReg_PMEVCNTR19_EL0},
339*9a0e4156SSadaf Ebrahimi 	{"pmevcntr20_el0", A64SysReg_PMEVCNTR20_EL0},
340*9a0e4156SSadaf Ebrahimi 	{"pmevcntr21_el0", A64SysReg_PMEVCNTR21_EL0},
341*9a0e4156SSadaf Ebrahimi 	{"pmevcntr22_el0", A64SysReg_PMEVCNTR22_EL0},
342*9a0e4156SSadaf Ebrahimi 	{"pmevcntr23_el0", A64SysReg_PMEVCNTR23_EL0},
343*9a0e4156SSadaf Ebrahimi 	{"pmevcntr24_el0", A64SysReg_PMEVCNTR24_EL0},
344*9a0e4156SSadaf Ebrahimi 	{"pmevcntr25_el0", A64SysReg_PMEVCNTR25_EL0},
345*9a0e4156SSadaf Ebrahimi 	{"pmevcntr26_el0", A64SysReg_PMEVCNTR26_EL0},
346*9a0e4156SSadaf Ebrahimi 	{"pmevcntr27_el0", A64SysReg_PMEVCNTR27_EL0},
347*9a0e4156SSadaf Ebrahimi 	{"pmevcntr28_el0", A64SysReg_PMEVCNTR28_EL0},
348*9a0e4156SSadaf Ebrahimi 	{"pmevcntr29_el0", A64SysReg_PMEVCNTR29_EL0},
349*9a0e4156SSadaf Ebrahimi 	{"pmevcntr30_el0", A64SysReg_PMEVCNTR30_EL0},
350*9a0e4156SSadaf Ebrahimi 	{"pmccfiltr_el0", A64SysReg_PMCCFILTR_EL0},
351*9a0e4156SSadaf Ebrahimi 	{"pmevtyper0_el0", A64SysReg_PMEVTYPER0_EL0},
352*9a0e4156SSadaf Ebrahimi 	{"pmevtyper1_el0", A64SysReg_PMEVTYPER1_EL0},
353*9a0e4156SSadaf Ebrahimi 	{"pmevtyper2_el0", A64SysReg_PMEVTYPER2_EL0},
354*9a0e4156SSadaf Ebrahimi 	{"pmevtyper3_el0", A64SysReg_PMEVTYPER3_EL0},
355*9a0e4156SSadaf Ebrahimi 	{"pmevtyper4_el0", A64SysReg_PMEVTYPER4_EL0},
356*9a0e4156SSadaf Ebrahimi 	{"pmevtyper5_el0", A64SysReg_PMEVTYPER5_EL0},
357*9a0e4156SSadaf Ebrahimi 	{"pmevtyper6_el0", A64SysReg_PMEVTYPER6_EL0},
358*9a0e4156SSadaf Ebrahimi 	{"pmevtyper7_el0", A64SysReg_PMEVTYPER7_EL0},
359*9a0e4156SSadaf Ebrahimi 	{"pmevtyper8_el0", A64SysReg_PMEVTYPER8_EL0},
360*9a0e4156SSadaf Ebrahimi 	{"pmevtyper9_el0", A64SysReg_PMEVTYPER9_EL0},
361*9a0e4156SSadaf Ebrahimi 	{"pmevtyper10_el0", A64SysReg_PMEVTYPER10_EL0},
362*9a0e4156SSadaf Ebrahimi 	{"pmevtyper11_el0", A64SysReg_PMEVTYPER11_EL0},
363*9a0e4156SSadaf Ebrahimi 	{"pmevtyper12_el0", A64SysReg_PMEVTYPER12_EL0},
364*9a0e4156SSadaf Ebrahimi 	{"pmevtyper13_el0", A64SysReg_PMEVTYPER13_EL0},
365*9a0e4156SSadaf Ebrahimi 	{"pmevtyper14_el0", A64SysReg_PMEVTYPER14_EL0},
366*9a0e4156SSadaf Ebrahimi 	{"pmevtyper15_el0", A64SysReg_PMEVTYPER15_EL0},
367*9a0e4156SSadaf Ebrahimi 	{"pmevtyper16_el0", A64SysReg_PMEVTYPER16_EL0},
368*9a0e4156SSadaf Ebrahimi 	{"pmevtyper17_el0", A64SysReg_PMEVTYPER17_EL0},
369*9a0e4156SSadaf Ebrahimi 	{"pmevtyper18_el0", A64SysReg_PMEVTYPER18_EL0},
370*9a0e4156SSadaf Ebrahimi 	{"pmevtyper19_el0", A64SysReg_PMEVTYPER19_EL0},
371*9a0e4156SSadaf Ebrahimi 	{"pmevtyper20_el0", A64SysReg_PMEVTYPER20_EL0},
372*9a0e4156SSadaf Ebrahimi 	{"pmevtyper21_el0", A64SysReg_PMEVTYPER21_EL0},
373*9a0e4156SSadaf Ebrahimi 	{"pmevtyper22_el0", A64SysReg_PMEVTYPER22_EL0},
374*9a0e4156SSadaf Ebrahimi 	{"pmevtyper23_el0", A64SysReg_PMEVTYPER23_EL0},
375*9a0e4156SSadaf Ebrahimi 	{"pmevtyper24_el0", A64SysReg_PMEVTYPER24_EL0},
376*9a0e4156SSadaf Ebrahimi 	{"pmevtyper25_el0", A64SysReg_PMEVTYPER25_EL0},
377*9a0e4156SSadaf Ebrahimi 	{"pmevtyper26_el0", A64SysReg_PMEVTYPER26_EL0},
378*9a0e4156SSadaf Ebrahimi 	{"pmevtyper27_el0", A64SysReg_PMEVTYPER27_EL0},
379*9a0e4156SSadaf Ebrahimi 	{"pmevtyper28_el0", A64SysReg_PMEVTYPER28_EL0},
380*9a0e4156SSadaf Ebrahimi 	{"pmevtyper29_el0", A64SysReg_PMEVTYPER29_EL0},
381*9a0e4156SSadaf Ebrahimi 	{"pmevtyper30_el0", A64SysReg_PMEVTYPER30_EL0},
382*9a0e4156SSadaf Ebrahimi 	{"lorc_el1", A64SysReg_LORC_EL1},
383*9a0e4156SSadaf Ebrahimi 	{"lorea_el1", A64SysReg_LOREA_EL1},
384*9a0e4156SSadaf Ebrahimi 	{"lorn_el1", A64SysReg_LORN_EL1},
385*9a0e4156SSadaf Ebrahimi 	{"lorsa_el1", A64SysReg_LORSA_EL1},
386*9a0e4156SSadaf Ebrahimi 
387*9a0e4156SSadaf Ebrahimi 	// Trace registers
388*9a0e4156SSadaf Ebrahimi 	{"trcprgctlr", A64SysReg_TRCPRGCTLR},
389*9a0e4156SSadaf Ebrahimi 	{"trcprocselr", A64SysReg_TRCPROCSELR},
390*9a0e4156SSadaf Ebrahimi 	{"trcconfigr", A64SysReg_TRCCONFIGR},
391*9a0e4156SSadaf Ebrahimi 	{"trcauxctlr", A64SysReg_TRCAUXCTLR},
392*9a0e4156SSadaf Ebrahimi 	{"trceventctl0r", A64SysReg_TRCEVENTCTL0R},
393*9a0e4156SSadaf Ebrahimi 	{"trceventctl1r", A64SysReg_TRCEVENTCTL1R},
394*9a0e4156SSadaf Ebrahimi 	{"trcstallctlr", A64SysReg_TRCSTALLCTLR},
395*9a0e4156SSadaf Ebrahimi 	{"trctsctlr", A64SysReg_TRCTSCTLR},
396*9a0e4156SSadaf Ebrahimi 	{"trcsyncpr", A64SysReg_TRCSYNCPR},
397*9a0e4156SSadaf Ebrahimi 	{"trcccctlr", A64SysReg_TRCCCCTLR},
398*9a0e4156SSadaf Ebrahimi 	{"trcbbctlr", A64SysReg_TRCBBCTLR},
399*9a0e4156SSadaf Ebrahimi 	{"trctraceidr", A64SysReg_TRCTRACEIDR},
400*9a0e4156SSadaf Ebrahimi 	{"trcqctlr", A64SysReg_TRCQCTLR},
401*9a0e4156SSadaf Ebrahimi 	{"trcvictlr", A64SysReg_TRCVICTLR},
402*9a0e4156SSadaf Ebrahimi 	{"trcviiectlr", A64SysReg_TRCVIIECTLR},
403*9a0e4156SSadaf Ebrahimi 	{"trcvissctlr", A64SysReg_TRCVISSCTLR},
404*9a0e4156SSadaf Ebrahimi 	{"trcvipcssctlr", A64SysReg_TRCVIPCSSCTLR},
405*9a0e4156SSadaf Ebrahimi 	{"trcvdctlr", A64SysReg_TRCVDCTLR},
406*9a0e4156SSadaf Ebrahimi 	{"trcvdsacctlr", A64SysReg_TRCVDSACCTLR},
407*9a0e4156SSadaf Ebrahimi 	{"trcvdarcctlr", A64SysReg_TRCVDARCCTLR},
408*9a0e4156SSadaf Ebrahimi 	{"trcseqevr0", A64SysReg_TRCSEQEVR0},
409*9a0e4156SSadaf Ebrahimi 	{"trcseqevr1", A64SysReg_TRCSEQEVR1},
410*9a0e4156SSadaf Ebrahimi 	{"trcseqevr2", A64SysReg_TRCSEQEVR2},
411*9a0e4156SSadaf Ebrahimi 	{"trcseqrstevr", A64SysReg_TRCSEQRSTEVR},
412*9a0e4156SSadaf Ebrahimi 	{"trcseqstr", A64SysReg_TRCSEQSTR},
413*9a0e4156SSadaf Ebrahimi 	{"trcextinselr", A64SysReg_TRCEXTINSELR},
414*9a0e4156SSadaf Ebrahimi 	{"trccntrldvr0", A64SysReg_TRCCNTRLDVR0},
415*9a0e4156SSadaf Ebrahimi 	{"trccntrldvr1", A64SysReg_TRCCNTRLDVR1},
416*9a0e4156SSadaf Ebrahimi 	{"trccntrldvr2", A64SysReg_TRCCNTRLDVR2},
417*9a0e4156SSadaf Ebrahimi 	{"trccntrldvr3", A64SysReg_TRCCNTRLDVR3},
418*9a0e4156SSadaf Ebrahimi 	{"trccntctlr0", A64SysReg_TRCCNTCTLR0},
419*9a0e4156SSadaf Ebrahimi 	{"trccntctlr1", A64SysReg_TRCCNTCTLR1},
420*9a0e4156SSadaf Ebrahimi 	{"trccntctlr2", A64SysReg_TRCCNTCTLR2},
421*9a0e4156SSadaf Ebrahimi 	{"trccntctlr3", A64SysReg_TRCCNTCTLR3},
422*9a0e4156SSadaf Ebrahimi 	{"trccntvr0", A64SysReg_TRCCNTVR0},
423*9a0e4156SSadaf Ebrahimi 	{"trccntvr1", A64SysReg_TRCCNTVR1},
424*9a0e4156SSadaf Ebrahimi 	{"trccntvr2", A64SysReg_TRCCNTVR2},
425*9a0e4156SSadaf Ebrahimi 	{"trccntvr3", A64SysReg_TRCCNTVR3},
426*9a0e4156SSadaf Ebrahimi 	{"trcimspec0", A64SysReg_TRCIMSPEC0},
427*9a0e4156SSadaf Ebrahimi 	{"trcimspec1", A64SysReg_TRCIMSPEC1},
428*9a0e4156SSadaf Ebrahimi 	{"trcimspec2", A64SysReg_TRCIMSPEC2},
429*9a0e4156SSadaf Ebrahimi 	{"trcimspec3", A64SysReg_TRCIMSPEC3},
430*9a0e4156SSadaf Ebrahimi 	{"trcimspec4", A64SysReg_TRCIMSPEC4},
431*9a0e4156SSadaf Ebrahimi 	{"trcimspec5", A64SysReg_TRCIMSPEC5},
432*9a0e4156SSadaf Ebrahimi 	{"trcimspec6", A64SysReg_TRCIMSPEC6},
433*9a0e4156SSadaf Ebrahimi 	{"trcimspec7", A64SysReg_TRCIMSPEC7},
434*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr2", A64SysReg_TRCRSCTLR2},
435*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr3", A64SysReg_TRCRSCTLR3},
436*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr4", A64SysReg_TRCRSCTLR4},
437*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr5", A64SysReg_TRCRSCTLR5},
438*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr6", A64SysReg_TRCRSCTLR6},
439*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr7", A64SysReg_TRCRSCTLR7},
440*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr8", A64SysReg_TRCRSCTLR8},
441*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr9", A64SysReg_TRCRSCTLR9},
442*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr10", A64SysReg_TRCRSCTLR10},
443*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr11", A64SysReg_TRCRSCTLR11},
444*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr12", A64SysReg_TRCRSCTLR12},
445*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr13", A64SysReg_TRCRSCTLR13},
446*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr14", A64SysReg_TRCRSCTLR14},
447*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr15", A64SysReg_TRCRSCTLR15},
448*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr16", A64SysReg_TRCRSCTLR16},
449*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr17", A64SysReg_TRCRSCTLR17},
450*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr18", A64SysReg_TRCRSCTLR18},
451*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr19", A64SysReg_TRCRSCTLR19},
452*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr20", A64SysReg_TRCRSCTLR20},
453*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr21", A64SysReg_TRCRSCTLR21},
454*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr22", A64SysReg_TRCRSCTLR22},
455*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr23", A64SysReg_TRCRSCTLR23},
456*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr24", A64SysReg_TRCRSCTLR24},
457*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr25", A64SysReg_TRCRSCTLR25},
458*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr26", A64SysReg_TRCRSCTLR26},
459*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr27", A64SysReg_TRCRSCTLR27},
460*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr28", A64SysReg_TRCRSCTLR28},
461*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr29", A64SysReg_TRCRSCTLR29},
462*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr30", A64SysReg_TRCRSCTLR30},
463*9a0e4156SSadaf Ebrahimi 	{"trcrsctlr31", A64SysReg_TRCRSCTLR31},
464*9a0e4156SSadaf Ebrahimi 	{"trcssccr0", A64SysReg_TRCSSCCR0},
465*9a0e4156SSadaf Ebrahimi 	{"trcssccr1", A64SysReg_TRCSSCCR1},
466*9a0e4156SSadaf Ebrahimi 	{"trcssccr2", A64SysReg_TRCSSCCR2},
467*9a0e4156SSadaf Ebrahimi 	{"trcssccr3", A64SysReg_TRCSSCCR3},
468*9a0e4156SSadaf Ebrahimi 	{"trcssccr4", A64SysReg_TRCSSCCR4},
469*9a0e4156SSadaf Ebrahimi 	{"trcssccr5", A64SysReg_TRCSSCCR5},
470*9a0e4156SSadaf Ebrahimi 	{"trcssccr6", A64SysReg_TRCSSCCR6},
471*9a0e4156SSadaf Ebrahimi 	{"trcssccr7", A64SysReg_TRCSSCCR7},
472*9a0e4156SSadaf Ebrahimi 	{"trcsscsr0", A64SysReg_TRCSSCSR0},
473*9a0e4156SSadaf Ebrahimi 	{"trcsscsr1", A64SysReg_TRCSSCSR1},
474*9a0e4156SSadaf Ebrahimi 	{"trcsscsr2", A64SysReg_TRCSSCSR2},
475*9a0e4156SSadaf Ebrahimi 	{"trcsscsr3", A64SysReg_TRCSSCSR3},
476*9a0e4156SSadaf Ebrahimi 	{"trcsscsr4", A64SysReg_TRCSSCSR4},
477*9a0e4156SSadaf Ebrahimi 	{"trcsscsr5", A64SysReg_TRCSSCSR5},
478*9a0e4156SSadaf Ebrahimi 	{"trcsscsr6", A64SysReg_TRCSSCSR6},
479*9a0e4156SSadaf Ebrahimi 	{"trcsscsr7", A64SysReg_TRCSSCSR7},
480*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr0", A64SysReg_TRCSSPCICR0},
481*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr1", A64SysReg_TRCSSPCICR1},
482*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr2", A64SysReg_TRCSSPCICR2},
483*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr3", A64SysReg_TRCSSPCICR3},
484*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr4", A64SysReg_TRCSSPCICR4},
485*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr5", A64SysReg_TRCSSPCICR5},
486*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr6", A64SysReg_TRCSSPCICR6},
487*9a0e4156SSadaf Ebrahimi 	{"trcsspcicr7", A64SysReg_TRCSSPCICR7},
488*9a0e4156SSadaf Ebrahimi 	{"trcpdcr", A64SysReg_TRCPDCR},
489*9a0e4156SSadaf Ebrahimi 	{"trcacvr0", A64SysReg_TRCACVR0},
490*9a0e4156SSadaf Ebrahimi 	{"trcacvr1", A64SysReg_TRCACVR1},
491*9a0e4156SSadaf Ebrahimi 	{"trcacvr2", A64SysReg_TRCACVR2},
492*9a0e4156SSadaf Ebrahimi 	{"trcacvr3", A64SysReg_TRCACVR3},
493*9a0e4156SSadaf Ebrahimi 	{"trcacvr4", A64SysReg_TRCACVR4},
494*9a0e4156SSadaf Ebrahimi 	{"trcacvr5", A64SysReg_TRCACVR5},
495*9a0e4156SSadaf Ebrahimi 	{"trcacvr6", A64SysReg_TRCACVR6},
496*9a0e4156SSadaf Ebrahimi 	{"trcacvr7", A64SysReg_TRCACVR7},
497*9a0e4156SSadaf Ebrahimi 	{"trcacvr8", A64SysReg_TRCACVR8},
498*9a0e4156SSadaf Ebrahimi 	{"trcacvr9", A64SysReg_TRCACVR9},
499*9a0e4156SSadaf Ebrahimi 	{"trcacvr10", A64SysReg_TRCACVR10},
500*9a0e4156SSadaf Ebrahimi 	{"trcacvr11", A64SysReg_TRCACVR11},
501*9a0e4156SSadaf Ebrahimi 	{"trcacvr12", A64SysReg_TRCACVR12},
502*9a0e4156SSadaf Ebrahimi 	{"trcacvr13", A64SysReg_TRCACVR13},
503*9a0e4156SSadaf Ebrahimi 	{"trcacvr14", A64SysReg_TRCACVR14},
504*9a0e4156SSadaf Ebrahimi 	{"trcacvr15", A64SysReg_TRCACVR15},
505*9a0e4156SSadaf Ebrahimi 	{"trcacatr0", A64SysReg_TRCACATR0},
506*9a0e4156SSadaf Ebrahimi 	{"trcacatr1", A64SysReg_TRCACATR1},
507*9a0e4156SSadaf Ebrahimi 	{"trcacatr2", A64SysReg_TRCACATR2},
508*9a0e4156SSadaf Ebrahimi 	{"trcacatr3", A64SysReg_TRCACATR3},
509*9a0e4156SSadaf Ebrahimi 	{"trcacatr4", A64SysReg_TRCACATR4},
510*9a0e4156SSadaf Ebrahimi 	{"trcacatr5", A64SysReg_TRCACATR5},
511*9a0e4156SSadaf Ebrahimi 	{"trcacatr6", A64SysReg_TRCACATR6},
512*9a0e4156SSadaf Ebrahimi 	{"trcacatr7", A64SysReg_TRCACATR7},
513*9a0e4156SSadaf Ebrahimi 	{"trcacatr8", A64SysReg_TRCACATR8},
514*9a0e4156SSadaf Ebrahimi 	{"trcacatr9", A64SysReg_TRCACATR9},
515*9a0e4156SSadaf Ebrahimi 	{"trcacatr10", A64SysReg_TRCACATR10},
516*9a0e4156SSadaf Ebrahimi 	{"trcacatr11", A64SysReg_TRCACATR11},
517*9a0e4156SSadaf Ebrahimi 	{"trcacatr12", A64SysReg_TRCACATR12},
518*9a0e4156SSadaf Ebrahimi 	{"trcacatr13", A64SysReg_TRCACATR13},
519*9a0e4156SSadaf Ebrahimi 	{"trcacatr14", A64SysReg_TRCACATR14},
520*9a0e4156SSadaf Ebrahimi 	{"trcacatr15", A64SysReg_TRCACATR15},
521*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr0", A64SysReg_TRCDVCVR0},
522*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr1", A64SysReg_TRCDVCVR1},
523*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr2", A64SysReg_TRCDVCVR2},
524*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr3", A64SysReg_TRCDVCVR3},
525*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr4", A64SysReg_TRCDVCVR4},
526*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr5", A64SysReg_TRCDVCVR5},
527*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr6", A64SysReg_TRCDVCVR6},
528*9a0e4156SSadaf Ebrahimi 	{"trcdvcvr7", A64SysReg_TRCDVCVR7},
529*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr0", A64SysReg_TRCDVCMR0},
530*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr1", A64SysReg_TRCDVCMR1},
531*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr2", A64SysReg_TRCDVCMR2},
532*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr3", A64SysReg_TRCDVCMR3},
533*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr4", A64SysReg_TRCDVCMR4},
534*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr5", A64SysReg_TRCDVCMR5},
535*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr6", A64SysReg_TRCDVCMR6},
536*9a0e4156SSadaf Ebrahimi 	{"trcdvcmr7", A64SysReg_TRCDVCMR7},
537*9a0e4156SSadaf Ebrahimi 	{"trccidcvr0", A64SysReg_TRCCIDCVR0},
538*9a0e4156SSadaf Ebrahimi 	{"trccidcvr1", A64SysReg_TRCCIDCVR1},
539*9a0e4156SSadaf Ebrahimi 	{"trccidcvr2", A64SysReg_TRCCIDCVR2},
540*9a0e4156SSadaf Ebrahimi 	{"trccidcvr3", A64SysReg_TRCCIDCVR3},
541*9a0e4156SSadaf Ebrahimi 	{"trccidcvr4", A64SysReg_TRCCIDCVR4},
542*9a0e4156SSadaf Ebrahimi 	{"trccidcvr5", A64SysReg_TRCCIDCVR5},
543*9a0e4156SSadaf Ebrahimi 	{"trccidcvr6", A64SysReg_TRCCIDCVR6},
544*9a0e4156SSadaf Ebrahimi 	{"trccidcvr7", A64SysReg_TRCCIDCVR7},
545*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr0", A64SysReg_TRCVMIDCVR0},
546*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr1", A64SysReg_TRCVMIDCVR1},
547*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr2", A64SysReg_TRCVMIDCVR2},
548*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr3", A64SysReg_TRCVMIDCVR3},
549*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr4", A64SysReg_TRCVMIDCVR4},
550*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr5", A64SysReg_TRCVMIDCVR5},
551*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr6", A64SysReg_TRCVMIDCVR6},
552*9a0e4156SSadaf Ebrahimi 	{"trcvmidcvr7", A64SysReg_TRCVMIDCVR7},
553*9a0e4156SSadaf Ebrahimi 	{"trccidcctlr0", A64SysReg_TRCCIDCCTLR0},
554*9a0e4156SSadaf Ebrahimi 	{"trccidcctlr1", A64SysReg_TRCCIDCCTLR1},
555*9a0e4156SSadaf Ebrahimi 	{"trcvmidcctlr0", A64SysReg_TRCVMIDCCTLR0},
556*9a0e4156SSadaf Ebrahimi 	{"trcvmidcctlr1", A64SysReg_TRCVMIDCCTLR1},
557*9a0e4156SSadaf Ebrahimi 	{"trcitctrl", A64SysReg_TRCITCTRL},
558*9a0e4156SSadaf Ebrahimi 	{"trcclaimset", A64SysReg_TRCCLAIMSET},
559*9a0e4156SSadaf Ebrahimi 	{"trcclaimclr", A64SysReg_TRCCLAIMCLR},
560*9a0e4156SSadaf Ebrahimi 
561*9a0e4156SSadaf Ebrahimi 	// GICv3 registers
562*9a0e4156SSadaf Ebrahimi 	{"icc_bpr1_el1", A64SysReg_ICC_BPR1_EL1},
563*9a0e4156SSadaf Ebrahimi 	{"icc_bpr0_el1", A64SysReg_ICC_BPR0_EL1},
564*9a0e4156SSadaf Ebrahimi 	{"icc_pmr_el1", A64SysReg_ICC_PMR_EL1},
565*9a0e4156SSadaf Ebrahimi 	{"icc_ctlr_el1", A64SysReg_ICC_CTLR_EL1},
566*9a0e4156SSadaf Ebrahimi 	{"icc_ctlr_el3", A64SysReg_ICC_CTLR_EL3},
567*9a0e4156SSadaf Ebrahimi 	{"icc_sre_el1", A64SysReg_ICC_SRE_EL1},
568*9a0e4156SSadaf Ebrahimi 	{"icc_sre_el2", A64SysReg_ICC_SRE_EL2},
569*9a0e4156SSadaf Ebrahimi 	{"icc_sre_el3", A64SysReg_ICC_SRE_EL3},
570*9a0e4156SSadaf Ebrahimi 	{"icc_igrpen0_el1", A64SysReg_ICC_IGRPEN0_EL1},
571*9a0e4156SSadaf Ebrahimi 	{"icc_igrpen1_el1", A64SysReg_ICC_IGRPEN1_EL1},
572*9a0e4156SSadaf Ebrahimi 	{"icc_igrpen1_el3", A64SysReg_ICC_IGRPEN1_EL3},
573*9a0e4156SSadaf Ebrahimi 	{"icc_seien_el1", A64SysReg_ICC_SEIEN_EL1},
574*9a0e4156SSadaf Ebrahimi 	{"icc_ap0r0_el1", A64SysReg_ICC_AP0R0_EL1},
575*9a0e4156SSadaf Ebrahimi 	{"icc_ap0r1_el1", A64SysReg_ICC_AP0R1_EL1},
576*9a0e4156SSadaf Ebrahimi 	{"icc_ap0r2_el1", A64SysReg_ICC_AP0R2_EL1},
577*9a0e4156SSadaf Ebrahimi 	{"icc_ap0r3_el1", A64SysReg_ICC_AP0R3_EL1},
578*9a0e4156SSadaf Ebrahimi 	{"icc_ap1r0_el1", A64SysReg_ICC_AP1R0_EL1},
579*9a0e4156SSadaf Ebrahimi 	{"icc_ap1r1_el1", A64SysReg_ICC_AP1R1_EL1},
580*9a0e4156SSadaf Ebrahimi 	{"icc_ap1r2_el1", A64SysReg_ICC_AP1R2_EL1},
581*9a0e4156SSadaf Ebrahimi 	{"icc_ap1r3_el1", A64SysReg_ICC_AP1R3_EL1},
582*9a0e4156SSadaf Ebrahimi 	{"ich_ap0r0_el2", A64SysReg_ICH_AP0R0_EL2},
583*9a0e4156SSadaf Ebrahimi 	{"ich_ap0r1_el2", A64SysReg_ICH_AP0R1_EL2},
584*9a0e4156SSadaf Ebrahimi 	{"ich_ap0r2_el2", A64SysReg_ICH_AP0R2_EL2},
585*9a0e4156SSadaf Ebrahimi 	{"ich_ap0r3_el2", A64SysReg_ICH_AP0R3_EL2},
586*9a0e4156SSadaf Ebrahimi 	{"ich_ap1r0_el2", A64SysReg_ICH_AP1R0_EL2},
587*9a0e4156SSadaf Ebrahimi 	{"ich_ap1r1_el2", A64SysReg_ICH_AP1R1_EL2},
588*9a0e4156SSadaf Ebrahimi 	{"ich_ap1r2_el2", A64SysReg_ICH_AP1R2_EL2},
589*9a0e4156SSadaf Ebrahimi 	{"ich_ap1r3_el2", A64SysReg_ICH_AP1R3_EL2},
590*9a0e4156SSadaf Ebrahimi 	{"ich_hcr_el2", A64SysReg_ICH_HCR_EL2},
591*9a0e4156SSadaf Ebrahimi 	{"ich_misr_el2", A64SysReg_ICH_MISR_EL2},
592*9a0e4156SSadaf Ebrahimi 	{"ich_vmcr_el2", A64SysReg_ICH_VMCR_EL2},
593*9a0e4156SSadaf Ebrahimi 	{"ich_vseir_el2", A64SysReg_ICH_VSEIR_EL2},
594*9a0e4156SSadaf Ebrahimi 	{"ich_lr0_el2", A64SysReg_ICH_LR0_EL2},
595*9a0e4156SSadaf Ebrahimi 	{"ich_lr1_el2", A64SysReg_ICH_LR1_EL2},
596*9a0e4156SSadaf Ebrahimi 	{"ich_lr2_el2", A64SysReg_ICH_LR2_EL2},
597*9a0e4156SSadaf Ebrahimi 	{"ich_lr3_el2", A64SysReg_ICH_LR3_EL2},
598*9a0e4156SSadaf Ebrahimi 	{"ich_lr4_el2", A64SysReg_ICH_LR4_EL2},
599*9a0e4156SSadaf Ebrahimi 	{"ich_lr5_el2", A64SysReg_ICH_LR5_EL2},
600*9a0e4156SSadaf Ebrahimi 	{"ich_lr6_el2", A64SysReg_ICH_LR6_EL2},
601*9a0e4156SSadaf Ebrahimi 	{"ich_lr7_el2", A64SysReg_ICH_LR7_EL2},
602*9a0e4156SSadaf Ebrahimi 	{"ich_lr8_el2", A64SysReg_ICH_LR8_EL2},
603*9a0e4156SSadaf Ebrahimi 	{"ich_lr9_el2", A64SysReg_ICH_LR9_EL2},
604*9a0e4156SSadaf Ebrahimi 	{"ich_lr10_el2", A64SysReg_ICH_LR10_EL2},
605*9a0e4156SSadaf Ebrahimi 	{"ich_lr11_el2", A64SysReg_ICH_LR11_EL2},
606*9a0e4156SSadaf Ebrahimi 	{"ich_lr12_el2", A64SysReg_ICH_LR12_EL2},
607*9a0e4156SSadaf Ebrahimi 	{"ich_lr13_el2", A64SysReg_ICH_LR13_EL2},
608*9a0e4156SSadaf Ebrahimi 	{"ich_lr14_el2", A64SysReg_ICH_LR14_EL2},
609*9a0e4156SSadaf Ebrahimi 	{"ich_lr15_el2", A64SysReg_ICH_LR15_EL2},
610*9a0e4156SSadaf Ebrahimi 
611*9a0e4156SSadaf Ebrahimi 	// Statistical profiling registers
612*9a0e4156SSadaf Ebrahimi 	{"pmblimitr_el1", A64SysReg_PMBLIMITR_EL1},
613*9a0e4156SSadaf Ebrahimi 	{"pmbptr_el1", A64SysReg_PMBPTR_EL1},
614*9a0e4156SSadaf Ebrahimi 	{"pmbsr_el1", A64SysReg_PMBSR_EL1},
615*9a0e4156SSadaf Ebrahimi 	{"pmscr_el1", A64SysReg_PMSCR_EL1},
616*9a0e4156SSadaf Ebrahimi 	{"pmscr_el12", A64SysReg_PMSCR_EL12},
617*9a0e4156SSadaf Ebrahimi 	{"pmscr_el2", A64SysReg_PMSCR_EL2},
618*9a0e4156SSadaf Ebrahimi 	{"pmsicr_el1", A64SysReg_PMSICR_EL1},
619*9a0e4156SSadaf Ebrahimi 	{"pmsirr_el1", A64SysReg_PMSIRR_EL1},
620*9a0e4156SSadaf Ebrahimi 	{"pmsfcr_el1", A64SysReg_PMSFCR_EL1},
621*9a0e4156SSadaf Ebrahimi 	{"pmsevfr_el1", A64SysReg_PMSEVFR_EL1},
622*9a0e4156SSadaf Ebrahimi 	{"pmslatfr_el1", A64SysReg_PMSLATFR_EL1}
623*9a0e4156SSadaf Ebrahimi };
624*9a0e4156SSadaf Ebrahimi 
625*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping CycloneSysRegPairs[] = {
626*9a0e4156SSadaf Ebrahimi 	{"cpm_ioacc_ctl_el3", A64SysReg_CPM_IOACC_CTL_EL3}
627*9a0e4156SSadaf Ebrahimi };
628*9a0e4156SSadaf Ebrahimi 
629*9a0e4156SSadaf Ebrahimi // result must be a big enough buffer: 128 bytes is more than enough
A64SysRegMapper_toString(const A64SysRegMapper * S,uint32_t Bits,char * result)630*9a0e4156SSadaf Ebrahimi void A64SysRegMapper_toString(const A64SysRegMapper *S, uint32_t Bits, char *result)
631*9a0e4156SSadaf Ebrahimi {
632*9a0e4156SSadaf Ebrahimi 	int dummy;
633*9a0e4156SSadaf Ebrahimi 	uint32_t Op0, Op1, CRn, CRm, Op2;
634*9a0e4156SSadaf Ebrahimi 	char *Op0S, *Op1S, *CRnS, *CRmS, *Op2S;
635*9a0e4156SSadaf Ebrahimi 	unsigned i;
636*9a0e4156SSadaf Ebrahimi 
637*9a0e4156SSadaf Ebrahimi 	// First search the registers shared by all
638*9a0e4156SSadaf Ebrahimi 	for (i = 0; i < ARR_SIZE(SysRegPairs); ++i) {
639*9a0e4156SSadaf Ebrahimi 		if (SysRegPairs[i].Value == Bits) {
640*9a0e4156SSadaf Ebrahimi 			strcpy(result, SysRegPairs[i].Name);
641*9a0e4156SSadaf Ebrahimi 			return;
642*9a0e4156SSadaf Ebrahimi 		}
643*9a0e4156SSadaf Ebrahimi 	}
644*9a0e4156SSadaf Ebrahimi 
645*9a0e4156SSadaf Ebrahimi 	// Next search for target specific registers
646*9a0e4156SSadaf Ebrahimi 	// if (FeatureBits & AArch64_ProcCyclone) {
647*9a0e4156SSadaf Ebrahimi 	if (true) {
648*9a0e4156SSadaf Ebrahimi 		for (i = 0; i < ARR_SIZE(CycloneSysRegPairs); ++i) {
649*9a0e4156SSadaf Ebrahimi 			if (CycloneSysRegPairs[i].Value == Bits) {
650*9a0e4156SSadaf Ebrahimi 				strcpy(result, CycloneSysRegPairs[i].Name);
651*9a0e4156SSadaf Ebrahimi 				return;
652*9a0e4156SSadaf Ebrahimi 			}
653*9a0e4156SSadaf Ebrahimi 		}
654*9a0e4156SSadaf Ebrahimi 	}
655*9a0e4156SSadaf Ebrahimi 
656*9a0e4156SSadaf Ebrahimi 	// Now try the instruction-specific registers (either read-only or
657*9a0e4156SSadaf Ebrahimi 	// write-only).
658*9a0e4156SSadaf Ebrahimi 	for (i = 0; i < S->NumInstPairs; ++i) {
659*9a0e4156SSadaf Ebrahimi 		if (S->InstPairs[i].Value == Bits) {
660*9a0e4156SSadaf Ebrahimi 			strcpy(result, S->InstPairs[i].Name);
661*9a0e4156SSadaf Ebrahimi 			return;
662*9a0e4156SSadaf Ebrahimi 		}
663*9a0e4156SSadaf Ebrahimi 	}
664*9a0e4156SSadaf Ebrahimi 
665*9a0e4156SSadaf Ebrahimi 	Op0 = (Bits >> 14) & 0x3;
666*9a0e4156SSadaf Ebrahimi 	Op1 = (Bits >> 11) & 0x7;
667*9a0e4156SSadaf Ebrahimi 	CRn = (Bits >> 7) & 0xf;
668*9a0e4156SSadaf Ebrahimi 	CRm = (Bits >> 3) & 0xf;
669*9a0e4156SSadaf Ebrahimi 	Op2 = Bits & 0x7;
670*9a0e4156SSadaf Ebrahimi 
671*9a0e4156SSadaf Ebrahimi 	Op0S = utostr(Op0, false);
672*9a0e4156SSadaf Ebrahimi 	Op1S = utostr(Op1, false);
673*9a0e4156SSadaf Ebrahimi 	CRnS = utostr(CRn, false);
674*9a0e4156SSadaf Ebrahimi 	CRmS = utostr(CRm, false);
675*9a0e4156SSadaf Ebrahimi 	Op2S = utostr(Op2, false);
676*9a0e4156SSadaf Ebrahimi 
677*9a0e4156SSadaf Ebrahimi 	//printf("Op1S: %s, CRnS: %s, CRmS: %s, Op2S: %s\n", Op1S, CRnS, CRmS, Op2S);
678*9a0e4156SSadaf Ebrahimi 	dummy = cs_snprintf(result, 128, "s3_%s_c%s_c%s_%s", Op1S, CRnS, CRmS, Op2S);
679*9a0e4156SSadaf Ebrahimi 	(void)dummy;
680*9a0e4156SSadaf Ebrahimi 
681*9a0e4156SSadaf Ebrahimi 	cs_mem_free(Op0S);
682*9a0e4156SSadaf Ebrahimi 	cs_mem_free(Op1S);
683*9a0e4156SSadaf Ebrahimi 	cs_mem_free(CRnS);
684*9a0e4156SSadaf Ebrahimi 	cs_mem_free(CRmS);
685*9a0e4156SSadaf Ebrahimi 	cs_mem_free(Op2S);
686*9a0e4156SSadaf Ebrahimi }
687*9a0e4156SSadaf Ebrahimi 
688*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping TLBIPairs[] = {
689*9a0e4156SSadaf Ebrahimi 	{"ipas2e1is", A64TLBI_IPAS2E1IS},
690*9a0e4156SSadaf Ebrahimi 	{"ipas2le1is", A64TLBI_IPAS2LE1IS},
691*9a0e4156SSadaf Ebrahimi 	{"vmalle1is", A64TLBI_VMALLE1IS},
692*9a0e4156SSadaf Ebrahimi 	{"alle2is", A64TLBI_ALLE2IS},
693*9a0e4156SSadaf Ebrahimi 	{"alle3is", A64TLBI_ALLE3IS},
694*9a0e4156SSadaf Ebrahimi 	{"vae1is", A64TLBI_VAE1IS},
695*9a0e4156SSadaf Ebrahimi 	{"vae2is", A64TLBI_VAE2IS},
696*9a0e4156SSadaf Ebrahimi 	{"vae3is", A64TLBI_VAE3IS},
697*9a0e4156SSadaf Ebrahimi 	{"aside1is", A64TLBI_ASIDE1IS},
698*9a0e4156SSadaf Ebrahimi 	{"vaae1is", A64TLBI_VAAE1IS},
699*9a0e4156SSadaf Ebrahimi 	{"alle1is", A64TLBI_ALLE1IS},
700*9a0e4156SSadaf Ebrahimi 	{"vale1is", A64TLBI_VALE1IS},
701*9a0e4156SSadaf Ebrahimi 	{"vale2is", A64TLBI_VALE2IS},
702*9a0e4156SSadaf Ebrahimi 	{"vale3is", A64TLBI_VALE3IS},
703*9a0e4156SSadaf Ebrahimi 	{"vmalls12e1is", A64TLBI_VMALLS12E1IS},
704*9a0e4156SSadaf Ebrahimi 	{"vaale1is", A64TLBI_VAALE1IS},
705*9a0e4156SSadaf Ebrahimi 	{"ipas2e1", A64TLBI_IPAS2E1},
706*9a0e4156SSadaf Ebrahimi 	{"ipas2le1", A64TLBI_IPAS2LE1},
707*9a0e4156SSadaf Ebrahimi 	{"vmalle1", A64TLBI_VMALLE1},
708*9a0e4156SSadaf Ebrahimi 	{"alle2", A64TLBI_ALLE2},
709*9a0e4156SSadaf Ebrahimi 	{"alle3", A64TLBI_ALLE3},
710*9a0e4156SSadaf Ebrahimi 	{"vae1", A64TLBI_VAE1},
711*9a0e4156SSadaf Ebrahimi 	{"vae2", A64TLBI_VAE2},
712*9a0e4156SSadaf Ebrahimi 	{"vae3", A64TLBI_VAE3},
713*9a0e4156SSadaf Ebrahimi 	{"aside1", A64TLBI_ASIDE1},
714*9a0e4156SSadaf Ebrahimi 	{"vaae1", A64TLBI_VAAE1},
715*9a0e4156SSadaf Ebrahimi 	{"alle1", A64TLBI_ALLE1},
716*9a0e4156SSadaf Ebrahimi 	{"vale1", A64TLBI_VALE1},
717*9a0e4156SSadaf Ebrahimi 	{"vale2", A64TLBI_VALE2},
718*9a0e4156SSadaf Ebrahimi 	{"vale3", A64TLBI_VALE3},
719*9a0e4156SSadaf Ebrahimi 	{"vmalls12e1", A64TLBI_VMALLS12E1},
720*9a0e4156SSadaf Ebrahimi 	{"vaale1", A64TLBI_VAALE1}
721*9a0e4156SSadaf Ebrahimi };
722*9a0e4156SSadaf Ebrahimi 
723*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64TLBI_TLBIMapper = {
724*9a0e4156SSadaf Ebrahimi 	TLBIPairs,
725*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(TLBIPairs),
726*9a0e4156SSadaf Ebrahimi 	0,
727*9a0e4156SSadaf Ebrahimi };
728*9a0e4156SSadaf Ebrahimi 
729*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping ATPairs[] = {
730*9a0e4156SSadaf Ebrahimi 	{"s1e1r", A64AT_S1E1R},
731*9a0e4156SSadaf Ebrahimi 	{"s1e2r", A64AT_S1E2R},
732*9a0e4156SSadaf Ebrahimi 	{"s1e3r", A64AT_S1E3R},
733*9a0e4156SSadaf Ebrahimi 	{"s1e1w", A64AT_S1E1W},
734*9a0e4156SSadaf Ebrahimi 	{"s1e2w", A64AT_S1E2W},
735*9a0e4156SSadaf Ebrahimi 	{"s1e3w", A64AT_S1E3W},
736*9a0e4156SSadaf Ebrahimi 	{"s1e0r", A64AT_S1E0R},
737*9a0e4156SSadaf Ebrahimi 	{"s1e0w", A64AT_S1E0W},
738*9a0e4156SSadaf Ebrahimi 	{"s12e1r", A64AT_S12E1R},
739*9a0e4156SSadaf Ebrahimi 	{"s12e1w", A64AT_S12E1W},
740*9a0e4156SSadaf Ebrahimi 	{"s12e0r", A64AT_S12E0R},
741*9a0e4156SSadaf Ebrahimi 	{"s12e0w", A64AT_S12E0W}
742*9a0e4156SSadaf Ebrahimi };
743*9a0e4156SSadaf Ebrahimi 
744*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64AT_ATMapper = {
745*9a0e4156SSadaf Ebrahimi 	ATPairs,
746*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(ATPairs),
747*9a0e4156SSadaf Ebrahimi 	0,
748*9a0e4156SSadaf Ebrahimi };
749*9a0e4156SSadaf Ebrahimi 
750*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping DBarrierPairs[] = {
751*9a0e4156SSadaf Ebrahimi 	{"oshld", A64DB_OSHLD},
752*9a0e4156SSadaf Ebrahimi 	{"oshst", A64DB_OSHST},
753*9a0e4156SSadaf Ebrahimi 	{"osh", A64DB_OSH},
754*9a0e4156SSadaf Ebrahimi 	{"nshld", A64DB_NSHLD},
755*9a0e4156SSadaf Ebrahimi 	{"nshst", A64DB_NSHST},
756*9a0e4156SSadaf Ebrahimi 	{"nsh", A64DB_NSH},
757*9a0e4156SSadaf Ebrahimi 	{"ishld", A64DB_ISHLD},
758*9a0e4156SSadaf Ebrahimi 	{"ishst", A64DB_ISHST},
759*9a0e4156SSadaf Ebrahimi 	{"ish", A64DB_ISH},
760*9a0e4156SSadaf Ebrahimi 	{"ld", A64DB_LD},
761*9a0e4156SSadaf Ebrahimi 	{"st", A64DB_ST},
762*9a0e4156SSadaf Ebrahimi 	{"sy", A64DB_SY}
763*9a0e4156SSadaf Ebrahimi };
764*9a0e4156SSadaf Ebrahimi 
765*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64DB_DBarrierMapper = {
766*9a0e4156SSadaf Ebrahimi 	DBarrierPairs,
767*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(DBarrierPairs),
768*9a0e4156SSadaf Ebrahimi 	16,
769*9a0e4156SSadaf Ebrahimi };
770*9a0e4156SSadaf Ebrahimi 
771*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping DCPairs[] = {
772*9a0e4156SSadaf Ebrahimi 	{"zva", A64DC_ZVA},
773*9a0e4156SSadaf Ebrahimi 	{"ivac", A64DC_IVAC},
774*9a0e4156SSadaf Ebrahimi 	{"isw", A64DC_ISW},
775*9a0e4156SSadaf Ebrahimi 	{"cvac", A64DC_CVAC},
776*9a0e4156SSadaf Ebrahimi 	{"csw", A64DC_CSW},
777*9a0e4156SSadaf Ebrahimi 	{"cvau", A64DC_CVAU},
778*9a0e4156SSadaf Ebrahimi 	{"civac", A64DC_CIVAC},
779*9a0e4156SSadaf Ebrahimi 	{"cisw", A64DC_CISW}
780*9a0e4156SSadaf Ebrahimi };
781*9a0e4156SSadaf Ebrahimi 
782*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64DC_DCMapper = {
783*9a0e4156SSadaf Ebrahimi 	DCPairs,
784*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(DCPairs),
785*9a0e4156SSadaf Ebrahimi 	0,
786*9a0e4156SSadaf Ebrahimi };
787*9a0e4156SSadaf Ebrahimi 
788*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping ICPairs[] = {
789*9a0e4156SSadaf Ebrahimi 	{"ialluis",  A64IC_IALLUIS},
790*9a0e4156SSadaf Ebrahimi 	{"iallu", A64IC_IALLU},
791*9a0e4156SSadaf Ebrahimi 	{"ivau", A64IC_IVAU}
792*9a0e4156SSadaf Ebrahimi };
793*9a0e4156SSadaf Ebrahimi 
794*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64IC_ICMapper = {
795*9a0e4156SSadaf Ebrahimi 	ICPairs,
796*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(ICPairs),
797*9a0e4156SSadaf Ebrahimi 	0,
798*9a0e4156SSadaf Ebrahimi };
799*9a0e4156SSadaf Ebrahimi 
800*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping ISBPairs[] = {
801*9a0e4156SSadaf Ebrahimi 	{"sy",  A64DB_SY},
802*9a0e4156SSadaf Ebrahimi };
803*9a0e4156SSadaf Ebrahimi 
804*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64ISB_ISBMapper = {
805*9a0e4156SSadaf Ebrahimi 	ISBPairs,
806*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(ISBPairs),
807*9a0e4156SSadaf Ebrahimi 	16,
808*9a0e4156SSadaf Ebrahimi };
809*9a0e4156SSadaf Ebrahimi 
810*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping PRFMPairs[] = {
811*9a0e4156SSadaf Ebrahimi 	{"pldl1keep", A64PRFM_PLDL1KEEP},
812*9a0e4156SSadaf Ebrahimi 	{"pldl1strm", A64PRFM_PLDL1STRM},
813*9a0e4156SSadaf Ebrahimi 	{"pldl2keep", A64PRFM_PLDL2KEEP},
814*9a0e4156SSadaf Ebrahimi 	{"pldl2strm", A64PRFM_PLDL2STRM},
815*9a0e4156SSadaf Ebrahimi 	{"pldl3keep", A64PRFM_PLDL3KEEP},
816*9a0e4156SSadaf Ebrahimi 	{"pldl3strm", A64PRFM_PLDL3STRM},
817*9a0e4156SSadaf Ebrahimi 	{"plil1keep", A64PRFM_PLIL1KEEP},
818*9a0e4156SSadaf Ebrahimi 	{"plil1strm", A64PRFM_PLIL1STRM},
819*9a0e4156SSadaf Ebrahimi 	{"plil2keep", A64PRFM_PLIL2KEEP},
820*9a0e4156SSadaf Ebrahimi 	{"plil2strm", A64PRFM_PLIL2STRM},
821*9a0e4156SSadaf Ebrahimi 	{"plil3keep", A64PRFM_PLIL3KEEP},
822*9a0e4156SSadaf Ebrahimi 	{"plil3strm", A64PRFM_PLIL3STRM},
823*9a0e4156SSadaf Ebrahimi 	{"pstl1keep", A64PRFM_PSTL1KEEP},
824*9a0e4156SSadaf Ebrahimi 	{"pstl1strm", A64PRFM_PSTL1STRM},
825*9a0e4156SSadaf Ebrahimi 	{"pstl2keep", A64PRFM_PSTL2KEEP},
826*9a0e4156SSadaf Ebrahimi 	{"pstl2strm", A64PRFM_PSTL2STRM},
827*9a0e4156SSadaf Ebrahimi 	{"pstl3keep", A64PRFM_PSTL3KEEP},
828*9a0e4156SSadaf Ebrahimi 	{"pstl3strm", A64PRFM_PSTL3STRM}
829*9a0e4156SSadaf Ebrahimi };
830*9a0e4156SSadaf Ebrahimi 
831*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64PRFM_PRFMMapper = {
832*9a0e4156SSadaf Ebrahimi 	PRFMPairs,
833*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(PRFMPairs),
834*9a0e4156SSadaf Ebrahimi 	32,
835*9a0e4156SSadaf Ebrahimi };
836*9a0e4156SSadaf Ebrahimi 
837*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping PStatePairs[] = {
838*9a0e4156SSadaf Ebrahimi 	{"spsel", A64PState_SPSel},
839*9a0e4156SSadaf Ebrahimi 	{"daifset", A64PState_DAIFSet},
840*9a0e4156SSadaf Ebrahimi 	{"daifclr", A64PState_DAIFClr},
841*9a0e4156SSadaf Ebrahimi 	{"pan", A64PState_PAN},
842*9a0e4156SSadaf Ebrahimi 	{"uao", A64PState_UAO}
843*9a0e4156SSadaf Ebrahimi };
844*9a0e4156SSadaf Ebrahimi 
845*9a0e4156SSadaf Ebrahimi const A64NamedImmMapper A64PState_PStateMapper = {
846*9a0e4156SSadaf Ebrahimi 	PStatePairs,
847*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(PStatePairs),
848*9a0e4156SSadaf Ebrahimi 	0,
849*9a0e4156SSadaf Ebrahimi };
850*9a0e4156SSadaf Ebrahimi 
851*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping MRSPairs[] = {
852*9a0e4156SSadaf Ebrahimi 	{"mdccsr_el0", A64SysReg_MDCCSR_EL0},
853*9a0e4156SSadaf Ebrahimi 	{"dbgdtrrx_el0", A64SysReg_DBGDTRRX_EL0},
854*9a0e4156SSadaf Ebrahimi 	{"mdrar_el1", A64SysReg_MDRAR_EL1},
855*9a0e4156SSadaf Ebrahimi 	{"oslsr_el1", A64SysReg_OSLSR_EL1},
856*9a0e4156SSadaf Ebrahimi 	{"dbgauthstatus_el1", A64SysReg_DBGAUTHSTATUS_EL1},
857*9a0e4156SSadaf Ebrahimi 	{"pmceid0_el0", A64SysReg_PMCEID0_EL0},
858*9a0e4156SSadaf Ebrahimi 	{"pmceid1_el0", A64SysReg_PMCEID1_EL0},
859*9a0e4156SSadaf Ebrahimi 	{"midr_el1", A64SysReg_MIDR_EL1},
860*9a0e4156SSadaf Ebrahimi 	{"ccsidr_el1", A64SysReg_CCSIDR_EL1},
861*9a0e4156SSadaf Ebrahimi 	{"clidr_el1", A64SysReg_CLIDR_EL1},
862*9a0e4156SSadaf Ebrahimi 	{"ctr_el0", A64SysReg_CTR_EL0},
863*9a0e4156SSadaf Ebrahimi 	{"mpidr_el1", A64SysReg_MPIDR_EL1},
864*9a0e4156SSadaf Ebrahimi 	{"revidr_el1", A64SysReg_REVIDR_EL1},
865*9a0e4156SSadaf Ebrahimi 	{"aidr_el1", A64SysReg_AIDR_EL1},
866*9a0e4156SSadaf Ebrahimi 	{"dczid_el0", A64SysReg_DCZID_EL0},
867*9a0e4156SSadaf Ebrahimi 	{"id_pfr0_el1", A64SysReg_ID_PFR0_EL1},
868*9a0e4156SSadaf Ebrahimi 	{"id_pfr1_el1", A64SysReg_ID_PFR1_EL1},
869*9a0e4156SSadaf Ebrahimi 	{"id_dfr0_el1", A64SysReg_ID_DFR0_EL1},
870*9a0e4156SSadaf Ebrahimi 	{"id_afr0_el1", A64SysReg_ID_AFR0_EL1},
871*9a0e4156SSadaf Ebrahimi 	{"id_mmfr0_el1", A64SysReg_ID_MMFR0_EL1},
872*9a0e4156SSadaf Ebrahimi 	{"id_mmfr1_el1", A64SysReg_ID_MMFR1_EL1},
873*9a0e4156SSadaf Ebrahimi 	{"id_mmfr2_el1", A64SysReg_ID_MMFR2_EL1},
874*9a0e4156SSadaf Ebrahimi 	{"id_mmfr3_el1", A64SysReg_ID_MMFR3_EL1},
875*9a0e4156SSadaf Ebrahimi 	{"id_mmfr4_el1", A64SysReg_ID_MMFR4_EL1},
876*9a0e4156SSadaf Ebrahimi 	{"id_isar0_el1", A64SysReg_ID_ISAR0_EL1},
877*9a0e4156SSadaf Ebrahimi 	{"id_isar1_el1", A64SysReg_ID_ISAR1_EL1},
878*9a0e4156SSadaf Ebrahimi 	{"id_isar2_el1", A64SysReg_ID_ISAR2_EL1},
879*9a0e4156SSadaf Ebrahimi 	{"id_isar3_el1", A64SysReg_ID_ISAR3_EL1},
880*9a0e4156SSadaf Ebrahimi 	{"id_isar4_el1", A64SysReg_ID_ISAR4_EL1},
881*9a0e4156SSadaf Ebrahimi 	{"id_isar5_el1", A64SysReg_ID_ISAR5_EL1},
882*9a0e4156SSadaf Ebrahimi 	{"id_aa64pfr0_el1", A64SysReg_ID_A64PFR0_EL1},
883*9a0e4156SSadaf Ebrahimi 	{"id_aa64pfr1_el1", A64SysReg_ID_A64PFR1_EL1},
884*9a0e4156SSadaf Ebrahimi 	{"id_aa64dfr0_el1", A64SysReg_ID_A64DFR0_EL1},
885*9a0e4156SSadaf Ebrahimi 	{"id_aa64dfr1_el1", A64SysReg_ID_A64DFR1_EL1},
886*9a0e4156SSadaf Ebrahimi 	{"id_aa64afr0_el1", A64SysReg_ID_A64AFR0_EL1},
887*9a0e4156SSadaf Ebrahimi 	{"id_aa64afr1_el1", A64SysReg_ID_A64AFR1_EL1},
888*9a0e4156SSadaf Ebrahimi 	{"id_aa64isar0_el1", A64SysReg_ID_A64ISAR0_EL1},
889*9a0e4156SSadaf Ebrahimi 	{"id_aa64isar1_el1", A64SysReg_ID_A64ISAR1_EL1},
890*9a0e4156SSadaf Ebrahimi 	{"id_aa64mmfr0_el1", A64SysReg_ID_A64MMFR0_EL1},
891*9a0e4156SSadaf Ebrahimi 	{"id_aa64mmfr1_el1", A64SysReg_ID_A64MMFR1_EL1},
892*9a0e4156SSadaf Ebrahimi 	{"id_aa64mmfr2_el1", A64SysReg_ID_A64MMFR2_EL1},
893*9a0e4156SSadaf Ebrahimi 	{"lorid_el1", A64SysReg_LORID_EL1},
894*9a0e4156SSadaf Ebrahimi 	{"mvfr0_el1", A64SysReg_MVFR0_EL1},
895*9a0e4156SSadaf Ebrahimi 	{"mvfr1_el1", A64SysReg_MVFR1_EL1},
896*9a0e4156SSadaf Ebrahimi 	{"mvfr2_el1", A64SysReg_MVFR2_EL1},
897*9a0e4156SSadaf Ebrahimi 	{"rvbar_el1", A64SysReg_RVBAR_EL1},
898*9a0e4156SSadaf Ebrahimi 	{"rvbar_el2", A64SysReg_RVBAR_EL2},
899*9a0e4156SSadaf Ebrahimi 	{"rvbar_el3", A64SysReg_RVBAR_EL3},
900*9a0e4156SSadaf Ebrahimi 	{"isr_el1", A64SysReg_ISR_EL1},
901*9a0e4156SSadaf Ebrahimi 	{"cntpct_el0", A64SysReg_CNTPCT_EL0},
902*9a0e4156SSadaf Ebrahimi 	{"cntvct_el0", A64SysReg_CNTVCT_EL0},
903*9a0e4156SSadaf Ebrahimi 
904*9a0e4156SSadaf Ebrahimi 	// Trace registers
905*9a0e4156SSadaf Ebrahimi 	{"trcstatr", A64SysReg_TRCSTATR},
906*9a0e4156SSadaf Ebrahimi 	{"trcidr8", A64SysReg_TRCIDR8},
907*9a0e4156SSadaf Ebrahimi 	{"trcidr9", A64SysReg_TRCIDR9},
908*9a0e4156SSadaf Ebrahimi 	{"trcidr10", A64SysReg_TRCIDR10},
909*9a0e4156SSadaf Ebrahimi 	{"trcidr11", A64SysReg_TRCIDR11},
910*9a0e4156SSadaf Ebrahimi 	{"trcidr12", A64SysReg_TRCIDR12},
911*9a0e4156SSadaf Ebrahimi 	{"trcidr13", A64SysReg_TRCIDR13},
912*9a0e4156SSadaf Ebrahimi 	{"trcidr0", A64SysReg_TRCIDR0},
913*9a0e4156SSadaf Ebrahimi 	{"trcidr1", A64SysReg_TRCIDR1},
914*9a0e4156SSadaf Ebrahimi 	{"trcidr2", A64SysReg_TRCIDR2},
915*9a0e4156SSadaf Ebrahimi 	{"trcidr3", A64SysReg_TRCIDR3},
916*9a0e4156SSadaf Ebrahimi 	{"trcidr4", A64SysReg_TRCIDR4},
917*9a0e4156SSadaf Ebrahimi 	{"trcidr5", A64SysReg_TRCIDR5},
918*9a0e4156SSadaf Ebrahimi 	{"trcidr6", A64SysReg_TRCIDR6},
919*9a0e4156SSadaf Ebrahimi 	{"trcidr7", A64SysReg_TRCIDR7},
920*9a0e4156SSadaf Ebrahimi 	{"trcoslsr", A64SysReg_TRCOSLSR},
921*9a0e4156SSadaf Ebrahimi 	{"trcpdsr", A64SysReg_TRCPDSR},
922*9a0e4156SSadaf Ebrahimi 	{"trcdevaff0", A64SysReg_TRCDEVAFF0},
923*9a0e4156SSadaf Ebrahimi 	{"trcdevaff1", A64SysReg_TRCDEVAFF1},
924*9a0e4156SSadaf Ebrahimi 	{"trclsr", A64SysReg_TRCLSR},
925*9a0e4156SSadaf Ebrahimi 	{"trcauthstatus", A64SysReg_TRCAUTHSTATUS},
926*9a0e4156SSadaf Ebrahimi 	{"trcdevarch", A64SysReg_TRCDEVARCH},
927*9a0e4156SSadaf Ebrahimi 	{"trcdevid", A64SysReg_TRCDEVID},
928*9a0e4156SSadaf Ebrahimi 	{"trcdevtype", A64SysReg_TRCDEVTYPE},
929*9a0e4156SSadaf Ebrahimi 	{"trcpidr4", A64SysReg_TRCPIDR4},
930*9a0e4156SSadaf Ebrahimi 	{"trcpidr5", A64SysReg_TRCPIDR5},
931*9a0e4156SSadaf Ebrahimi 	{"trcpidr6", A64SysReg_TRCPIDR6},
932*9a0e4156SSadaf Ebrahimi 	{"trcpidr7", A64SysReg_TRCPIDR7},
933*9a0e4156SSadaf Ebrahimi 	{"trcpidr0", A64SysReg_TRCPIDR0},
934*9a0e4156SSadaf Ebrahimi 	{"trcpidr1", A64SysReg_TRCPIDR1},
935*9a0e4156SSadaf Ebrahimi 	{"trcpidr2", A64SysReg_TRCPIDR2},
936*9a0e4156SSadaf Ebrahimi 	{"trcpidr3", A64SysReg_TRCPIDR3},
937*9a0e4156SSadaf Ebrahimi 	{"trccidr0", A64SysReg_TRCCIDR0},
938*9a0e4156SSadaf Ebrahimi 	{"trccidr1", A64SysReg_TRCCIDR1},
939*9a0e4156SSadaf Ebrahimi 	{"trccidr2", A64SysReg_TRCCIDR2},
940*9a0e4156SSadaf Ebrahimi 	{"trccidr3", A64SysReg_TRCCIDR3},
941*9a0e4156SSadaf Ebrahimi 
942*9a0e4156SSadaf Ebrahimi 	// GICv3 registers
943*9a0e4156SSadaf Ebrahimi 	{"icc_iar1_el1", A64SysReg_ICC_IAR1_EL1},
944*9a0e4156SSadaf Ebrahimi 	{"icc_iar0_el1", A64SysReg_ICC_IAR0_EL1},
945*9a0e4156SSadaf Ebrahimi 	{"icc_hppir1_el1", A64SysReg_ICC_HPPIR1_EL1},
946*9a0e4156SSadaf Ebrahimi 	{"icc_hppir0_el1", A64SysReg_ICC_HPPIR0_EL1},
947*9a0e4156SSadaf Ebrahimi 	{"icc_rpr_el1", A64SysReg_ICC_RPR_EL1},
948*9a0e4156SSadaf Ebrahimi 	{"ich_vtr_el2", A64SysReg_ICH_VTR_EL2},
949*9a0e4156SSadaf Ebrahimi 	{"ich_eisr_el2", A64SysReg_ICH_EISR_EL2},
950*9a0e4156SSadaf Ebrahimi 	{"ich_elsr_el2", A64SysReg_ICH_ELSR_EL2},
951*9a0e4156SSadaf Ebrahimi 
952*9a0e4156SSadaf Ebrahimi 	// Statistical profiling registers
953*9a0e4156SSadaf Ebrahimi 	{"pmsidr_el1", A64SysReg_PMSIDR_EL1},
954*9a0e4156SSadaf Ebrahimi 	{"pmbidr_el1", A64SysReg_PMBIDR_EL1}
955*9a0e4156SSadaf Ebrahimi };
956*9a0e4156SSadaf Ebrahimi 
957*9a0e4156SSadaf Ebrahimi const A64SysRegMapper AArch64_MRSMapper = {
958*9a0e4156SSadaf Ebrahimi 	NULL,
959*9a0e4156SSadaf Ebrahimi 	MRSPairs,
960*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(MRSPairs),
961*9a0e4156SSadaf Ebrahimi };
962*9a0e4156SSadaf Ebrahimi 
963*9a0e4156SSadaf Ebrahimi static const A64NamedImmMapper_Mapping MSRPairs[] = {
964*9a0e4156SSadaf Ebrahimi 	{"dbgdtrtx_el0", A64SysReg_DBGDTRTX_EL0},
965*9a0e4156SSadaf Ebrahimi 	{"oslar_el1", A64SysReg_OSLAR_EL1},
966*9a0e4156SSadaf Ebrahimi 	{"pmswinc_el0", A64SysReg_PMSWINC_EL0},
967*9a0e4156SSadaf Ebrahimi 
968*9a0e4156SSadaf Ebrahimi 	// Trace registers
969*9a0e4156SSadaf Ebrahimi 	{"trcoslar", A64SysReg_TRCOSLAR},
970*9a0e4156SSadaf Ebrahimi 	{"trclar", A64SysReg_TRCLAR},
971*9a0e4156SSadaf Ebrahimi 
972*9a0e4156SSadaf Ebrahimi 	// GICv3 registers
973*9a0e4156SSadaf Ebrahimi 	{"icc_eoir1_el1", A64SysReg_ICC_EOIR1_EL1},
974*9a0e4156SSadaf Ebrahimi 	{"icc_eoir0_el1", A64SysReg_ICC_EOIR0_EL1},
975*9a0e4156SSadaf Ebrahimi 	{"icc_dir_el1", A64SysReg_ICC_DIR_EL1},
976*9a0e4156SSadaf Ebrahimi 	{"icc_sgi1r_el1", A64SysReg_ICC_SGI1R_EL1},
977*9a0e4156SSadaf Ebrahimi 	{"icc_asgi1r_el1", A64SysReg_ICC_ASGI1R_EL1},
978*9a0e4156SSadaf Ebrahimi 	{"icc_sgi0r_el1", A64SysReg_ICC_SGI0R_EL1}
979*9a0e4156SSadaf Ebrahimi };
980*9a0e4156SSadaf Ebrahimi 
981*9a0e4156SSadaf Ebrahimi const A64SysRegMapper AArch64_MSRMapper = {
982*9a0e4156SSadaf Ebrahimi 	NULL,
983*9a0e4156SSadaf Ebrahimi 	MSRPairs,
984*9a0e4156SSadaf Ebrahimi 	ARR_SIZE(MSRPairs),
985*9a0e4156SSadaf Ebrahimi };
986*9a0e4156SSadaf Ebrahimi 
987*9a0e4156SSadaf Ebrahimi #endif
988