Coverage Report

Created: 2025-06-13 06:15

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