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 (at) gmail.com>, 2013-2014 */ 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 char *A64NamedImmMapper_toString(A64NamedImmMapper *N, uint32_t Value, bool *Valid) 32 { 33 unsigned i; 34 for (i = 0; i < N->NumPairs; ++i) { 35 if (N->Pairs[i].Value == Value) { 36 *Valid = true; 37 return N->Pairs[i].Name; 38 } 39 } 40 41 *Valid = false; 42 return 0; 43 } 44 45 // compare s1 with lower(s2) 46 // return true if s1 == lower(f2), and false otherwise 47 static bool compare_lower_str(char *s1, char *s2) 48 { 49 bool res; 50 char *lower = cs_strdup(s2), *c; 51 for (c = lower; *c; c++) 52 *c = (char)tolower((int) *c); 53 54 res = (strcmp(s1, lower) == 0); 55 cs_mem_free(lower); 56 57 return res; 58 } 59 60 uint32_t A64NamedImmMapper_fromString(A64NamedImmMapper *N, char *Name, bool *Valid) 61 { 62 unsigned i; 63 for (i = 0; i < N->NumPairs; ++i) { 64 if (compare_lower_str(N->Pairs[i].Name, Name)) { 65 *Valid = true; 66 return N->Pairs[i].Value; 67 } 68 } 69 70 *Valid = false; 71 return (uint32_t)-1; 72 } 73 74 bool A64NamedImmMapper_validImm(A64NamedImmMapper *N, uint32_t Value) 75 { 76 return Value < N->TooBigImm; 77 } 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 { 83 char Buffer[22]; 84 char *BufPtr = Buffer+21; 85 char *result; 86 87 Buffer[21] = '\0'; 88 if (X == 0) *--BufPtr = '0'; // Handle special case... 89 90 while (X) { 91 *--BufPtr = X % 10 + '0'; 92 X /= 10; 93 } 94 95 if (isNeg) *--BufPtr = '-'; // Add negative sign... 96 97 result = cs_strdup(BufPtr); 98 return result; 99 } 100 101 static 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 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(A64SysRegMapper *S, uint32_t Bits, bool *Valid, char *result) 631 { 632 int dummy; 633 uint32_t Op0, Op1, CRn, CRm, Op2; 634 char *Op1S, *CRnS, *CRmS, *Op2S; 635 unsigned i; 636 637 // First search the registers shared by all 638 for (i = 0; i < ARR_SIZE(SysRegPairs); ++i) { 639 if (SysRegPairs[i].Value == Bits) { 640 *Valid = true; 641 strcpy(result, SysRegPairs[i].Name); 642 return; 643 } 644 } 645 646 // Next search for target specific registers 647 // if (FeatureBits & AArch64_ProcCyclone) { 648 if (true) { 649 for (i = 0; i < ARR_SIZE(CycloneSysRegPairs); ++i) { 650 if (CycloneSysRegPairs[i].Value == Bits) { 651 *Valid = true; 652 strcpy(result, CycloneSysRegPairs[i].Name); 653 return; 654 } 655 } 656 } 657 658 // Now try the instruction-specific registers (either read-only or 659 // write-only). 660 for (i = 0; i < S->NumInstPairs; ++i) { 661 if (S->InstPairs[i].Value == Bits) { 662 *Valid = true; 663 strcpy(result, S->InstPairs[i].Name); 664 return; 665 } 666 } 667 668 Op0 = (Bits >> 14) & 0x3; 669 Op1 = (Bits >> 11) & 0x7; 670 CRn = (Bits >> 7) & 0xf; 671 CRm = (Bits >> 3) & 0xf; 672 Op2 = Bits & 0x7; 673 674 // Only combinations matching: 11 xxx 1x11 xxxx xxx are valid for a generic 675 // name. 676 if (Op0 != 3 || (CRn != 11 && CRn != 15)) { 677 *Valid = false; 678 return; 679 } 680 681 //assert(Op0 == 3 && (CRn == 11 || CRn == 15) && "Invalid generic sysreg"); 682 683 *Valid = true; 684 685 Op1S = utostr(Op1, false); 686 CRnS = utostr(CRn, false); 687 CRmS = utostr(CRm, false); 688 Op2S = utostr(Op2, false); 689 690 //printf("Op1S: %s, CRnS: %s, CRmS: %s, Op2S: %s\n", Op1S, CRnS, CRmS, Op2S); 691 dummy = cs_snprintf(result, 128, "s3_%s_c%s_c%s_%s", Op1S, CRnS, CRmS, Op2S); 692 (void)dummy; 693 694 cs_mem_free(Op1S); 695 cs_mem_free(CRnS); 696 cs_mem_free(CRmS); 697 cs_mem_free(Op2S); 698 } 699 700 static A64NamedImmMapper_Mapping TLBIPairs[] = { 701 {"ipas2e1is", A64TLBI_IPAS2E1IS}, 702 {"ipas2le1is", A64TLBI_IPAS2LE1IS}, 703 {"vmalle1is", A64TLBI_VMALLE1IS}, 704 {"alle2is", A64TLBI_ALLE2IS}, 705 {"alle3is", A64TLBI_ALLE3IS}, 706 {"vae1is", A64TLBI_VAE1IS}, 707 {"vae2is", A64TLBI_VAE2IS}, 708 {"vae3is", A64TLBI_VAE3IS}, 709 {"aside1is", A64TLBI_ASIDE1IS}, 710 {"vaae1is", A64TLBI_VAAE1IS}, 711 {"alle1is", A64TLBI_ALLE1IS}, 712 {"vale1is", A64TLBI_VALE1IS}, 713 {"vale2is", A64TLBI_VALE2IS}, 714 {"vale3is", A64TLBI_VALE3IS}, 715 {"vmalls12e1is", A64TLBI_VMALLS12E1IS}, 716 {"vaale1is", A64TLBI_VAALE1IS}, 717 {"ipas2e1", A64TLBI_IPAS2E1}, 718 {"ipas2le1", A64TLBI_IPAS2LE1}, 719 {"vmalle1", A64TLBI_VMALLE1}, 720 {"alle2", A64TLBI_ALLE2}, 721 {"alle3", A64TLBI_ALLE3}, 722 {"vae1", A64TLBI_VAE1}, 723 {"vae2", A64TLBI_VAE2}, 724 {"vae3", A64TLBI_VAE3}, 725 {"aside1", A64TLBI_ASIDE1}, 726 {"vaae1", A64TLBI_VAAE1}, 727 {"alle1", A64TLBI_ALLE1}, 728 {"vale1", A64TLBI_VALE1}, 729 {"vale2", A64TLBI_VALE2}, 730 {"vale3", A64TLBI_VALE3}, 731 {"vmalls12e1", A64TLBI_VMALLS12E1}, 732 {"vaale1", A64TLBI_VAALE1} 733 }; 734 735 A64NamedImmMapper A64TLBI_TLBIMapper = { 736 TLBIPairs, 737 ARR_SIZE(TLBIPairs), 738 0, 739 }; 740 741 static A64NamedImmMapper_Mapping ATPairs[] = { 742 {"s1e1r", A64AT_S1E1R}, 743 {"s1e2r", A64AT_S1E2R}, 744 {"s1e3r", A64AT_S1E3R}, 745 {"s1e1w", A64AT_S1E1W}, 746 {"s1e2w", A64AT_S1E2W}, 747 {"s1e3w", A64AT_S1E3W}, 748 {"s1e0r", A64AT_S1E0R}, 749 {"s1e0w", A64AT_S1E0W}, 750 {"s12e1r", A64AT_S12E1R}, 751 {"s12e1w", A64AT_S12E1W}, 752 {"s12e0r", A64AT_S12E0R}, 753 {"s12e0w", A64AT_S12E0W} 754 }; 755 756 A64NamedImmMapper A64AT_ATMapper = { 757 ATPairs, 758 ARR_SIZE(ATPairs), 759 0, 760 }; 761 762 static A64NamedImmMapper_Mapping DBarrierPairs[] = { 763 {"oshld", A64DB_OSHLD}, 764 {"oshst", A64DB_OSHST}, 765 {"osh", A64DB_OSH}, 766 {"nshld", A64DB_NSHLD}, 767 {"nshst", A64DB_NSHST}, 768 {"nsh", A64DB_NSH}, 769 {"ishld", A64DB_ISHLD}, 770 {"ishst", A64DB_ISHST}, 771 {"ish", A64DB_ISH}, 772 {"ld", A64DB_LD}, 773 {"st", A64DB_ST}, 774 {"sy", A64DB_SY} 775 }; 776 777 A64NamedImmMapper A64DB_DBarrierMapper = { 778 DBarrierPairs, 779 ARR_SIZE(DBarrierPairs), 780 16, 781 }; 782 783 static A64NamedImmMapper_Mapping DCPairs[] = { 784 {"zva", A64DC_ZVA}, 785 {"ivac", A64DC_IVAC}, 786 {"isw", A64DC_ISW}, 787 {"cvac", A64DC_CVAC}, 788 {"csw", A64DC_CSW}, 789 {"cvau", A64DC_CVAU}, 790 {"civac", A64DC_CIVAC}, 791 {"cisw", A64DC_CISW} 792 }; 793 794 A64NamedImmMapper A64DC_DCMapper = { 795 DCPairs, 796 ARR_SIZE(DCPairs), 797 0, 798 }; 799 800 static A64NamedImmMapper_Mapping ICPairs[] = { 801 {"ialluis", A64IC_IALLUIS}, 802 {"iallu", A64IC_IALLU}, 803 {"ivau", A64IC_IVAU} 804 }; 805 806 A64NamedImmMapper A64IC_ICMapper = { 807 ICPairs, 808 ARR_SIZE(ICPairs), 809 0, 810 }; 811 812 static A64NamedImmMapper_Mapping ISBPairs[] = { 813 {"sy", A64DB_SY}, 814 }; 815 816 A64NamedImmMapper A64ISB_ISBMapper = { 817 ISBPairs, 818 ARR_SIZE(ISBPairs), 819 16, 820 }; 821 822 static A64NamedImmMapper_Mapping PRFMPairs[] = { 823 {"pldl1keep", A64PRFM_PLDL1KEEP}, 824 {"pldl1strm", A64PRFM_PLDL1STRM}, 825 {"pldl2keep", A64PRFM_PLDL2KEEP}, 826 {"pldl2strm", A64PRFM_PLDL2STRM}, 827 {"pldl3keep", A64PRFM_PLDL3KEEP}, 828 {"pldl3strm", A64PRFM_PLDL3STRM}, 829 {"plil1keep", A64PRFM_PLIL1KEEP}, 830 {"plil1strm", A64PRFM_PLIL1STRM}, 831 {"plil2keep", A64PRFM_PLIL2KEEP}, 832 {"plil2strm", A64PRFM_PLIL2STRM}, 833 {"plil3keep", A64PRFM_PLIL3KEEP}, 834 {"plil3strm", A64PRFM_PLIL3STRM}, 835 {"pstl1keep", A64PRFM_PSTL1KEEP}, 836 {"pstl1strm", A64PRFM_PSTL1STRM}, 837 {"pstl2keep", A64PRFM_PSTL2KEEP}, 838 {"pstl2strm", A64PRFM_PSTL2STRM}, 839 {"pstl3keep", A64PRFM_PSTL3KEEP}, 840 {"pstl3strm", A64PRFM_PSTL3STRM} 841 }; 842 843 A64NamedImmMapper A64PRFM_PRFMMapper = { 844 PRFMPairs, 845 ARR_SIZE(PRFMPairs), 846 32, 847 }; 848 849 static A64NamedImmMapper_Mapping PStatePairs[] = { 850 {"spsel", A64PState_SPSel}, 851 {"daifset", A64PState_DAIFSet}, 852 {"daifclr", A64PState_DAIFClr}, 853 {"pan", A64PState_PAN}, 854 {"uao", A64PState_UAO} 855 }; 856 857 A64NamedImmMapper A64PState_PStateMapper = { 858 PStatePairs, 859 ARR_SIZE(PStatePairs), 860 0, 861 }; 862 863 static A64NamedImmMapper_Mapping MRSPairs[] = { 864 {"mdccsr_el0", A64SysReg_MDCCSR_EL0}, 865 {"dbgdtrrx_el0", A64SysReg_DBGDTRRX_EL0}, 866 {"mdrar_el1", A64SysReg_MDRAR_EL1}, 867 {"oslsr_el1", A64SysReg_OSLSR_EL1}, 868 {"dbgauthstatus_el1", A64SysReg_DBGAUTHSTATUS_EL1}, 869 {"pmceid0_el0", A64SysReg_PMCEID0_EL0}, 870 {"pmceid1_el0", A64SysReg_PMCEID1_EL0}, 871 {"midr_el1", A64SysReg_MIDR_EL1}, 872 {"ccsidr_el1", A64SysReg_CCSIDR_EL1}, 873 {"clidr_el1", A64SysReg_CLIDR_EL1}, 874 {"ctr_el0", A64SysReg_CTR_EL0}, 875 {"mpidr_el1", A64SysReg_MPIDR_EL1}, 876 {"revidr_el1", A64SysReg_REVIDR_EL1}, 877 {"aidr_el1", A64SysReg_AIDR_EL1}, 878 {"dczid_el0", A64SysReg_DCZID_EL0}, 879 {"id_pfr0_el1", A64SysReg_ID_PFR0_EL1}, 880 {"id_pfr1_el1", A64SysReg_ID_PFR1_EL1}, 881 {"id_dfr0_el1", A64SysReg_ID_DFR0_EL1}, 882 {"id_afr0_el1", A64SysReg_ID_AFR0_EL1}, 883 {"id_mmfr0_el1", A64SysReg_ID_MMFR0_EL1}, 884 {"id_mmfr1_el1", A64SysReg_ID_MMFR1_EL1}, 885 {"id_mmfr2_el1", A64SysReg_ID_MMFR2_EL1}, 886 {"id_mmfr3_el1", A64SysReg_ID_MMFR3_EL1}, 887 {"id_mmfr4_el1", A64SysReg_ID_MMFR4_EL1}, 888 {"id_isar0_el1", A64SysReg_ID_ISAR0_EL1}, 889 {"id_isar1_el1", A64SysReg_ID_ISAR1_EL1}, 890 {"id_isar2_el1", A64SysReg_ID_ISAR2_EL1}, 891 {"id_isar3_el1", A64SysReg_ID_ISAR3_EL1}, 892 {"id_isar4_el1", A64SysReg_ID_ISAR4_EL1}, 893 {"id_isar5_el1", A64SysReg_ID_ISAR5_EL1}, 894 {"id_aa64pfr0_el1", A64SysReg_ID_A64PFR0_EL1}, 895 {"id_aa64pfr1_el1", A64SysReg_ID_A64PFR1_EL1}, 896 {"id_aa64dfr0_el1", A64SysReg_ID_A64DFR0_EL1}, 897 {"id_aa64dfr1_el1", A64SysReg_ID_A64DFR1_EL1}, 898 {"id_aa64afr0_el1", A64SysReg_ID_A64AFR0_EL1}, 899 {"id_aa64afr1_el1", A64SysReg_ID_A64AFR1_EL1}, 900 {"id_aa64isar0_el1", A64SysReg_ID_A64ISAR0_EL1}, 901 {"id_aa64isar1_el1", A64SysReg_ID_A64ISAR1_EL1}, 902 {"id_aa64mmfr0_el1", A64SysReg_ID_A64MMFR0_EL1}, 903 {"id_aa64mmfr1_el1", A64SysReg_ID_A64MMFR1_EL1}, 904 {"id_aa64mmfr2_el1", A64SysReg_ID_A64MMFR2_EL1}, 905 {"lorid_el1", A64SysReg_LORID_EL1}, 906 {"mvfr0_el1", A64SysReg_MVFR0_EL1}, 907 {"mvfr1_el1", A64SysReg_MVFR1_EL1}, 908 {"mvfr2_el1", A64SysReg_MVFR2_EL1}, 909 {"rvbar_el1", A64SysReg_RVBAR_EL1}, 910 {"rvbar_el2", A64SysReg_RVBAR_EL2}, 911 {"rvbar_el3", A64SysReg_RVBAR_EL3}, 912 {"isr_el1", A64SysReg_ISR_EL1}, 913 {"cntpct_el0", A64SysReg_CNTPCT_EL0}, 914 {"cntvct_el0", A64SysReg_CNTVCT_EL0}, 915 916 // Trace registers 917 {"trcstatr", A64SysReg_TRCSTATR}, 918 {"trcidr8", A64SysReg_TRCIDR8}, 919 {"trcidr9", A64SysReg_TRCIDR9}, 920 {"trcidr10", A64SysReg_TRCIDR10}, 921 {"trcidr11", A64SysReg_TRCIDR11}, 922 {"trcidr12", A64SysReg_TRCIDR12}, 923 {"trcidr13", A64SysReg_TRCIDR13}, 924 {"trcidr0", A64SysReg_TRCIDR0}, 925 {"trcidr1", A64SysReg_TRCIDR1}, 926 {"trcidr2", A64SysReg_TRCIDR2}, 927 {"trcidr3", A64SysReg_TRCIDR3}, 928 {"trcidr4", A64SysReg_TRCIDR4}, 929 {"trcidr5", A64SysReg_TRCIDR5}, 930 {"trcidr6", A64SysReg_TRCIDR6}, 931 {"trcidr7", A64SysReg_TRCIDR7}, 932 {"trcoslsr", A64SysReg_TRCOSLSR}, 933 {"trcpdsr", A64SysReg_TRCPDSR}, 934 {"trcdevaff0", A64SysReg_TRCDEVAFF0}, 935 {"trcdevaff1", A64SysReg_TRCDEVAFF1}, 936 {"trclsr", A64SysReg_TRCLSR}, 937 {"trcauthstatus", A64SysReg_TRCAUTHSTATUS}, 938 {"trcdevarch", A64SysReg_TRCDEVARCH}, 939 {"trcdevid", A64SysReg_TRCDEVID}, 940 {"trcdevtype", A64SysReg_TRCDEVTYPE}, 941 {"trcpidr4", A64SysReg_TRCPIDR4}, 942 {"trcpidr5", A64SysReg_TRCPIDR5}, 943 {"trcpidr6", A64SysReg_TRCPIDR6}, 944 {"trcpidr7", A64SysReg_TRCPIDR7}, 945 {"trcpidr0", A64SysReg_TRCPIDR0}, 946 {"trcpidr1", A64SysReg_TRCPIDR1}, 947 {"trcpidr2", A64SysReg_TRCPIDR2}, 948 {"trcpidr3", A64SysReg_TRCPIDR3}, 949 {"trccidr0", A64SysReg_TRCCIDR0}, 950 {"trccidr1", A64SysReg_TRCCIDR1}, 951 {"trccidr2", A64SysReg_TRCCIDR2}, 952 {"trccidr3", A64SysReg_TRCCIDR3}, 953 954 // GICv3 registers 955 {"icc_iar1_el1", A64SysReg_ICC_IAR1_EL1}, 956 {"icc_iar0_el1", A64SysReg_ICC_IAR0_EL1}, 957 {"icc_hppir1_el1", A64SysReg_ICC_HPPIR1_EL1}, 958 {"icc_hppir0_el1", A64SysReg_ICC_HPPIR0_EL1}, 959 {"icc_rpr_el1", A64SysReg_ICC_RPR_EL1}, 960 {"ich_vtr_el2", A64SysReg_ICH_VTR_EL2}, 961 {"ich_eisr_el2", A64SysReg_ICH_EISR_EL2}, 962 {"ich_elsr_el2", A64SysReg_ICH_ELSR_EL2}, 963 964 // Statistical profiling registers 965 {"pmsidr_el1", A64SysReg_PMSIDR_EL1}, 966 {"pmbidr_el1", A64SysReg_PMBIDR_EL1} 967 }; 968 969 A64SysRegMapper AArch64_MRSMapper = { 970 NULL, 971 MRSPairs, 972 ARR_SIZE(MRSPairs), 973 }; 974 975 static A64NamedImmMapper_Mapping MSRPairs[] = { 976 {"dbgdtrtx_el0", A64SysReg_DBGDTRTX_EL0}, 977 {"oslar_el1", A64SysReg_OSLAR_EL1}, 978 {"pmswinc_el0", A64SysReg_PMSWINC_EL0}, 979 980 // Trace registers 981 {"trcoslar", A64SysReg_TRCOSLAR}, 982 {"trclar", A64SysReg_TRCLAR}, 983 984 // GICv3 registers 985 {"icc_eoir1_el1", A64SysReg_ICC_EOIR1_EL1}, 986 {"icc_eoir0_el1", A64SysReg_ICC_EOIR0_EL1}, 987 {"icc_dir_el1", A64SysReg_ICC_DIR_EL1}, 988 {"icc_sgi1r_el1", A64SysReg_ICC_SGI1R_EL1}, 989 {"icc_asgi1r_el1", A64SysReg_ICC_ASGI1R_EL1}, 990 {"icc_sgi0r_el1", A64SysReg_ICC_SGI0R_EL1} 991 }; 992 993 A64SysRegMapper AArch64_MSRMapper = { 994 NULL, 995 MSRPairs, 996 ARR_SIZE(MSRPairs), 997 }; 998 999 #endif 1000