2 * Copyright 2019 Google, Inc.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution;
11 * neither the name of the copyright holders nor the names of its
12 * contributors may be used to endorse or promote products derived from
13 * this software without specific prior written permission.
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include "arch/arm/fastmodel/CortexA76/thread_context.hh"
32 #include "arch/arm/fastmodel/iris/memory_spaces.hh"
33 #include "arch/arm/utility.hh"
34 #include "iris/detail/IrisCppAdapter.h"
35 #include "iris/detail/IrisObjects.h"
40 CortexA76TC::CortexA76TC(
41 ::BaseCPU
*cpu
, int id
, System
*system
, ::BaseTLB
*dtb
, ::BaseTLB
*itb
,
42 iris::IrisConnectionInterface
*iris_if
,
43 const std::string
&iris_path
) :
44 ThreadContext(cpu
, id
, system
, dtb
, itb
, iris_if
, iris_path
)
48 CortexA76TC::translateAddress(Addr
&paddr
, Addr vaddr
)
50 // Determine what memory spaces are currently active.
51 Iris::CanonicalMsn in_msn
;
52 switch (currEL(this)) {
54 in_msn
= Iris::SecureMonitorMsn
;
57 in_msn
= Iris::NsHypMsn
;
60 in_msn
= Iris::GuestMsn
;
64 Iris::CanonicalMsn out_msn
= inSecureState(this) ?
65 Iris::PhysicalMemorySecureMsn
: Iris::PhysicalMemoryNonSecureMsn
;
67 // Figure out what memory spaces match the canonical numbers we need.
68 iris::MemorySpaceId in
= iris::IRIS_UINT64_MAX
;
69 iris::MemorySpaceId out
= iris::IRIS_UINT64_MAX
;
71 for (auto &space
: memorySpaces
) {
72 if (space
.canonicalMsn
== in_msn
)
74 else if (space
.canonicalMsn
== out_msn
)
78 panic_if(in
== iris::IRIS_UINT64_MAX
|| out
== iris::IRIS_UINT64_MAX
,
79 "Canonical IRIS memory space numbers not found.");
81 return ThreadContext::translateAddress(paddr
, out
, vaddr
, in
);
85 CortexA76TC::initFromIrisInstance(const ResourceMap
&resources
)
87 ThreadContext::initFromIrisInstance(resources
);
89 pcRscId
= extractResourceId(resources
, "PC");
91 extractResourceMap(miscRegIds
, resources
, miscRegIdxNameMap
);
93 extractResourceMap(intReg32Ids
, resources
, intReg32IdxNameMap
);
94 extractResourceMap(intReg64Ids
, resources
, intReg64IdxNameMap
);
96 extractResourceMap(flattenedIntIds
, resources
, flattenedIntIdxNameMap
);
98 extractResourceMap(ccRegIds
, resources
, ccRegIdxNameMap
);
100 extractResourceMap(vecRegIds
, resources
, vecRegIdxNameMap
);
104 CortexA76TC::readIntRegFlat(RegIndex idx
) const
106 ArmISA::CPSR orig_cpsr
;
108 auto *non_const_this
= const_cast<CortexA76TC
*>(this);
110 if (idx
== ArmISA::INTREG_R13_MON
|| idx
== ArmISA::INTREG_R14_MON
) {
111 orig_cpsr
= readMiscRegNoEffect(ArmISA::MISCREG_CPSR
);
112 ArmISA::CPSR new_cpsr
= orig_cpsr
;
113 new_cpsr
.mode
= MODE_MON
;
114 non_const_this
->setMiscReg(ArmISA::MISCREG_CPSR
, new_cpsr
);
117 RegVal val
= ThreadContext::readIntRegFlat(idx
);
119 if (idx
== ArmISA::INTREG_R13_MON
|| idx
== ArmISA::INTREG_R14_MON
) {
120 non_const_this
->setMiscReg(ArmISA::MISCREG_CPSR
, orig_cpsr
);
127 CortexA76TC::setIntRegFlat(RegIndex idx
, RegVal val
)
129 ArmISA::CPSR orig_cpsr
;
131 if (idx
== ArmISA::INTREG_R13_MON
|| idx
== ArmISA::INTREG_R14_MON
) {
132 orig_cpsr
= readMiscRegNoEffect(ArmISA::MISCREG_CPSR
);
133 ArmISA::CPSR new_cpsr
= orig_cpsr
;
134 new_cpsr
.mode
= MODE_MON
;
135 setMiscReg(ArmISA::MISCREG_CPSR
, new_cpsr
);
138 ThreadContext::setIntRegFlat(idx
, val
);
140 if (idx
== ArmISA::INTREG_R13_MON
|| idx
== ArmISA::INTREG_R14_MON
) {
141 setMiscReg(ArmISA::MISCREG_CPSR
, orig_cpsr
);
146 CortexA76TC::readCCRegFlat(RegIndex idx
) const
148 RegVal result
= Iris::ThreadContext::readCCRegFlat(idx
);
150 case ArmISA::CCREG_NZ
:
151 result
= ((CPSR
)result
).nz
;
153 case ArmISA::CCREG_FP
:
154 result
= bits(result
, 31, 28);
163 CortexA76TC::setCCRegFlat(RegIndex idx
, RegVal val
)
166 case ArmISA::CCREG_NZ
:
168 CPSR cpsr
= readMiscRegNoEffect(ArmISA::MISCREG_CPSR
);
173 case ArmISA::CCREG_FP
:
175 FPSCR fpscr
= readMiscRegNoEffect(ArmISA::MISCREG_FPSCR
);
176 val
= insertBits(fpscr
, 31, 28, val
);
182 Iris::ThreadContext::setCCRegFlat(idx
, val
);
186 CortexA76TC::getBpSpaceId(Addr pc
) const
188 if (bpSpaceId
== iris::IRIS_UINT64_MAX
) {
189 for (auto &space
: memorySpaces
) {
190 if (space
.canonicalMsn
== Iris::CurrentMsn
) {
191 bpSpaceId
= space
.spaceId
;
195 panic_if(bpSpaceId
== iris::IRIS_UINT64_MAX
,
196 "Unable to find address space for breakpoints.");
201 Iris::ThreadContext::IdxNameMap
CortexA76TC::miscRegIdxNameMap({
202 { ArmISA::MISCREG_CPSR
, "CPSR" },
203 { ArmISA::MISCREG_SPSR
, "SPSR" },
204 { ArmISA::MISCREG_SPSR_FIQ
, "SPSR_fiq" },
205 { ArmISA::MISCREG_SPSR_IRQ
, "SPSR_irq" },
206 // ArmISA::MISCREG_SPSR_SVC?
207 // ArmISA::MISCREG_SPSR_MON?
208 { ArmISA::MISCREG_SPSR_ABT
, "SPSR_abt" },
209 // ArmISA::MISCREG_SPSR_HYP?
210 { ArmISA::MISCREG_SPSR_UND
, "SPSR_und" },
211 // ArmISA::MISCREG_ELR_HYP?
212 // ArmISA::MISCREG_FPSID?
213 { ArmISA::MISCREG_FPSCR
, "FPSCR" },
214 { ArmISA::MISCREG_MVFR1
, "MVFR1_EL1" }, //XXX verify
215 { ArmISA::MISCREG_MVFR0
, "MVFR1_EL1" }, //XXX verify
216 // ArmISA::MISCREG_FPEXC?
219 { ArmISA::MISCREG_CPSR_MODE
, "CPSR.MODE" },
220 { ArmISA::MISCREG_CPSR_Q
, "CPSR.Q" },
221 // ArmISA::MISCREG_FPSCR_EXC?
222 { ArmISA::MISCREG_FPSCR_QC
, "FPSR.QC" },
223 // ArmISA::MISCREG_LOCKADDR?
224 // ArmISA::MISCREG_LOCKFLAG?
225 // ArmISA::MISCREG_PRRR_MAIR0?
226 // ArmISA::MISCREG_PRRR_MAIR0_NS?
227 // ArmISA::MISCREG_PRRR_MAIR0_S?
228 // ArmISA::MISCREG_NMRR_MAIR1?
229 // ArmISA::MISCREG_NMRR_MAIR1_NS?
230 // ArmISA::MISCREG_NMRR_MAIR1_S?
231 // ArmISA::MISCREG_PMXEVTYPER_PMCCFILTR?
232 // ArmISA::MISCREG_SCTLR_RST?
233 // ArmISA::MISCREG_SEV_MAILBOX?
235 // AArch32 CP14 registers (debug/trace/ThumbEE/Jazelle control)
236 // ArmISA::MISCREG_DBGDIDR?
237 // ArmISA::MISCREG_DBGDSCRint?
238 // ArmISA::MISCREG_DBGDCCINT?
239 // ArmISA::MISCREG_DBGDTRTXint?
240 // ArmISA::MISCREG_DBGDTRRXint?
241 { ArmISA::MISCREG_DBGWFAR
, "DBGWFAR" },
242 // ArmISA::MISCREG_DBGVCR?
243 { ArmISA::MISCREG_DBGDTRRXext
, "DBGDTRRXext" },
244 // ArmISA::MISCREG_DBGDSCRext?
245 { ArmISA::MISCREG_DBGDTRTXext
, "DBGDTRTXext" },
246 // ArmISA::MISCREG_DBGOSECCR?
247 { ArmISA::MISCREG_DBGBVR0
, "DBGBVR0" },
248 { ArmISA::MISCREG_DBGBVR1
, "DBGBVR1" },
249 { ArmISA::MISCREG_DBGBVR2
, "DBGBVR2" },
250 { ArmISA::MISCREG_DBGBVR3
, "DBGBVR3" },
251 { ArmISA::MISCREG_DBGBVR4
, "DBGBVR4" },
252 { ArmISA::MISCREG_DBGBVR5
, "DBGBVR5" },
253 { ArmISA::MISCREG_DBGBCR0
, "DBGBCR0" },
254 { ArmISA::MISCREG_DBGBCR1
, "DBGBCR1" },
255 { ArmISA::MISCREG_DBGBCR2
, "DBGBCR2" },
256 { ArmISA::MISCREG_DBGBCR3
, "DBGBCR3" },
257 { ArmISA::MISCREG_DBGBCR4
, "DBGBCR4" },
258 { ArmISA::MISCREG_DBGBCR5
, "DBGBCR5" },
259 { ArmISA::MISCREG_DBGWVR0
, "DBGWVR0" },
260 { ArmISA::MISCREG_DBGWVR1
, "DBGWVR1" },
261 { ArmISA::MISCREG_DBGWVR2
, "DBGWVR2" },
262 { ArmISA::MISCREG_DBGWVR3
, "DBGWVR3" },
263 { ArmISA::MISCREG_DBGWCR0
, "DBGWCR0" },
264 { ArmISA::MISCREG_DBGWCR1
, "DBGWCR1" },
265 { ArmISA::MISCREG_DBGWCR2
, "DBGWCR2" },
266 { ArmISA::MISCREG_DBGWCR3
, "DBGWCR3" },
267 // ArmISA::MISCREG_DBGDRAR?
268 { ArmISA::MISCREG_DBGBXVR4
, "DBGBXVR4" },
269 { ArmISA::MISCREG_DBGBXVR5
, "DBGBXVR5" },
270 { ArmISA::MISCREG_DBGOSLAR
, "DBGOSLAR" },
271 // ArmISA::MISCREG_DBGOSLSR?
272 // ArmISA::MISCREG_DBGOSDLR?
273 { ArmISA::MISCREG_DBGPRCR
, "DBGPRCR_EL1" }, //XXX verify
274 // ArmISA::MISCREG_DBGDSAR?
275 { ArmISA::MISCREG_DBGCLAIMSET
, "DBGCLAIMSET" },
276 { ArmISA::MISCREG_DBGCLAIMCLR
, "DBGCLAIMCLR" },
277 { ArmISA::MISCREG_DBGAUTHSTATUS
, "DBGAUTHSTATUS" },
278 // ArmISA::MISCREG_DBGDEVID2?
279 // ArmISA::MISCREG_DBGDEVID1?
280 // ArmISA::MISCREG_DBGDEVID0?
281 // ArmISA::MISCREG_TEECR? not in ARM DDI 0487A.b+
282 // ArmISA::MISCREG_JIDR?
283 // ArmISA::MISCREG_TEEHBR? not in ARM DDI 0487A.b+
284 // ArmISA::MISCREG_JOSCR?
285 // ArmISA::MISCREG_JMCR?
287 // AArch32 CP15 registers (system control)
288 { ArmISA::MISCREG_MIDR
, "MIDR" },
289 { ArmISA::MISCREG_CTR
, "CTR" },
290 { ArmISA::MISCREG_TCMTR
, "TCMTR" },
291 { ArmISA::MISCREG_TLBTR
, "TLBTR" },
292 { ArmISA::MISCREG_MPIDR
, "MPIDR" },
293 { ArmISA::MISCREG_REVIDR
, "REVIDR" },
294 { ArmISA::MISCREG_ID_PFR0
, "ID_PFR0" },
295 { ArmISA::MISCREG_ID_PFR1
, "ID_PFR1" },
296 { ArmISA::MISCREG_ID_DFR0
, "ID_DFR0" },
297 { ArmISA::MISCREG_ID_AFR0
, "ID_AFR0" },
298 { ArmISA::MISCREG_ID_MMFR0
, "ID_MMFR0" },
299 { ArmISA::MISCREG_ID_MMFR1
, "ID_MMFR1" },
300 { ArmISA::MISCREG_ID_MMFR2
, "ID_MMFR2" },
301 { ArmISA::MISCREG_ID_MMFR3
, "ID_MMFR3" },
302 { ArmISA::MISCREG_ID_ISAR0
, "ID_ISAR0" },
303 { ArmISA::MISCREG_ID_ISAR1
, "ID_ISAR1" },
304 { ArmISA::MISCREG_ID_ISAR2
, "ID_ISAR2" },
305 { ArmISA::MISCREG_ID_ISAR3
, "ID_ISAR3" },
306 { ArmISA::MISCREG_ID_ISAR4
, "ID_ISAR4" },
307 { ArmISA::MISCREG_ID_ISAR5
, "ID_ISAR5" },
308 { ArmISA::MISCREG_CCSIDR
, "CCSIDR" },
309 { ArmISA::MISCREG_CLIDR
, "CLIDR" },
310 { ArmISA::MISCREG_AIDR
, "AIDR" },
311 { ArmISA::MISCREG_CSSELR
, "CSSELR_EL1" }, //XXX verify
312 // ArmISA::MISCREG_CSSELR_NS?
313 // ArmISA::MISCREG_CSSELR_S?
314 { ArmISA::MISCREG_VPIDR
, "VPIDR" },
315 { ArmISA::MISCREG_VMPIDR
, "VMPIDR" },
316 // ArmISA::MISCREG_SCTLR?
317 // ArmISA::MISCREG_SCTLR_NS?
318 // ArmISA::MISCREG_SCTLR_S?
319 // ArmISA::MISCREG_ACTLR?
320 // ArmISA::MISCREG_ACTLR_NS?
321 // ArmISA::MISCREG_ACTLR_S?
322 { ArmISA::MISCREG_CPACR
, "CPACR" },
323 { ArmISA::MISCREG_SCR
, "SCR" },
324 { ArmISA::MISCREG_SDER
, "SDER" },
325 { ArmISA::MISCREG_NSACR
, "NSACR" },
326 { ArmISA::MISCREG_HSCTLR
, "HSCTLR" },
327 { ArmISA::MISCREG_HACTLR
, "HACTLR" },
328 { ArmISA::MISCREG_HCR
, "HCR" },
329 { ArmISA::MISCREG_HDCR
, "HDCR" },
330 { ArmISA::MISCREG_HCPTR
, "HCPTR" },
331 { ArmISA::MISCREG_HSTR
, "HSTR_EL2" }, //XXX verify
332 { ArmISA::MISCREG_HACR
, "HACR" },
333 // ArmISA::MISCREG_TTBR0?
334 { ArmISA::MISCREG_TTBR0_NS
, "NS_TTBR0" }, //XXX verify
335 // ArmISA::MISCREG_TTBR0_S?
336 // ArmISA::MISCREG_TTBR1?
337 { ArmISA::MISCREG_TTBR1_NS
, "NS_TTBR1" }, //XXX verify
338 // ArmISA::MISCREG_TTBR1_S?
339 // ArmISA::MISCREG_TTBCR?
340 { ArmISA::MISCREG_TTBCR_NS
, "NS_TTBCR" }, //XXX verify
341 // ArmISA::MISCREG_TTBCR_S?
342 // ArmISA::MISCREG_HTCR?
343 // ArmISA::MISCREG_VTCR?
344 // ArmISA::MISCREG_DACR?
345 { ArmISA::MISCREG_DACR_NS
, "NS_DACR" }, //XXX verify
346 // ArmISA::MISCREG_DACR_S?
347 // ArmISA::MISCREG_DFSR?
348 { ArmISA::MISCREG_DFSR_NS
, "NS_DFSR" }, //XXX verify
349 // ArmISA::MISCREG_DFSR_S?
350 // ArmISA::MISCREG_IFSR?
351 { ArmISA::MISCREG_IFSR_NS
, "NS_IFSR" },
352 // ArmISA::MISCREG_IFSR_S?
353 { ArmISA::MISCREG_ADFSR
, "ADFSR" },
354 // ArmISA::MISCREG_ADFSR_NS?
355 // ArmISA::MISCREG_ADFSR_S?
356 { ArmISA::MISCREG_AIFSR
, "AIFSR" },
357 // ArmISA::MISCREG_AIFSR_NS?
358 // ArmISA::MISCREG_AIFSR_S?
359 // ArmISA::MISCREG_HADFSR?
360 // ArmISA::MISCREG_HAIFSR?
361 { ArmISA::MISCREG_HSR
, "HSR" },
362 // ArmISA::MISCREG_DFAR?
363 { ArmISA::MISCREG_DFAR_NS
, "NS_DFAR" }, //XXX verify
364 // ArmISA::MISCREG_DFAR_S?
365 // ArmISA::MISCREG_IFAR?
366 { ArmISA::MISCREG_IFAR_NS
, "NS_IFAR" }, //XXX verify
367 // ArmISA::MISCREG_IFAR_S?
368 { ArmISA::MISCREG_HDFAR
, "HDFAR" },
369 { ArmISA::MISCREG_HIFAR
, "HIFAR" },
370 { ArmISA::MISCREG_HPFAR
, "HPFAR" },
371 { ArmISA::MISCREG_ICIALLUIS
, "ICIALLUIS" },
372 // ArmISA::MISCREG_BPIALLIS?
373 // ArmISA::MISCREG_PAR?
374 { ArmISA::MISCREG_PAR_NS
, "NS_PAR" }, //XXX verify
375 // ArmISA::MISCREG_PAR_S?
376 { ArmISA::MISCREG_ICIALLU
, "ICIALLU" },
377 { ArmISA::MISCREG_ICIMVAU
, "ICIMVAU" },
378 // ArmISA::MISCREG_CP15ISB?
379 // ArmISA::MISCREG_BPIALL?
380 // ArmISA::MISCREG_BPIMVA?
381 { ArmISA::MISCREG_DCIMVAC
, "DCIMVAC" },
382 { ArmISA::MISCREG_DCISW
, "DCISW" },
383 { ArmISA::MISCREG_ATS1CPR
, "ATS1CPR" },
384 { ArmISA::MISCREG_ATS1CPW
, "ATS1CPW" },
385 { ArmISA::MISCREG_ATS1CUR
, "ATS1CUR" },
386 { ArmISA::MISCREG_ATS1CUW
, "ATS1CUW" },
387 { ArmISA::MISCREG_ATS12NSOPR
, "ATS12NSOPR" },
388 { ArmISA::MISCREG_ATS12NSOPW
, "ATS12NSOPW" },
389 { ArmISA::MISCREG_ATS12NSOUR
, "ATS12NSOUR" },
390 { ArmISA::MISCREG_ATS12NSOUW
, "ATS12NSOUW" },
391 { ArmISA::MISCREG_DCCMVAC
, "DCCMVAC" },
392 { ArmISA::MISCREG_DCCSW
, "DCCSW" },
393 // ArmISA::MISCREG_CP15DSB?
394 // ArmISA::MISCREG_CP15DMB?
395 { ArmISA::MISCREG_DCCMVAU
, "DCCMVAU" },
396 // ArmISA::MISCREG_DCCIMVAC?
397 { ArmISA::MISCREG_DCCISW
, "DCCISW" },
398 { ArmISA::MISCREG_ATS1HR
, "ATS1HR" },
399 { ArmISA::MISCREG_ATS1HW
, "ATS1HW" },
400 // ArmISA::MISCREG_TLBIALLIS?
401 // ArmISA::MISCREG_TLBIMVAIS?
402 // ArmISA::MISCREG_TLBIASIDIS?
403 // ArmISA::MISCREG_TLBIMVAAIS?
404 // ArmISA::MISCREG_TLBIMVALIS?
405 // ArmISA::MISCREG_TLBIMVAALIS?
406 // ArmISA::MISCREG_ITLBIALL?
407 // ArmISA::MISCREG_ITLBIMVA?
408 // ArmISA::MISCREG_ITLBIASID?
409 // ArmISA::MISCREG_DTLBIALL?
410 // ArmISA::MISCREG_DTLBIMVA?
411 // ArmISA::MISCREG_DTLBIASID?
412 // ArmISA::MISCREG_TLBIALL?
413 // ArmISA::MISCREG_TLBIMVA?
414 // ArmISA::MISCREG_TLBIASID?
415 // ArmISA::MISCREG_TLBIMVAA?
416 // ArmISA::MISCREG_TLBIMVAL?
417 // ArmISA::MISCREG_TLBIMVAAL?
418 // ArmISA::MISCREG_TLBIIPAS2IS?
419 // ArmISA::MISCREG_TLBIIPAS2LIS?
420 // ArmISA::MISCREG_TLBIALLHIS?
421 // ArmISA::MISCREG_TLBIMVAHIS?
422 // ArmISA::MISCREG_TLBIALLNSNHIS?
423 // ArmISA::MISCREG_TLBIMVALHIS?
424 // ArmISA::MISCREG_TLBIIPAS2?
425 // ArmISA::MISCREG_TLBIIPAS2L?
426 // ArmISA::MISCREG_TLBIALLH?
427 // ArmISA::MISCREG_TLBIMVAH?
428 // ArmISA::MISCREG_TLBIALLNSNH?
429 // ArmISA::MISCREG_TLBIMVALH?
430 { ArmISA::MISCREG_PMCR
, "PMCR" },
431 { ArmISA::MISCREG_PMCNTENSET
, "PMCNTENSET" },
432 { ArmISA::MISCREG_PMCNTENCLR
, "PMCNTENCLR" },
433 { ArmISA::MISCREG_PMOVSR
, "PMOVSR" },
434 { ArmISA::MISCREG_PMSWINC
, "PMSWINC" },
435 { ArmISA::MISCREG_PMSELR
, "PMSELR" },
436 { ArmISA::MISCREG_PMCEID0
, "PMCEID0" },
437 { ArmISA::MISCREG_PMCEID1
, "PMCEID1" },
438 { ArmISA::MISCREG_PMCCNTR
, "PMCCNTR" },
439 { ArmISA::MISCREG_PMXEVTYPER
, "PMXEVTYPER" },
440 { ArmISA::MISCREG_PMCCFILTR
, "PMCCFILTR" },
441 { ArmISA::MISCREG_PMXEVCNTR
, "PMXEVCNTR_EL0" }, //XXX verify
442 { ArmISA::MISCREG_PMUSERENR
, "PMUSERENR" },
443 { ArmISA::MISCREG_PMINTENSET
, "PMINTENSET" },
444 { ArmISA::MISCREG_PMINTENCLR
, "PMINTENCLR" },
445 { ArmISA::MISCREG_PMOVSSET
, "PMOVSSET" },
446 // ArmISA::MISCREG_L2CTLR?
447 // ArmISA::MISCREG_L2ECTLR?
448 // ArmISA::MISCREG_PRRR?
449 { ArmISA::MISCREG_PRRR_NS
, "NS_PRRR" }, //XXX verify
450 // ArmISA::MISCREG_PRRR_S?
451 // ArmISA::MISCREG_MAIR0?
452 // ArmISA::MISCREG_MAIR0_NS?
453 // ArmISA::MISCREG_MAIR0_S?
454 // ArmISA::MISCREG_NMRR?
455 { ArmISA::MISCREG_NMRR_NS
, "NS_NMRR" }, //XXX verify
456 // ArmISA::MISCREG_NMRR_S?
457 // ArmISA::MISCREG_MAIR1?
458 // ArmISA::MISCREG_MAIR1_NS?
459 // ArmISA::MISCREG_MAIR1_S?
460 // ArmISA::MISCREG_AMAIR0?
461 { ArmISA::MISCREG_AMAIR0_NS
, "NS_AMAIR0" }, //XXX verify
462 // ArmISA::MISCREG_AMAIR0_S?
463 // ArmISA::MISCREG_AMAIR1?
464 { ArmISA::MISCREG_AMAIR1_NS
, "NS_AMAIR1" }, //XXX verify
465 // ArmISA::MISCREG_AMAIR1_S?
466 { ArmISA::MISCREG_HMAIR0
, "HMAIR0" },
467 { ArmISA::MISCREG_HMAIR1
, "HMAIR1" },
468 { ArmISA::MISCREG_HAMAIR0
, "HAMAIR0" },
469 { ArmISA::MISCREG_HAMAIR1
, "HAMAIR1" },
470 // ArmISA::MISCREG_VBAR?
471 { ArmISA::MISCREG_VBAR_NS
, "NS_VBAR" }, //XXX verify
472 // ArmISA::MISCREG_VBAR_S?
473 { ArmISA::MISCREG_MVBAR
, "MVBAR" },
474 { ArmISA::MISCREG_RMR
, "RMR" },
475 { ArmISA::MISCREG_ISR
, "ISR" },
476 { ArmISA::MISCREG_HVBAR
, "HVBAR" },
477 { ArmISA::MISCREG_FCSEIDR
, "FCSEIDR" },
478 // ArmISA::MISCREG_CONTEXTIDR?
479 { ArmISA::MISCREG_CONTEXTIDR_NS
, "NS_CONTEXTIDR" }, //XXX verify
480 // ArmISA::MISCREG_CONTEXTIDR_S?
481 // ArmISA::MISCREG_TPIDRURW?
482 { ArmISA::MISCREG_TPIDRURW_NS
, "NS_TPIDRURW" }, //XXX verify
483 // ArmISA::MISCREG_TPIDRURW_S?
484 // ArmISA::MISCREG_TPIDRURO?
485 { ArmISA::MISCREG_TPIDRURO_NS
, "NS_TPIDRURO" }, //XXX verify
486 // ArmISA::MISCREG_TPIDRURO_S?
487 // ArmISA::MISCREG_TPIDRPRW?
488 { ArmISA::MISCREG_TPIDRPRW_NS
, "NS_TPIDRPRW" }, //XXX verify
489 /// ArmISA::MISCREG_TPIDRPRW_S?
490 { ArmISA::MISCREG_HTPIDR
, "HTPIDR" },
491 { ArmISA::MISCREG_CNTFRQ
, "CNTFRQ" },
492 { ArmISA::MISCREG_CNTKCTL
, "CNTKCTL" },
493 { ArmISA::MISCREG_CNTP_TVAL
, "CNTP_TVAL" },
494 // ArmISA::MISCREG_CNTP_TVAL_NS?
495 // ArmISA::MISCREG_CNTP_TVAL_S?
496 { ArmISA::MISCREG_CNTP_CTL
, "CNTP_CTL" },
497 // ArmISA::MISCREG_CNTP_CTL_NS?
498 // ArmISA::MISCREG_CNTP_CTL_S?
499 { ArmISA::MISCREG_CNTV_TVAL
, "CNTV_TVAL" },
500 { ArmISA::MISCREG_CNTV_CTL
, "CNTV_CTL" },
501 { ArmISA::MISCREG_CNTHCTL
, "CNTHCTL" },
502 { ArmISA::MISCREG_CNTHP_TVAL
, "CNTHP_TVAL" },
503 { ArmISA::MISCREG_CNTHP_CTL
, "CNTHP_CTL" },
504 // ArmISA::MISCREG_IL1DATA0?
505 // ArmISA::MISCREG_IL1DATA1?
506 // ArmISA::MISCREG_IL1DATA2?
507 // ArmISA::MISCREG_IL1DATA3?
508 // ArmISA::MISCREG_DL1DATA0?
509 // ArmISA::MISCREG_DL1DATA1?
510 // ArmISA::MISCREG_DL1DATA2?
511 // ArmISA::MISCREG_DL1DATA3?
512 // ArmISA::MISCREG_DL1DATA4?
513 { ArmISA::MISCREG_RAMINDEX
, "RAMIDX" }, //XXX verify
514 // ArmISA::MISCREG_L2ACTLR?
515 // ArmISA::MISCREG_CBAR?
516 { ArmISA::MISCREG_HTTBR
, "HTTBR" },
517 { ArmISA::MISCREG_VTTBR
, "VTTBR" },
518 { ArmISA::MISCREG_CNTPCT
, "CNTPCT" },
519 { ArmISA::MISCREG_CNTVCT
, "CNTVCT" },
520 { ArmISA::MISCREG_CNTP_CVAL
, "CNTP_CVAL" },
521 // ArmISA::MISCREG_CNTP_CVAL_NS?
522 // ArmISA::MISCREG_CNTP_CVAL_S?
523 { ArmISA::MISCREG_CNTV_CVAL
, "CNTV_CVAL" },
524 { ArmISA::MISCREG_CNTVOFF
, "CNTVOFF" },
525 { ArmISA::MISCREG_CNTHP_CVAL
, "CNTHP_CVAL" },
526 { ArmISA::MISCREG_CPUMERRSR
, "CPUMERRSR" },
527 { ArmISA::MISCREG_L2MERRSR
, "L2MERRSR" },
529 // AArch64 registers (Op0=2)
530 { ArmISA::MISCREG_MDCCINT_EL1
, "MDCCINT_EL1" },
531 { ArmISA::MISCREG_OSDTRRX_EL1
, "OSDTRRX_EL1" },
532 { ArmISA::MISCREG_MDSCR_EL1
, "MDSCR_EL1" },
533 { ArmISA::MISCREG_OSDTRTX_EL1
, "OSDTRTX_EL1" },
534 { ArmISA::MISCREG_OSECCR_EL1
, "OSECCR_EL1" },
535 { ArmISA::MISCREG_DBGBVR0_EL1
, "DBGBVR0_EL1" },
536 { ArmISA::MISCREG_DBGBVR1_EL1
, "DBGBVR1_EL1" },
537 { ArmISA::MISCREG_DBGBVR2_EL1
, "DBGBVR2_EL1" },
538 { ArmISA::MISCREG_DBGBVR3_EL1
, "DBGBVR3_EL1" },
539 { ArmISA::MISCREG_DBGBVR4_EL1
, "DBGBVR4_EL1" },
540 { ArmISA::MISCREG_DBGBVR5_EL1
, "DBGBVR5_EL1" },
541 { ArmISA::MISCREG_DBGBCR0_EL1
, "DBGBCR0_EL1" },
542 { ArmISA::MISCREG_DBGBCR1_EL1
, "DBGBCR1_EL1" },
543 { ArmISA::MISCREG_DBGBCR2_EL1
, "DBGBCR2_EL1" },
544 { ArmISA::MISCREG_DBGBCR3_EL1
, "DBGBCR3_EL1" },
545 { ArmISA::MISCREG_DBGBCR4_EL1
, "DBGBCR4_EL1" },
546 { ArmISA::MISCREG_DBGBCR5_EL1
, "DBGBCR5_EL1" },
547 { ArmISA::MISCREG_DBGWVR0_EL1
, "DBGWVR0_EL1" },
548 { ArmISA::MISCREG_DBGWVR1_EL1
, "DBGWVR1_EL1" },
549 { ArmISA::MISCREG_DBGWVR2_EL1
, "DBGWVR2_EL1" },
550 { ArmISA::MISCREG_DBGWVR3_EL1
, "DBGWVR3_EL1" },
551 { ArmISA::MISCREG_DBGWCR0_EL1
, "DBGWCR0_EL1" },
552 { ArmISA::MISCREG_DBGWCR1_EL1
, "DBGWCR1_EL1" },
553 { ArmISA::MISCREG_DBGWCR2_EL1
, "DBGWCR2_EL1" },
554 { ArmISA::MISCREG_DBGWCR3_EL1
, "DBGWCR3_EL1" },
555 { ArmISA::MISCREG_MDCCSR_EL0
, "MDCCSR_EL0" },
556 // ArmISA::MISCREG_MDDTR_EL0?
557 // ArmISA::MISCREG_MDDTRTX_EL0?
558 // ArmISA::MISCREG_MDDTRRX_EL0?
559 // ArmISA::MISCREG_DBGVCR32_EL2?
560 { ArmISA::MISCREG_MDRAR_EL1
, "MDRAR_EL1" },
561 { ArmISA::MISCREG_OSLAR_EL1
, "OSLAR_EL1" },
562 { ArmISA::MISCREG_OSLSR_EL1
, "OSLSR_EL1" },
563 { ArmISA::MISCREG_OSDLR_EL1
, "OSDLR_EL1" },
564 { ArmISA::MISCREG_DBGPRCR_EL1
, "DBGPRCR_EL1" },
565 { ArmISA::MISCREG_DBGCLAIMSET_EL1
, "DBGCLAIMSET_EL1" },
566 { ArmISA::MISCREG_DBGCLAIMCLR_EL1
, "DBGCLAIMCLR_EL1" },
567 { ArmISA::MISCREG_DBGAUTHSTATUS_EL1
, "DBGAUTHSTATUS_EL1" },
568 // ArmISA::MISCREG_TEECR32_EL1? not in ARM DDI 0487A.b+
569 // ArmISA::MISCREG_TEEHBR32_EL1? not in ARM DDI 0487A.b+
571 // AArch64 registers (Op0=1)
572 { ArmISA::MISCREG_MIDR_EL1
, "MIDR_EL1" },
573 { ArmISA::MISCREG_MPIDR_EL1
, "MPIDR_EL1" },
574 { ArmISA::MISCREG_REVIDR_EL1
, "REVIDR_EL1" },
575 { ArmISA::MISCREG_ID_PFR0_EL1
, "ID_PFR0_EL1" },
576 { ArmISA::MISCREG_ID_PFR1_EL1
, "ID_PFR1_EL1" },
577 { ArmISA::MISCREG_ID_DFR0_EL1
, "ID_DFR0_EL1" },
578 { ArmISA::MISCREG_ID_AFR0_EL1
, "ID_AFR0_EL1" },
579 { ArmISA::MISCREG_ID_MMFR0_EL1
, "ID_MMFR0_EL1" },
580 { ArmISA::MISCREG_ID_MMFR1_EL1
, "ID_MMFR1_EL1" },
581 { ArmISA::MISCREG_ID_MMFR2_EL1
, "ID_MMFR2_EL1" },
582 { ArmISA::MISCREG_ID_MMFR3_EL1
, "ID_MMFR3_EL1" },
583 { ArmISA::MISCREG_ID_ISAR0_EL1
, "ID_ISAR0_EL1" },
584 { ArmISA::MISCREG_ID_ISAR1_EL1
, "ID_ISAR1_EL1" },
585 { ArmISA::MISCREG_ID_ISAR2_EL1
, "ID_ISAR2_EL1" },
586 { ArmISA::MISCREG_ID_ISAR3_EL1
, "ID_ISAR3_EL1" },
587 { ArmISA::MISCREG_ID_ISAR4_EL1
, "ID_ISAR4_EL1" },
588 { ArmISA::MISCREG_ID_ISAR5_EL1
, "ID_ISAR5_EL1" },
589 { ArmISA::MISCREG_MVFR0_EL1
, "MVFR0_EL1" },
590 { ArmISA::MISCREG_MVFR1_EL1
, "MVFR1_EL1" },
591 { ArmISA::MISCREG_MVFR2_EL1
, "MVFR2_EL1" },
592 { ArmISA::MISCREG_ID_AA64PFR0_EL1
, "ID_AA64PFR0_EL1" },
593 { ArmISA::MISCREG_ID_AA64PFR1_EL1
, "ID_AA64PFR1_EL1" },
594 { ArmISA::MISCREG_ID_AA64DFR0_EL1
, "ID_AA64DFR0_EL1" },
595 { ArmISA::MISCREG_ID_AA64DFR1_EL1
, "ID_AA64DFR1_EL1" },
596 { ArmISA::MISCREG_ID_AA64AFR0_EL1
, "ID_AA64AFR0_EL1" },
597 { ArmISA::MISCREG_ID_AA64AFR1_EL1
, "ID_AA64AFR1_EL1" },
598 { ArmISA::MISCREG_ID_AA64ISAR0_EL1
, "ID_AA64ISAR0_EL1" },
599 { ArmISA::MISCREG_ID_AA64ISAR1_EL1
, "ID_AA64ISAR1_EL1" },
600 { ArmISA::MISCREG_ID_AA64MMFR0_EL1
, "ID_AA64MMFR0_EL1" },
601 { ArmISA::MISCREG_ID_AA64MMFR1_EL1
, "ID_AA64MMFR1_EL1" },
602 { ArmISA::MISCREG_CCSIDR_EL1
, "CCSIDR_EL1" },
603 { ArmISA::MISCREG_CLIDR_EL1
, "CLIDR_EL1" },
604 { ArmISA::MISCREG_AIDR_EL1
, "AIDR_EL1" },
605 { ArmISA::MISCREG_CSSELR_EL1
, "CSSELR_EL1" },
606 { ArmISA::MISCREG_CTR_EL0
, "CTR_EL0" },
607 { ArmISA::MISCREG_DCZID_EL0
, "DCZID_EL0" },
608 { ArmISA::MISCREG_VPIDR_EL2
, "VPIDR_EL2" },
609 { ArmISA::MISCREG_VMPIDR_EL2
, "VMPIDR_EL2" },
610 { ArmISA::MISCREG_SCTLR_EL1
, "SCTLR_EL1" },
611 { ArmISA::MISCREG_ACTLR_EL1
, "ACTLR_EL1" },
612 { ArmISA::MISCREG_CPACR_EL1
, "CPACR_EL1" },
613 { ArmISA::MISCREG_SCTLR_EL2
, "SCTLR_EL2" },
614 { ArmISA::MISCREG_ACTLR_EL2
, "ACTLR_EL2" },
615 { ArmISA::MISCREG_HCR_EL2
, "HCR_EL2" },
616 { ArmISA::MISCREG_MDCR_EL2
, "MDCR_EL2" },
617 { ArmISA::MISCREG_CPTR_EL2
, "CPTR_EL2" },
618 { ArmISA::MISCREG_HSTR_EL2
, "HSTR_EL2" },
619 { ArmISA::MISCREG_HACR_EL2
, "HACR_EL2" },
620 { ArmISA::MISCREG_SCTLR_EL3
, "SCTLR_EL3" },
621 { ArmISA::MISCREG_ACTLR_EL3
, "ACTLR_EL3" },
622 { ArmISA::MISCREG_SCR_EL3
, "SCR_EL3" },
623 // ArmISA::MISCREG_SDER32_EL3?
624 { ArmISA::MISCREG_CPTR_EL3
, "CPTR_EL3" },
625 { ArmISA::MISCREG_MDCR_EL3
, "MDCR_EL3" },
626 { ArmISA::MISCREG_TTBR0_EL1
, "TTBR0_EL1" },
627 { ArmISA::MISCREG_TTBR1_EL1
, "TTBR1_EL1" },
628 { ArmISA::MISCREG_TCR_EL1
, "TCR_EL1" },
629 { ArmISA::MISCREG_TTBR0_EL2
, "TTBR0_EL2" },
630 { ArmISA::MISCREG_TCR_EL2
, "TCR_EL2" },
631 { ArmISA::MISCREG_VTTBR_EL2
, "VTTBR_EL2" },
632 { ArmISA::MISCREG_VTCR_EL2
, "VTCR_EL2" },
633 { ArmISA::MISCREG_TTBR0_EL3
, "TTBR0_EL3" },
634 { ArmISA::MISCREG_TCR_EL3
, "TCR_EL3" },
635 // ArmISA::MISCREG_DACR32_EL2?
636 { ArmISA::MISCREG_SPSR_EL1
, "SPSR_EL1" },
637 { ArmISA::MISCREG_ELR_EL1
, "ELR_EL1" },
638 { ArmISA::MISCREG_SP_EL0
, "SP_EL0" },
639 // ArmISA::MISCREG_SPSEL?
640 // ArmISA::MISCREG_CURRENTEL?
641 // ArmISA::MISCREG_NZCV?
642 // ArmISA::MISCREG_DAIF?
643 { ArmISA::MISCREG_FPCR
, "FPCR" },
644 { ArmISA::MISCREG_FPSR
, "FPSR" },
645 { ArmISA::MISCREG_DSPSR_EL0
, "DSPSR_EL0" },
646 { ArmISA::MISCREG_DLR_EL0
, "DLR_EL0" },
647 { ArmISA::MISCREG_SPSR_EL2
, "SPSR_EL2" },
648 { ArmISA::MISCREG_ELR_EL2
, "ELR_EL2" },
649 { ArmISA::MISCREG_SP_EL1
, "SP_EL1" },
650 // ArmISA::MISCREG_SPSR_IRQ_AA64?
651 // ArmISA::MISCREG_SPSR_ABT_AA64?
652 // ArmISA::MISCREG_SPSR_UND_AA64?
653 // ArmISA::MISCREG_SPSR_FIQ_AA64?
654 { ArmISA::MISCREG_SPSR_EL3
, "SPSR_EL3" },
655 { ArmISA::MISCREG_ELR_EL3
, "ELR_EL3" },
656 { ArmISA::MISCREG_SP_EL2
, "SP_EL2" },
657 { ArmISA::MISCREG_AFSR0_EL1
, "AFSR0_EL1" },
658 { ArmISA::MISCREG_AFSR1_EL1
, "AFSR1_EL1" },
659 { ArmISA::MISCREG_ESR_EL1
, "ESR_EL1" },
660 // ArmISA::MISCREG_IFSR32_EL2?
661 { ArmISA::MISCREG_AFSR0_EL2
, "AFSR0_EL2" },
662 { ArmISA::MISCREG_AFSR1_EL2
, "AFSR1_EL2" },
663 { ArmISA::MISCREG_ESR_EL2
, "ESR_EL2" },
664 // ArmISA::MISCREG_FPEXC32_EL2?
665 { ArmISA::MISCREG_AFSR0_EL3
, "AFSR0_EL3" },
666 { ArmISA::MISCREG_AFSR1_EL3
, "AFSR1_EL3" },
667 { ArmISA::MISCREG_ESR_EL3
, "ESR_EL3" },
668 { ArmISA::MISCREG_FAR_EL1
, "FAR_EL1" },
669 { ArmISA::MISCREG_FAR_EL2
, "FAR_EL2" },
670 { ArmISA::MISCREG_HPFAR_EL2
, "HPFAR_EL2" },
671 { ArmISA::MISCREG_FAR_EL3
, "FAR_EL3" },
672 { ArmISA::MISCREG_IC_IALLUIS
, "IC IALLUIS" },
673 { ArmISA::MISCREG_PAR_EL1
, "PAR_EL1" },
674 { ArmISA::MISCREG_IC_IALLU
, "IC IALLU" },
675 { ArmISA::MISCREG_DC_IVAC_Xt
, "DC IVAC" }, //XXX verify
676 { ArmISA::MISCREG_DC_ISW_Xt
, "DC ISW" }, //XXX verify
677 { ArmISA::MISCREG_AT_S1E1R_Xt
, "AT S1E1R" }, //XXX verify
678 { ArmISA::MISCREG_AT_S1E1W_Xt
, "AT S1E1W" }, //XXX verify
679 { ArmISA::MISCREG_AT_S1E0R_Xt
, "AT S1E0R" }, //XXX verify
680 { ArmISA::MISCREG_AT_S1E0W_Xt
, "AT S1E0W" }, //XXX verify
681 { ArmISA::MISCREG_DC_CSW_Xt
, "DC CSW" }, //XXX verify
682 { ArmISA::MISCREG_DC_CISW_Xt
, "DC CISW" }, //XXX verify
683 { ArmISA::MISCREG_DC_ZVA_Xt
, "DC ZVA" }, //XXX verify
684 { ArmISA::MISCREG_IC_IVAU_Xt
, "IC IVAU" }, //XXX verify
685 { ArmISA::MISCREG_DC_CVAC_Xt
, "DC CVAC" }, //XXX verify
686 { ArmISA::MISCREG_DC_CVAU_Xt
, "DC CVAU" }, //XXX verify
687 { ArmISA::MISCREG_DC_CIVAC_Xt
, "DC CIVAC" }, //XXX verify
688 { ArmISA::MISCREG_AT_S1E2R_Xt
, "AT S1E2R" }, //XXX verify
689 { ArmISA::MISCREG_AT_S1E2W_Xt
, "AT S1E2W" }, //XXX verify
690 { ArmISA::MISCREG_AT_S12E1R_Xt
, "AT S12E1R" }, //XXX verify
691 { ArmISA::MISCREG_AT_S12E1W_Xt
, "AT S12E1W" }, //XXX verify
692 { ArmISA::MISCREG_AT_S12E0R_Xt
, "AT S12E0R" }, //XXX verify
693 { ArmISA::MISCREG_AT_S12E0W_Xt
, "AT S12E0W" }, //XXX verify
694 { ArmISA::MISCREG_AT_S1E3R_Xt
, "AT S1E3R" }, //XXX verify
695 { ArmISA::MISCREG_AT_S1E3W_Xt
, "AT S1E3W" }, //XXX verify
696 { ArmISA::MISCREG_TLBI_VMALLE1IS
, "TLBI VMALLE1IS" },
697 { ArmISA::MISCREG_TLBI_VAE1IS_Xt
, "TLBI VAE1IS" }, //XXX verify
698 { ArmISA::MISCREG_TLBI_ASIDE1IS_Xt
, "TLBI ASIDE1IS" }, //XXX verify
699 { ArmISA::MISCREG_TLBI_VAAE1IS_Xt
, "TLBI VAAE1IS" }, //XXX verify
700 { ArmISA::MISCREG_TLBI_VALE1IS_Xt
, "TLBI VALE1IS" }, //XXX verify
701 { ArmISA::MISCREG_TLBI_VAALE1IS_Xt
, "TLBI VAALE1IS" }, //XXX verify
702 { ArmISA::MISCREG_TLBI_VMALLE1
, "TLBI VMALLE1" },
703 { ArmISA::MISCREG_TLBI_VAE1_Xt
, "TLBI VAE1" }, //XXX verify
704 { ArmISA::MISCREG_TLBI_ASIDE1_Xt
, "TLBI ASIDE1" }, //XXX verify
705 { ArmISA::MISCREG_TLBI_VAAE1_Xt
, "TLBI VAAE1" }, //XXX verify
706 { ArmISA::MISCREG_TLBI_VALE1_Xt
, "TLBI VALE1" }, //XXX verify
707 { ArmISA::MISCREG_TLBI_VAALE1_Xt
, "TLBI VAALE1" }, //XXX verify
708 { ArmISA::MISCREG_TLBI_IPAS2E1IS_Xt
, "TLBI IPAS2E1IS" }, //XXX verify
709 { ArmISA::MISCREG_TLBI_IPAS2LE1IS_Xt
, "TLBI IPAS2LE1IS" }, //XXX verify
710 { ArmISA::MISCREG_TLBI_ALLE2IS
, "TLBI ALLE2IS" },
711 { ArmISA::MISCREG_TLBI_VAE2IS_Xt
, "TLBI VAE2IS" }, //XXX verify
712 { ArmISA::MISCREG_TLBI_ALLE1IS
, "TLBI ALLE1IS" },
713 { ArmISA::MISCREG_TLBI_VALE2IS_Xt
, "TLBI VALE2IS" }, //XXX verify
714 { ArmISA::MISCREG_TLBI_VMALLS12E1IS
, "TLBI VMALLS12E1IS" },
715 { ArmISA::MISCREG_TLBI_IPAS2E1_Xt
, "TLBI IPAS2E1" }, //XXX verify
716 { ArmISA::MISCREG_TLBI_IPAS2LE1_Xt
, "TLBI IPAS2LE1" }, //XXX verify
717 { ArmISA::MISCREG_TLBI_ALLE2
, "TLBI ALLE2" },
718 { ArmISA::MISCREG_TLBI_VAE2_Xt
, "TLBI VAE2" }, //XXX verify
719 { ArmISA::MISCREG_TLBI_ALLE1
, "TLBI ALLE1" },
720 { ArmISA::MISCREG_TLBI_VALE2_Xt
, "TLBI VALE2" }, //XXX verify
721 { ArmISA::MISCREG_TLBI_VMALLS12E1
, "TLBI VMALLS12E1" },
722 { ArmISA::MISCREG_TLBI_ALLE3IS
, "TLBI ALLE3IS" },
723 { ArmISA::MISCREG_TLBI_VAE3IS_Xt
, "TLBI VAE3IS" }, //XXX verify
724 { ArmISA::MISCREG_TLBI_VALE3IS_Xt
, "TLBI VALE3IS" }, //XXX verify
725 { ArmISA::MISCREG_TLBI_ALLE3
, "TLBI ALLE3" },
726 { ArmISA::MISCREG_TLBI_VAE3_Xt
, "TLBI VAE3" }, //XXX verify
727 { ArmISA::MISCREG_TLBI_VALE3_Xt
, "TLBI VALE3" }, //XXX verify
728 { ArmISA::MISCREG_PMINTENSET_EL1
, "PMINTENSET_EL1" },
729 { ArmISA::MISCREG_PMINTENCLR_EL1
, "PMINTENCLR_EL1" },
730 { ArmISA::MISCREG_PMCR_EL0
, "PMCR_EL0" },
731 { ArmISA::MISCREG_PMCNTENSET_EL0
, "PMCNTENSET_EL0" },
732 { ArmISA::MISCREG_PMCNTENCLR_EL0
, "PMCNTENCLR_EL0" },
733 { ArmISA::MISCREG_PMOVSCLR_EL0
, "PMOVSCLR_EL0" },
734 { ArmISA::MISCREG_PMSWINC_EL0
, "PMSWINC_EL0" },
735 { ArmISA::MISCREG_PMSELR_EL0
, "PMSELR_EL0" },
736 { ArmISA::MISCREG_PMCEID0_EL0
, "PMCEID0_EL0" },
737 { ArmISA::MISCREG_PMCEID1_EL0
, "PMCEID1_EL0" },
738 { ArmISA::MISCREG_PMCCNTR_EL0
, "PMCCNTR_EL0" },
739 { ArmISA::MISCREG_PMXEVTYPER_EL0
, "PMXEVTYPER_EL0" },
740 { ArmISA::MISCREG_PMCCFILTR_EL0
, "PMCCFILTR_EL0" },
741 { ArmISA::MISCREG_PMXEVCNTR_EL0
, "PMXEVCNTR_EL0" },
742 { ArmISA::MISCREG_PMUSERENR_EL0
, "PMUSERENR_EL0" },
743 { ArmISA::MISCREG_PMOVSSET_EL0
, "PMOVSSET_EL0" },
744 { ArmISA::MISCREG_MAIR_EL1
, "MAIR_EL1" },
745 { ArmISA::MISCREG_AMAIR_EL1
, "AMAIR_EL1" },
746 { ArmISA::MISCREG_MAIR_EL2
, "MAIR_EL2" },
747 { ArmISA::MISCREG_AMAIR_EL2
, "AMAIR_EL2" },
748 { ArmISA::MISCREG_MAIR_EL3
, "MAIR_EL3" },
749 { ArmISA::MISCREG_AMAIR_EL3
, "AMAIR_EL3" },
750 // ArmISA::MISCREG_L2CTLR_EL1?
751 // ArmISA::MISCREG_L2ECTLR_EL1?
752 { ArmISA::MISCREG_VBAR_EL1
, "VBAR_EL1" },
753 // ArmISA::MISCREG_RVBAR_EL1?
754 { ArmISA::MISCREG_ISR_EL1
, "ISR_EL1" },
755 { ArmISA::MISCREG_VBAR_EL2
, "VBAR_EL2" },
756 // ArmISA::MISCREG_RVBAR_EL2?
757 { ArmISA::MISCREG_VBAR_EL3
, "VBAR_EL3" },
758 { ArmISA::MISCREG_RVBAR_EL3
, "RVBAR_EL3" },
759 { ArmISA::MISCREG_RMR_EL3
, "RMR_EL3" },
760 { ArmISA::MISCREG_CONTEXTIDR_EL1
, "CONTEXTIDR_EL1" },
761 { ArmISA::MISCREG_TPIDR_EL1
, "TPIDR_EL1" },
762 { ArmISA::MISCREG_TPIDR_EL0
, "TPIDR_EL0" },
763 { ArmISA::MISCREG_TPIDRRO_EL0
, "TPIDRRO_EL0" },
764 { ArmISA::MISCREG_TPIDR_EL2
, "TPIDR_EL2" },
765 { ArmISA::MISCREG_TPIDR_EL3
, "TPIDR_EL3" },
766 { ArmISA::MISCREG_CNTKCTL_EL1
, "CNTKCTL_EL1" },
767 { ArmISA::MISCREG_CNTFRQ_EL0
, "CNTFRQ_EL0" },
768 { ArmISA::MISCREG_CNTPCT_EL0
, "CNTPCT_EL0" },
769 { ArmISA::MISCREG_CNTVCT_EL0
, "CNTVCT_EL0" },
770 { ArmISA::MISCREG_CNTP_TVAL_EL0
, "CNTP_TVAL_EL0" },
771 { ArmISA::MISCREG_CNTP_CTL_EL0
, "CNTP_CTL_EL0" },
772 { ArmISA::MISCREG_CNTP_CVAL_EL0
, "CNTP_CVAL_EL0" },
773 { ArmISA::MISCREG_CNTV_TVAL_EL0
, "CNTV_TVAL_EL0" },
774 { ArmISA::MISCREG_CNTV_CTL_EL0
, "CNTV_CTL_EL0" },
775 { ArmISA::MISCREG_CNTV_CVAL_EL0
, "CNTV_CVAL_EL0" },
776 { ArmISA::MISCREG_PMEVCNTR0_EL0
, "PMEVCNTR0_EL0" },
777 { ArmISA::MISCREG_PMEVCNTR1_EL0
, "PMEVCNTR1_EL0" },
778 { ArmISA::MISCREG_PMEVCNTR2_EL0
, "PMEVCNTR2_EL0" },
779 { ArmISA::MISCREG_PMEVCNTR3_EL0
, "PMEVCNTR3_EL0" },
780 { ArmISA::MISCREG_PMEVCNTR4_EL0
, "PMEVCNTR4_EL0" },
781 { ArmISA::MISCREG_PMEVCNTR5_EL0
, "PMEVCNTR5_EL0" },
782 { ArmISA::MISCREG_PMEVTYPER0_EL0
, "PMEVTYPER0_EL0" },
783 { ArmISA::MISCREG_PMEVTYPER1_EL0
, "PMEVTYPER1_EL0" },
784 { ArmISA::MISCREG_PMEVTYPER2_EL0
, "PMEVTYPER2_EL0" },
785 { ArmISA::MISCREG_PMEVTYPER3_EL0
, "PMEVTYPER3_EL0" },
786 { ArmISA::MISCREG_PMEVTYPER4_EL0
, "PMEVTYPER4_EL0" },
787 { ArmISA::MISCREG_PMEVTYPER5_EL0
, "PMEVTYPER5_EL0" },
788 { ArmISA::MISCREG_CNTVOFF_EL2
, "CNTVOFF_EL2" },
789 { ArmISA::MISCREG_CNTHCTL_EL2
, "CNTHCTL_EL2" },
790 { ArmISA::MISCREG_CNTHP_TVAL_EL2
, "CNTHP_TVAL_EL2" },
791 { ArmISA::MISCREG_CNTHP_CTL_EL2
, "CNTHP_CTL_EL2" },
792 { ArmISA::MISCREG_CNTHP_CVAL_EL2
, "CNTHP_CVAL_EL2" },
793 { ArmISA::MISCREG_CNTPS_TVAL_EL1
, "CNTPS_TVAL_EL1" },
794 { ArmISA::MISCREG_CNTPS_CTL_EL1
, "CNTPS_CTL_EL1" },
795 { ArmISA::MISCREG_CNTPS_CVAL_EL1
, "CNTPS_CVAL_EL1" },
796 // ArmISA::MISCREG_IL1DATA0_EL1?
797 // ArmISA::MISCREG_IL1DATA1_EL1?
798 // ArmISA::MISCREG_IL1DATA2_EL1?
799 // ArmISA::MISCREG_IL1DATA3_EL1?
800 // ArmISA::MISCREG_DL1DATA0_EL1?
801 // ArmISA::MISCREG_DL1DATA1_EL1?
802 // ArmISA::MISCREG_DL1DATA2_EL1?
803 // ArmISA::MISCREG_DL1DATA3_EL1?
804 // ArmISA::MISCREG_DL1DATA4_EL1?
805 // ArmISA::MISCREG_L2ACTLR_EL1?
806 { ArmISA::MISCREG_CPUACTLR_EL1
, "CPUACTLR_EL1" },
807 { ArmISA::MISCREG_CPUECTLR_EL1
, "CPUECTLR_EL1" },
808 { ArmISA::MISCREG_CPUMERRSR_EL1
, "CPUMERRSR_EL1" },
809 { ArmISA::MISCREG_L2MERRSR_EL1
, "L2MERRSR_EL1" },
810 // ArmISA::MISCREG_CBAR_EL1?
811 { ArmISA::MISCREG_CONTEXTIDR_EL2
, "CONTEXTIDR_EL2" },
813 // Introduced in ARMv8.1
814 { ArmISA::MISCREG_TTBR1_EL2
, "TTBR1_EL2" },
815 { ArmISA::MISCREG_CNTHV_CTL_EL2
, "CNTHV_CTL_EL2" },
816 { ArmISA::MISCREG_CNTHV_CVAL_EL2
, "CNTHV_CVAL_EL2" },
817 { ArmISA::MISCREG_CNTHV_TVAL_EL2
, "CNTHV_TVAL_EL2" },
819 // RAS extension (unimplemented)
820 { ArmISA::MISCREG_ERRIDR_EL1
, "ERRIDR_EL1" },
821 { ArmISA::MISCREG_ERRSELR_EL1
, "ERRSELR_EL1" },
822 { ArmISA::MISCREG_ERXFR_EL1
, "ERXFR_EL1" },
823 { ArmISA::MISCREG_ERXCTLR_EL1
, "ERXCTLR_EL1" },
824 { ArmISA::MISCREG_ERXSTATUS_EL1
, "ERXSTATUS_EL1" },
825 { ArmISA::MISCREG_ERXADDR_EL1
, "ERXADDR_EL1" },
826 { ArmISA::MISCREG_ERXMISC0_EL1
, "ERXMISC0_EL1" },
827 { ArmISA::MISCREG_ERXMISC1_EL1
, "ERXMISC1_EL1" },
828 { ArmISA::MISCREG_DISR_EL1
, "DISR_EL1" },
829 { ArmISA::MISCREG_VSESR_EL2
, "VSESR_EL2" },
830 { ArmISA::MISCREG_VDISR_EL2
, "VDISR_EL2" }
833 Iris::ThreadContext::IdxNameMap
CortexA76TC::intReg32IdxNameMap({
834 { ArmISA::INTREG_R0
, "R0" },
835 { ArmISA::INTREG_R1
, "R1" },
836 { ArmISA::INTREG_R2
, "R2" },
837 { ArmISA::INTREG_R3
, "R3" },
838 { ArmISA::INTREG_R4
, "R4" },
839 { ArmISA::INTREG_R5
, "R5" },
840 { ArmISA::INTREG_R6
, "R6" },
841 { ArmISA::INTREG_R7
, "R7" },
842 { ArmISA::INTREG_R8
, "R8" },
843 { ArmISA::INTREG_R9
, "R9" },
844 { ArmISA::INTREG_R10
, "R10" },
845 { ArmISA::INTREG_R11
, "R11" },
846 { ArmISA::INTREG_R12
, "R12" },
847 { ArmISA::INTREG_R13
, "R13" },
848 { ArmISA::INTREG_R14
, "R14" },
849 { ArmISA::INTREG_R15
, "R15" }
852 Iris::ThreadContext::IdxNameMap
CortexA76TC::intReg64IdxNameMap({
853 { ArmISA::INTREG_X0
, "X0" },
854 { ArmISA::INTREG_X1
, "X1" },
855 { ArmISA::INTREG_X2
, "X2" },
856 { ArmISA::INTREG_X3
, "X3" },
857 { ArmISA::INTREG_X4
, "X4" },
858 { ArmISA::INTREG_X5
, "X5" },
859 { ArmISA::INTREG_X6
, "X6" },
860 { ArmISA::INTREG_X7
, "X7" },
861 { ArmISA::INTREG_X8
, "X8" },
862 { ArmISA::INTREG_X9
, "X9" },
863 { ArmISA::INTREG_X10
, "X10" },
864 { ArmISA::INTREG_X11
, "X11" },
865 { ArmISA::INTREG_X12
, "X12" },
866 { ArmISA::INTREG_X13
, "X13" },
867 { ArmISA::INTREG_X14
, "X14" },
868 { ArmISA::INTREG_X15
, "X15" },
869 { ArmISA::INTREG_X16
, "X16" },
870 { ArmISA::INTREG_X17
, "X17" },
871 { ArmISA::INTREG_X18
, "X18" },
872 { ArmISA::INTREG_X19
, "X19" },
873 { ArmISA::INTREG_X20
, "X20" },
874 { ArmISA::INTREG_X21
, "X21" },
875 { ArmISA::INTREG_X22
, "X22" },
876 { ArmISA::INTREG_X23
, "X23" },
877 { ArmISA::INTREG_X24
, "X24" },
878 { ArmISA::INTREG_X25
, "X25" },
879 { ArmISA::INTREG_X26
, "X26" },
880 { ArmISA::INTREG_X27
, "X27" },
881 { ArmISA::INTREG_X28
, "X28" },
882 { ArmISA::INTREG_X29
, "X29" },
883 { ArmISA::INTREG_X30
, "X30" },
884 { ArmISA::INTREG_SPX
, "SP" },
887 Iris::ThreadContext::IdxNameMap
CortexA76TC::flattenedIntIdxNameMap({
888 { ArmISA::INTREG_R0
, "X0" },
889 { ArmISA::INTREG_R1
, "X1" },
890 { ArmISA::INTREG_R2
, "X2" },
891 { ArmISA::INTREG_R3
, "X3" },
892 { ArmISA::INTREG_R4
, "X4" },
893 { ArmISA::INTREG_R5
, "X5" },
894 { ArmISA::INTREG_R6
, "X6" },
895 { ArmISA::INTREG_R7
, "X7" },
896 { ArmISA::INTREG_R8
, "X8" },
897 { ArmISA::INTREG_R9
, "X9" },
898 { ArmISA::INTREG_R10
, "X10" },
899 { ArmISA::INTREG_R11
, "X11" },
900 { ArmISA::INTREG_R12
, "X12" },
901 { ArmISA::INTREG_R13
, "X13" },
902 { ArmISA::INTREG_R14
, "X14" },
904 { ArmISA::INTREG_R13_SVC
, "X19" },
905 { ArmISA::INTREG_R14_SVC
, "X18" },
906 { ArmISA::INTREG_R13_MON
, "R13" }, // Need to be in monitor mode?
907 { ArmISA::INTREG_R14_MON
, "R14" }, // Need to be in monitor mode?
908 { ArmISA::INTREG_R13_HYP
, "X15" },
909 { ArmISA::INTREG_R13_ABT
, "X21" },
910 { ArmISA::INTREG_R14_ABT
, "X20" },
911 { ArmISA::INTREG_R13_UND
, "X23" },
912 { ArmISA::INTREG_R14_UND
, "X22" },
913 { ArmISA::INTREG_R13_IRQ
, "X17" },
914 { ArmISA::INTREG_R14_IRQ
, "X16" },
915 { ArmISA::INTREG_R8_FIQ
, "X24" },
916 { ArmISA::INTREG_R9_FIQ
, "X25" },
917 { ArmISA::INTREG_R10_FIQ
, "X26" },
918 { ArmISA::INTREG_R11_FIQ
, "X27" },
919 { ArmISA::INTREG_R12_FIQ
, "X28" },
920 { ArmISA::INTREG_R13_FIQ
, "X29" },
921 { ArmISA::INTREG_R14_FIQ
, "X30" },
922 // Skip zero, ureg0-2, and dummy regs.
923 { INTREG_SP0
, "SP_EL0" },
924 { INTREG_SP1
, "SP_EL1" },
925 { INTREG_SP2
, "SP_EL2" },
926 { INTREG_SP3
, "SP_EL3" },
929 Iris::ThreadContext::IdxNameMap
CortexA76TC::ccRegIdxNameMap({
930 { ArmISA::CCREG_NZ
, "CPSR" },
931 { ArmISA::CCREG_C
, "CPSR.C" },
932 { ArmISA::CCREG_V
, "CPSR.V" },
933 { ArmISA::CCREG_GE
, "CPSR.GE" },
934 { ArmISA::CCREG_FP
, "FPSCR" },
937 Iris::ThreadContext::IdxNameMap
CortexA76TC::vecRegIdxNameMap({
938 { 0, "V0" }, { 1, "V1" }, { 2, "V2" }, { 3, "V3" },
939 { 4, "V4" }, { 5, "V5" }, { 6, "V6" }, { 7, "V7" },
940 { 8, "V8" }, { 9, "V9" }, { 10, "V10" }, { 11, "V11" },
941 { 12, "V12" }, { 13, "V13" }, { 14, "V14" }, { 15, "V15" },
942 { 16, "V16" }, { 17, "V17" }, { 18, "V18" }, { 19, "V19" },
943 { 20, "V20" }, { 21, "V21" }, { 22, "V22" }, { 23, "V23" },
944 { 24, "V24" }, { 25, "V25" }, { 26, "V26" }, { 27, "V27" },
945 { 28, "V28" }, { 29, "V29" }, { 30, "V30" }, { 31, "V31" }
948 iris::MemorySpaceId
CortexA76TC::bpSpaceId
= iris::IRIS_UINT64_MAX
;
950 } // namespace FastModel