gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
isa.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2023 Arm Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #include "arch/arm/isa.hh"
39 
40 #include "arch/arm/decoder.hh"
41 #include "arch/arm/faults.hh"
42 #include "arch/arm/htm.hh"
43 #include "arch/arm/interrupts.hh"
44 #include "arch/arm/mmu.hh"
45 #include "arch/arm/pmu.hh"
46 #include "arch/arm/regs/misc.hh"
47 #include "arch/arm/self_debug.hh"
48 #include "arch/arm/system.hh"
49 #include "arch/arm/utility.hh"
50 #include "arch/generic/decoder.hh"
51 #include "base/cprintf.hh"
52 #include "base/random.hh"
53 #include "cpu/base.hh"
54 #include "cpu/checker/cpu.hh"
55 #include "cpu/reg_class.hh"
56 #include "debug/Arm.hh"
57 #include "debug/LLSC.hh"
58 #include "debug/MatRegs.hh"
59 #include "debug/VecPredRegs.hh"
60 #include "debug/VecRegs.hh"
61 #include "dev/arm/generic_timer.hh"
62 #include "dev/arm/gic_v3.hh"
64 #include "params/ArmISA.hh"
65 #include "sim/faults.hh"
66 #include "sim/stat_control.hh"
67 #include "sim/system.hh"
68 
69 namespace gem5
70 {
71 
72 namespace ArmISA
73 {
74 
75 namespace
76 {
77 
78 /* Not applicable to ARM */
79 RegClass floatRegClass(FloatRegClass, FloatRegClassName, 0, debug::FloatRegs);
80 
81 } // anonymous namespace
82 
83 ISA::ISA(const Params &p) : BaseISA(p), system(NULL),
84  _decoderFlavor(p.decoderFlavor), pmu(p.pmu), impdefAsNop(p.impdef_nop)
85 {
86  _regClasses.push_back(&flatIntRegClass);
87  _regClasses.push_back(&floatRegClass);
88  _regClasses.push_back(&vecRegClass);
89  _regClasses.push_back(&vecElemClass);
90  _regClasses.push_back(&vecPredRegClass);
91  _regClasses.push_back(&matRegClass);
92  _regClasses.push_back(&ccRegClass);
93  _regClasses.push_back(&miscRegClass);
94 
95  // Hook up a dummy device if we haven't been configured with a
96  // real PMU. By using a dummy device, we don't need to check that
97  // the PMU exist every time we try to access a PMU register.
98  if (!pmu)
99  pmu = &dummyDevice;
100 
101  // Give all ISA devices a pointer to this ISA
102  pmu->setISA(this);
103 
104  system = dynamic_cast<ArmSystem *>(p.system);
105 
106  // Cache system-level properties
107  if (FullSystem && system) {
111  sveVL = system->sveVL();
112  smeVL = system->smeVL();
113 
114  release = system->releaseFS();
115  } else {
116  highestELIs64 = true; // ArmSystem::highestELIs64 does the same
117  haveLargeAsid64 = false;
118  physAddrRange = 32; // dummy value
119  sveVL = p.sve_vl_se;
120  smeVL = p.sme_vl_se;
121 
122  release = p.release_se;
123  }
124 
125  selfDebug = new SelfDebug();
128 
129  clear();
130 }
131 
132 void
134 {
135  // Invalidate cached copies of miscregs in the TLBs
136  if (tc) {
138  }
139 
140  for (auto idx = 0; idx < NUM_MISCREGS; idx++) {
141  miscRegs[idx] = lookUpMiscReg[idx].reset();
142  }
143 
145 }
146 
147 void
149 {
151 
152  if (tc) {
154 
155  if (release->has(ArmExtension::TME)) {
156  std::unique_ptr<BaseHTMCheckpoint> cpt(new HTMCheckpoint());
157  tc->setHtmCheckpointPtr(std::move(cpt));
158  }
159  }
160 }
161 
162 void
164 {
166 
167  if (!system)
168  return;
169 
170  selfDebug->init(tc);
171 
172  if (auto gicv3_ifc = getGICv3CPUInterface(tc); gicv3_ifc) {
173  gicv3_ifc->setISA(this);
174  gicv3_ifc->setThreadContext(tc);
175  }
176 }
177 
178 void
180 {
181  tc = new_tc;
183 }
184 
185 void
187 {
188  for (auto &id: flatIntRegClass)
189  tc->setReg(id, src->getReg(id));
190 
191  for (auto &id: ccRegClass)
192  tc->setReg(id, src->getReg(id));
193 
194  for (int i = 0; i < NUM_MISCREGS; i++)
196 
198  for (auto &id: vecRegClass) {
199  src->getReg(id, &vc);
200  tc->setReg(id, &vc);
201  }
202 
203  for (auto &id: vecElemClass)
204  tc->setReg(id, src->getReg(id));
205 
207  for (auto &id: matRegClass) {
208  src->getReg(id, &mc);
209  tc->setReg(id, &mc);
210  }
211 
212  // setMiscReg "with effect" will set the misc register mapping correctly.
213  // e.g. updateRegMap(val)
215 
216  // Copy over the PC State
217  tc->pcState(src->pcState());
218 
219  // Invalidate the tlb misc register cache
220  static_cast<MMU *>(tc->getMMUPtr())->invalidateMiscReg();
221 }
222 
227 int
228 ISA::redirectRegVHE(int misc_reg)
229 {
230  const HCR hcr = readMiscRegNoEffect(MISCREG_HCR_EL2);
231  if (hcr.e2h == 0x0)
232  return misc_reg;
234  bool sec_el2 = scr.eel2 && release->has(ArmExtension::FEAT_SEL2);
235  switch(misc_reg) {
236  case MISCREG_SPSR_EL1:
237  return currEL() == EL2 ? MISCREG_SPSR_EL2 : misc_reg;
238  case MISCREG_ELR_EL1:
239  return currEL() == EL2 ? MISCREG_ELR_EL2 : misc_reg;
240  case MISCREG_SCTLR_EL1:
241  return currEL() == EL2 ? MISCREG_SCTLR_EL2 : misc_reg;
242  case MISCREG_CPACR_EL1:
243  return currEL() == EL2 ? MISCREG_CPTR_EL2 : misc_reg;
244 // case MISCREG_TRFCR_EL1:
245 // return currEL() == EL2 ? MISCREG_TRFCR_EL2 : misc_reg;
246  case MISCREG_TTBR0_EL1:
247  return currEL() == EL2 ? MISCREG_TTBR0_EL2 : misc_reg;
248  case MISCREG_TTBR1_EL1:
249  return currEL() == EL2 ? MISCREG_TTBR1_EL2 : misc_reg;
250  case MISCREG_TCR_EL1:
251  return currEL() == EL2 ? MISCREG_TCR_EL2 : misc_reg;
252  case MISCREG_AFSR0_EL1:
253  return currEL() == EL2 ? MISCREG_AFSR0_EL2 : misc_reg;
254  case MISCREG_AFSR1_EL1:
255  return currEL() == EL2 ? MISCREG_AFSR1_EL2 : misc_reg;
256  case MISCREG_ESR_EL1:
257  return currEL() == EL2 ? MISCREG_ESR_EL2 : misc_reg;
258  case MISCREG_FAR_EL1:
259  return currEL() == EL2 ? MISCREG_FAR_EL2 : misc_reg;
260  case MISCREG_MAIR_EL1:
261  return currEL() == EL2 ? MISCREG_MAIR_EL2 : misc_reg;
262  case MISCREG_AMAIR_EL1:
263  return currEL() == EL2 ? MISCREG_AMAIR_EL2 : misc_reg;
264  case MISCREG_VBAR_EL1:
265  return currEL() == EL2 ? MISCREG_VBAR_EL2 : misc_reg;
267  return currEL() == EL2 ? MISCREG_CONTEXTIDR_EL2 : misc_reg;
268  case MISCREG_CNTKCTL_EL1:
269  return currEL() == EL2 ? MISCREG_CNTHCTL_EL2 : misc_reg;
270  case MISCREG_CNTP_TVAL:
272  if (ELIsInHost(tc, currEL())) {
273  return sec_el2 && !scr.ns ? MISCREG_CNTHPS_TVAL_EL2:
275  } else {
276  return misc_reg;
277  }
278  case MISCREG_CNTP_CTL:
280  if (ELIsInHost(tc, currEL())) {
281  return sec_el2 && !scr.ns ? MISCREG_CNTHPS_CTL_EL2:
283  } else {
284  return misc_reg;
285  }
286  case MISCREG_CNTP_CVAL:
288  if (ELIsInHost(tc, currEL())) {
289  return sec_el2 && !scr.ns ? MISCREG_CNTHPS_CVAL_EL2:
291  } else {
292  return misc_reg;
293  }
294  case MISCREG_CNTV_TVAL:
296  if (ELIsInHost(tc, currEL())) {
297  return sec_el2 && !scr.ns ? MISCREG_CNTHVS_TVAL_EL2:
299  } else {
300  return misc_reg;
301  }
302  case MISCREG_CNTV_CTL:
304  if (ELIsInHost(tc, currEL())) {
305  return sec_el2 && !scr.ns ? MISCREG_CNTHVS_CTL_EL2:
307  } else {
308  return misc_reg;
309  }
310  case MISCREG_CNTV_CVAL:
312  if (ELIsInHost(tc, currEL())) {
313  return sec_el2 && !scr.ns ? MISCREG_CNTHVS_CVAL_EL2:
315  } else {
316  return misc_reg;
317  }
318  case MISCREG_CNTVCT:
319  case MISCREG_CNTVCT_EL0:
320  return ELIsInHost(tc, currEL()) ? MISCREG_CNTPCT_EL0 : misc_reg;
321  case MISCREG_SCTLR_EL12:
322  return MISCREG_SCTLR_EL1;
323  case MISCREG_CPACR_EL12:
324  return MISCREG_CPACR_EL1;
325  case MISCREG_ZCR_EL12:
326  return MISCREG_ZCR_EL1;
327  case MISCREG_TTBR0_EL12:
328  return MISCREG_TTBR0_EL1;
329  case MISCREG_TTBR1_EL12:
330  return MISCREG_TTBR1_EL1;
331  case MISCREG_TCR_EL12:
332  return MISCREG_TCR_EL1;
333  case MISCREG_SPSR_EL12:
334  return MISCREG_SPSR_EL1;
335  case MISCREG_ELR_EL12:
336  return MISCREG_ELR_EL1;
337  case MISCREG_AFSR0_EL12:
338  return MISCREG_AFSR0_EL1;
339  case MISCREG_AFSR1_EL12:
340  return MISCREG_AFSR1_EL1;
341  case MISCREG_ESR_EL12:
342  return MISCREG_ESR_EL1;
343  case MISCREG_FAR_EL12:
344  return MISCREG_FAR_EL1;
345  case MISCREG_MAIR_EL12:
346  return MISCREG_MAIR_EL1;
347  case MISCREG_AMAIR_EL12:
348  return MISCREG_AMAIR_EL1;
349  case MISCREG_VBAR_EL12:
350  return MISCREG_VBAR_EL1;
352  return MISCREG_CONTEXTIDR_EL1;
354  return MISCREG_CNTKCTL_EL1;
355  // _EL02 registers
357  return MISCREG_CNTP_TVAL_EL0;
359  return MISCREG_CNTP_CTL_EL0;
361  return MISCREG_CNTP_CVAL_EL0;
363  return MISCREG_CNTV_TVAL_EL0;
365  return MISCREG_CNTV_CTL_EL0;
367  return MISCREG_CNTV_CVAL_EL0;
368  default:
369  return misc_reg;
370  }
371 }
372 
373 RegVal
375 {
376  assert(idx < NUM_MISCREGS);
377 
378  const auto &reg = lookUpMiscReg[idx]; // bit masks
379  const auto &map = getMiscIndices(idx);
380  int lower = map.first, upper = map.second;
381  // NB!: apply architectural masks according to desired register,
382  // despite possibly getting value from different (mapped) register.
383  auto val = !upper ? miscRegs[lower] : ((miscRegs[lower] & mask(32))
384  |(miscRegs[upper] << 32));
385  if (val & reg.res0()) {
386  DPRINTF(MiscRegs, "Reading MiscReg %s with set res0 bits: %#x\n",
387  miscRegName[idx], val & reg.res0());
388  }
389  if ((val & reg.res1()) != reg.res1()) {
390  DPRINTF(MiscRegs, "Reading MiscReg %s with clear res1 bits: %#x\n",
391  miscRegName[idx], (val & reg.res1()) ^ reg.res1());
392  }
393  return (val & ~reg.raz()) | reg.rao(); // enforce raz/rao
394 }
395 
396 
397 RegVal
399 {
400  CPSR cpsr = 0;
401  SCR scr = 0;
402 
403  if (idx == MISCREG_CPSR) {
404  cpsr = miscRegs[idx];
405  auto pc = tc->pcState().as<PCState>();
406  cpsr.j = pc.jazelle() ? 1 : 0;
407  cpsr.t = pc.thumb() ? 1 : 0;
408  return cpsr;
409  }
410 
411 #ifndef NDEBUG
412  auto& miscreg_info = lookUpMiscReg[idx].info;
413  if (!miscreg_info[MISCREG_IMPLEMENTED]) {
414  if (miscreg_info[MISCREG_WARN_NOT_FAIL])
415  warn("Unimplemented system register %s read.\n",
416  miscRegName[idx]);
417  else
418  panic("Unimplemented system register %s read.\n",
419  miscRegName[idx]);
420  }
421 #endif
422  idx = redirectRegVHE(idx);
423 
424  switch (unflattenMiscReg(idx)) {
425  case MISCREG_CPACR:
426  {
427  const uint32_t ones = (uint32_t)(-1);
428  CPACR cpacrMask = 0;
429  // Only cp10, cp11, and ase are implemented, nothing else should
430  // be readable? (straight copy from the write code)
431  cpacrMask.cp10 = ones;
432  cpacrMask.cp11 = ones;
433  cpacrMask.asedis = ones;
434 
435  // Security Extensions may limit the readability of CPACR
436  if (release->has(ArmExtension::SECURITY)) {
439  if (scr.ns && (cpsr.mode != MODE_MON) && ELIs32(tc, EL3)) {
440  NSACR nsacr = readMiscRegNoEffect(MISCREG_NSACR);
441  // NB: Skipping the full loop, here
442  if (!nsacr.cp10) cpacrMask.cp10 = 0;
443  if (!nsacr.cp11) cpacrMask.cp11 = 0;
444  }
445  }
447  val &= cpacrMask;
448  DPRINTF(MiscRegs, "Reading misc reg %s: %#x\n",
449  miscRegName[idx], val);
450  return val;
451  }
452  case MISCREG_MPIDR:
453  case MISCREG_MPIDR_EL1:
454  return readMPIDR(system, tc);
455  case MISCREG_ID_AFR0: // not implemented, so alias MIDR
456  case MISCREG_REVIDR: // not implemented, so alias MIDR
457  case MISCREG_MIDR:
458  case MISCREG_MIDR_EL1:
459  if (currEL() == EL1 && EL2Enabled(tc)) {
461  } else {
462  return readMiscRegNoEffect(idx);
463  }
464  break;
465 
466  case MISCREG_CLIDR:
467  warn_once("The clidr register always reports 0 caches.\n");
468  warn_once("clidr LoUIS field of 0b001 to match current "
469  "ARM implementations.\n");
470  return 0x00200000;
471  case MISCREG_CCSIDR:
472  warn_once("The ccsidr register isn't implemented and "
473  "always reads as 0.\n");
474  break;
475  case MISCREG_ACTLR:
476  warn("Not doing anything for miscreg ACTLR\n");
477  break;
478 
483  return pmu->readMiscReg(idx);
484 
485  case MISCREG_CPSR_Q:
486  panic("shouldn't be reading this register seperately\n");
487  case MISCREG_FPSCR_QC:
489  case MISCREG_FPSCR_EXC:
491  case MISCREG_FPSR:
492  {
493  const uint32_t ones = (uint32_t)(-1);
494  FPSCR fpscrMask = 0;
495  fpscrMask.ioc = ones;
496  fpscrMask.dzc = ones;
497  fpscrMask.ofc = ones;
498  fpscrMask.ufc = ones;
499  fpscrMask.ixc = ones;
500  fpscrMask.idc = ones;
501  fpscrMask.qc = ones;
502  fpscrMask.v = ones;
503  fpscrMask.c = ones;
504  fpscrMask.z = ones;
505  fpscrMask.n = ones;
506  return readMiscRegNoEffect(MISCREG_FPSCR) & (uint32_t)fpscrMask;
507  }
508  case MISCREG_FPCR:
509  {
510  const uint32_t ones = (uint32_t)(-1);
511  FPSCR fpscrMask = 0;
512  fpscrMask.len = ones;
513  fpscrMask.fz16 = ones;
514  fpscrMask.stride = ones;
515  fpscrMask.rMode = ones;
516  fpscrMask.fz = ones;
517  fpscrMask.dn = ones;
518  fpscrMask.ahp = ones;
519  return readMiscRegNoEffect(MISCREG_FPSCR) & (uint32_t)fpscrMask;
520  }
521  case MISCREG_NZCV:
522  {
523  CPSR cpsr = 0;
524  cpsr.nz = tc->getReg(cc_reg::Nz);
525  cpsr.c = tc->getReg(cc_reg::C);
526  cpsr.v = tc->getReg(cc_reg::V);
527  return cpsr;
528  }
529  case MISCREG_DAIF:
530  {
531  CPSR cpsr = 0;
532  cpsr.daif = (uint8_t) ((CPSR) miscRegs[MISCREG_CPSR]).daif;
533  return cpsr;
534  }
535  case MISCREG_SP_EL0:
536  {
537  return tc->getReg(int_reg::Sp0);
538  }
539  case MISCREG_SP_EL1:
540  {
541  return tc->getReg(int_reg::Sp1);
542  }
543  case MISCREG_SP_EL2:
544  {
545  return tc->getReg(int_reg::Sp2);
546  }
547  case MISCREG_SPSEL:
548  {
549  return miscRegs[MISCREG_CPSR] & 0x1;
550  }
551  case MISCREG_CURRENTEL:
552  {
553  return miscRegs[MISCREG_CPSR] & 0xc;
554  }
555  case MISCREG_PAN:
556  {
557  return miscRegs[MISCREG_CPSR] & 0x400000;
558  }
559  case MISCREG_UAO:
560  {
561  return miscRegs[MISCREG_CPSR] & 0x800000;
562  }
563  case MISCREG_L2CTLR:
564  {
565  // mostly unimplemented, just set NumCPUs field from sim and return
566  L2CTLR l2ctlr = 0;
567  // b00:1CPU to b11:4CPUs
568  l2ctlr.numCPUs = tc->getSystemPtr()->threads.size() - 1;
569  return l2ctlr;
570  }
571  case MISCREG_ISR:
572  case MISCREG_ISR_EL1:
573  {
574  auto ic = dynamic_cast<ArmISA::Interrupts *>(
576  return ic->getISR(
580  }
581  case MISCREG_HCPTR:
582  {
583  HCPTR val = readMiscRegNoEffect(idx);
584  bool secure_lookup = release->has(ArmExtension::SECURITY) &&
585  isSecure(tc);
586  if (!secure_lookup) {
587  NSACR nsacr = readMiscRegNoEffect(MISCREG_NSACR);
588  if (!nsacr.cp10) {
589  val.tcp10 = 1;
590  val.tcp11 = 1;
591  }
592  }
593  return val;
594  }
595  case MISCREG_HDFAR: // alias for secure DFAR
597  case MISCREG_HIFAR: // alias for secure IFAR
599 
600  case MISCREG_RNDR:
601  tc->setReg(cc_reg::Nz, (RegVal)0);
602  tc->setReg(cc_reg::C, (RegVal)0);
603  tc->setReg(cc_reg::V, (RegVal)0);
604  return random_mt.random<RegVal>();
605  case MISCREG_RNDRRS:
606  tc->setReg(cc_reg::Nz, (RegVal)0);
607  tc->setReg(cc_reg::C, (RegVal)0);
608  tc->setReg(cc_reg::V, (RegVal)0);
609  // Note: we are not reseeding
610  // The random number generator already has an hardcoded
611  // seed for the sake of determinism. There is no point
612  // in simulating non-determinism here
613  return random_mt.random<RegVal>();
614 
615  // Generic Timer registers
618  return getGenericTimer().readMiscReg(idx);
619 
623  return getGICv3CPUInterface().readMiscReg(idx);
624 
625  default:
626  break;
627 
628  }
629  return readMiscRegNoEffect(idx);
630 }
631 
632 void
634 {
635  assert(idx < NUM_MISCREGS);
636 
637  const auto &reg = lookUpMiscReg[idx]; // bit masks
638  const auto &map = getMiscIndices(idx);
639  int lower = map.first, upper = map.second;
640 
641  auto v = (val & ~reg.wi()) | reg.rao();
642  if (upper > 0) {
643  miscRegs[lower] = bits(v, 31, 0);
644  miscRegs[upper] = bits(v, 63, 32);
645  DPRINTF(MiscRegs, "Writing MiscReg %s (%d %d:%d) : %#x\n",
646  miscRegName[idx], idx, lower, upper, v);
647  } else {
648  miscRegs[lower] = v;
649  DPRINTF(MiscRegs, "Writing MiscReg %s (%d %d) : %#x\n",
650  miscRegName[idx], idx, lower, v);
651  }
652 }
653 
654 void
656 {
657 
658  RegVal newVal = val;
659  bool secure_lookup;
660  SCR scr;
661 
662  if (idx == MISCREG_CPSR) {
663  updateRegMap(val);
664 
665 
666  CPSR old_cpsr = miscRegs[MISCREG_CPSR];
667  int old_mode = old_cpsr.mode;
668  CPSR cpsr = val;
669  if (cpsr.pan != old_cpsr.pan || cpsr.il != old_cpsr.il) {
671  }
672 
673  DPRINTF(Arm, "Updating CPSR from %#x to %#x f:%d i:%d a:%d mode:%#x\n",
674  miscRegs[idx], cpsr, cpsr.f, cpsr.i, cpsr.a, cpsr.mode);
675  PCState pc = tc->pcState().as<PCState>();
676  pc.nextThumb(cpsr.t);
677  pc.nextJazelle(cpsr.j);
678  pc.illegalExec(cpsr.il == 1);
679  selfDebug->setDebugMask(cpsr.d == 1);
680 
681  tc->getDecoderPtr()->as<Decoder>().setSveLen(
682  (getCurSveVecLenInBits() >> 7) - 1);
683  tc->getDecoderPtr()->as<Decoder>().setSmeLen(
684  (getCurSmeVecLenInBits() >> 7) - 1);
685 
686  // Follow slightly different semantics if a CheckerCPU object
687  // is connected
688  CheckerCPU *checker = tc->getCheckerCpuPtr();
689  if (checker) {
691  } else {
692  tc->pcState(pc);
693  }
694 
695  setMiscRegNoEffect(idx, newVal);
696 
697  if (old_mode != cpsr.mode) {
699  if (gicv3CpuInterface) {
700  // The assertion and de-assertion of IRQs and FIQs are
701  // affected by the current Exception level and Security
702  // state of the PE. As part of the Context
703  // Synchronization that occurs as the result of taking
704  // or returning from an exception, the CPU interface
705  // ensures that IRQ and FIQ are both appropriately
706  // asserted or deasserted for the Exception level and
707  // Security state that the PE is entering.
708  static_cast<Gicv3CPUInterface&>(
709  getGICv3CPUInterface()).update();
710  }
711  }
712  } else {
713 #ifndef NDEBUG
714  auto& miscreg_info = lookUpMiscReg[idx].info;
715  if (!miscreg_info[MISCREG_IMPLEMENTED]) {
716  if (miscreg_info[MISCREG_WARN_NOT_FAIL])
717  warn("Unimplemented system register %s write with %#x.\n",
718  miscRegName[idx], val);
719  else
720  panic("Unimplemented system register %s write with %#x.\n",
721  miscRegName[idx], val);
722  }
723 #endif
724  idx = redirectRegVHE(idx);
725 
726  switch (unflattenMiscReg(idx)) {
727  case MISCREG_CPACR:
728  {
729 
730  const uint32_t ones = (uint32_t)(-1);
731  CPACR cpacrMask = 0;
732  // Only cp10, cp11, and ase are implemented, nothing else should
733  // be writable
734  cpacrMask.cp10 = ones;
735  cpacrMask.cp11 = ones;
736  cpacrMask.asedis = ones;
737 
738  // Security Extensions may limit the writability of CPACR
739  if (release->has(ArmExtension::SECURITY)) {
741  CPSR cpsr = readMiscRegNoEffect(MISCREG_CPSR);
742  if (scr.ns && (cpsr.mode != MODE_MON) && ELIs32(tc, EL3)) {
743  NSACR nsacr = readMiscRegNoEffect(MISCREG_NSACR);
744  // NB: Skipping the full loop, here
745  if (!nsacr.cp10) cpacrMask.cp10 = 0;
746  if (!nsacr.cp11) cpacrMask.cp11 = 0;
747  }
748  }
749 
751  newVal &= cpacrMask;
752  newVal |= old_val & ~cpacrMask;
753  DPRINTF(MiscRegs, "Writing misc reg %s: %#x\n",
754  miscRegName[idx], newVal);
755  }
756  break;
757  case MISCREG_CPACR_EL1:
758  {
759  const uint32_t ones = (uint32_t)(-1);
760  CPACR cpacrMask = 0;
761  cpacrMask.tta = ones;
762  cpacrMask.fpen = ones;
763  if (release->has(ArmExtension::FEAT_SVE)) {
764  cpacrMask.zen = ones;
765  }
766  if (release->has(ArmExtension::FEAT_SME)) {
767  cpacrMask.smen = ones;
768  }
769  newVal &= cpacrMask;
770  DPRINTF(MiscRegs, "Writing misc reg %s: %#x\n",
771  miscRegName[idx], newVal);
772  }
773  break;
774  case MISCREG_CPTR_EL2:
775  {
776  const HCR hcr = readMiscRegNoEffect(MISCREG_HCR_EL2);
777  const uint32_t ones = (uint32_t)(-1);
778  CPTR cptrMask = 0;
779  cptrMask.tcpac = ones;
780  cptrMask.tta = ones;
781  cptrMask.tfp = ones;
782  if (release->has(ArmExtension::FEAT_SVE)) {
783  cptrMask.tz = ones;
784  cptrMask.zen = hcr.e2h ? ones : 0;
785  }
786  if (release->has(ArmExtension::FEAT_SME)) {
787  cptrMask.tsm = ones;
788  cptrMask.smen = hcr.e2h ? ones : 0;
789  }
790  cptrMask.fpen = hcr.e2h ? ones : 0;
791  newVal &= cptrMask;
792  cptrMask = 0;
793  cptrMask.res1_13_el2 = ones;
794  cptrMask.res1_7_0_el2 = ones;
795  if (!release->has(ArmExtension::FEAT_SVE)) {
796  cptrMask.res1_8_el2 = ones;
797  }
798  if (!release->has(ArmExtension::FEAT_SME)) {
799  cptrMask.res1_12_el2 = ones;
800  }
801  cptrMask.res1_9_el2 = ones;
802  newVal |= cptrMask;
803  DPRINTF(MiscRegs, "Writing misc reg %s: %#x\n",
804  miscRegName[idx], newVal);
805  }
806  break;
807  case MISCREG_CPTR_EL3:
808  {
809  const uint32_t ones = (uint32_t)(-1);
810  CPTR cptrMask = 0;
811  cptrMask.tcpac = ones;
812  cptrMask.tta = ones;
813  cptrMask.tfp = ones;
814  if (release->has(ArmExtension::FEAT_SVE)) {
815  cptrMask.ez = ones;
816  }
817  if (release->has(ArmExtension::FEAT_SME)) {
818  cptrMask.esm = ones;
819  }
820  newVal &= cptrMask;
821  DPRINTF(MiscRegs, "Writing misc reg %s: %#x\n",
822  miscRegName[idx], newVal);
823  }
824  break;
825  case MISCREG_CSSELR:
826  warn_once("The csselr register isn't implemented.\n");
827  return;
828 
829  case MISCREG_DC_ZVA_Xt:
830  warn("Calling DC ZVA! Not Implemeted! Expect WEIRD results\n");
831  return;
832 
833  case MISCREG_FPSCR:
834  tc->getDecoderPtr()->as<Decoder>().setContext(newVal);
835  break;
836  case MISCREG_FPSR:
837  {
838  const uint32_t ones = (uint32_t)(-1);
839  FPSCR fpscrMask = 0;
840  fpscrMask.ioc = ones;
841  fpscrMask.dzc = ones;
842  fpscrMask.ofc = ones;
843  fpscrMask.ufc = ones;
844  fpscrMask.ixc = ones;
845  fpscrMask.idc = ones;
846  fpscrMask.qc = ones;
847  fpscrMask.v = ones;
848  fpscrMask.c = ones;
849  fpscrMask.z = ones;
850  fpscrMask.n = ones;
851  newVal = (newVal & (uint32_t)fpscrMask) |
853  ~(uint32_t)fpscrMask);
854  idx = MISCREG_FPSCR;
855  }
856  break;
857  case MISCREG_FPCR:
858  {
859  const uint32_t ones = (uint32_t)(-1);
860  FPSCR fpscrMask = 0;
861  fpscrMask.len = ones;
862  fpscrMask.fz16 = ones;
863  fpscrMask.stride = ones;
864  fpscrMask.rMode = ones;
865  fpscrMask.fz = ones;
866  fpscrMask.dn = ones;
867  fpscrMask.ahp = ones;
868  newVal = (newVal & (uint32_t)fpscrMask) |
870  ~(uint32_t)fpscrMask);
871  idx = MISCREG_FPSCR;
872  }
873  break;
874  case MISCREG_CPSR_Q:
875  {
876  assert(!(newVal & ~CpsrMaskQ));
877  newVal = readMiscRegNoEffect(MISCREG_CPSR) | newVal;
878  idx = MISCREG_CPSR;
879  }
880  break;
881  case MISCREG_FPSCR_QC:
882  {
884  (newVal & FpscrQcMask);
885  idx = MISCREG_FPSCR;
886  }
887  break;
888  case MISCREG_FPSCR_EXC:
889  {
891  (newVal & FpscrExcMask);
892  idx = MISCREG_FPSCR;
893  }
894  break;
895  case MISCREG_FPEXC:
896  {
897  // vfpv3 architecture, section B.6.1 of DDI04068
898  // bit 29 - valid only if fpexc[31] is 0
899  const uint32_t fpexcMask = 0x60000000;
900  newVal = (newVal & fpexcMask) |
901  (readMiscRegNoEffect(MISCREG_FPEXC) & ~fpexcMask);
902  }
903  break;
904  case MISCREG_HCR:
905  {
906  const HDCR mdcr = tc->readMiscRegNoEffect(MISCREG_MDCR_EL2);
907  selfDebug->setenableTDETGE((HCR)val, mdcr);
908  }
909  break;
910 
911  case MISCREG_HDCR:
912  {
913  const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
914  selfDebug->setenableTDETGE(hcr, (HDCR)val);
915  }
916  break;
917  case MISCREG_DBGOSLAR:
918  {
920  const uint32_t temp = (val == 0xC5ACCE55)? 0x1 : 0x0;
921  selfDebug->updateOSLock((RegVal) temp);
922  r.oslk = bits(temp,0);
924  }
925  break;
928  break;
931  break;
932 
933  case MISCREG_MDCR_EL2:
934  {
935  const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
936  selfDebug->setenableTDETGE(hcr, (HDCR)val);
937  }
938  break;
939  case MISCREG_SDCR:
940  case MISCREG_MDCR_EL3:
941  {
943  }
944  break;
945  case MISCREG_DBGDSCRext:
946  {
948  DBGDS32 r = tc->readMiscReg(MISCREG_DBGDSCRint);
949  DBGDS32 v = val;
950  r.moe = v.moe;
951  r.udccdis = v.udccdis;
952  r.mdbgen = v.mdbgen;
955  }
956 
957  break;
958  case MISCREG_MDSCR_EL1:
959  {
961  }
962  break;
963 
964  case MISCREG_OSLAR_EL1:
965  {
968  r.oslk = bits(val, 0);
969  r.oslm_3 = 1;
971  }
972  break;
973 
976  break;
979  break;
980  case MISCREG_SCR:
982  break;
983  case MISCREG_SCTLR:
984  {
985  DPRINTF(MiscRegs, "Writing SCTLR: %#x\n", newVal);
987 
988  MiscRegIndex sctlr_idx;
989  if (release->has(ArmExtension::SECURITY) &&
990  !highestELIs64 && !scr.ns) {
991  sctlr_idx = MISCREG_SCTLR_S;
992  } else {
993  sctlr_idx = MISCREG_SCTLR_NS;
994  }
995 
996  SCTLR sctlr = miscRegs[sctlr_idx];
997  SCTLR new_sctlr = newVal;
998  new_sctlr.nmfi = ((bool)sctlr.nmfi) &&
999  !release->has(ArmExtension::VIRTUALIZATION);
1000  miscRegs[sctlr_idx] = (RegVal)new_sctlr;
1002  }
1003  case MISCREG_MIDR:
1004  case MISCREG_ID_PFR0:
1005  case MISCREG_ID_PFR1:
1006  case MISCREG_ID_DFR0:
1007  case MISCREG_ID_MMFR0:
1008  case MISCREG_ID_MMFR1:
1009  case MISCREG_ID_MMFR2:
1010  case MISCREG_ID_MMFR3:
1011  case MISCREG_ID_MMFR4:
1012  case MISCREG_ID_ISAR0:
1013  case MISCREG_ID_ISAR1:
1014  case MISCREG_ID_ISAR2:
1015  case MISCREG_ID_ISAR3:
1016  case MISCREG_ID_ISAR4:
1017  case MISCREG_ID_ISAR5:
1018 
1019  case MISCREG_MPIDR:
1020  case MISCREG_FPSID:
1021  case MISCREG_TLBTR:
1022  case MISCREG_MVFR0:
1023  case MISCREG_MVFR1:
1024 
1036  // ID registers are constants.
1037  return;
1038 
1039  // TLB Invalidate All
1040  case MISCREG_ACTLR:
1041  warn("Not doing anything for write of miscreg ACTLR\n");
1042  break;
1043 
1047  case MISCREG_PMCR ... MISCREG_PMOVSSET:
1048  pmu->setMiscReg(idx, newVal);
1049  break;
1050 
1051 
1052  case MISCREG_HSTR: // TJDBX, now redifined to be RES0
1053  {
1054  HSTR hstrMask = 0;
1055  hstrMask.tjdbx = 1;
1056  newVal &= ~((uint32_t) hstrMask);
1057  break;
1058  }
1059  case MISCREG_HCPTR:
1060  {
1061  // If a CP bit in NSACR is 0 then the corresponding bit in
1062  // HCPTR is RAO/WI. Same applies to NSASEDIS
1063  secure_lookup = release->has(ArmExtension::SECURITY) &&
1064  isSecure(tc);
1065  if (!secure_lookup) {
1067  RegVal mask =
1068  (readMiscRegNoEffect(MISCREG_NSACR) ^ 0x7FFF) & 0xBFFF;
1069  newVal = (newVal & ~mask) | (oldValue & mask);
1070  }
1071  break;
1072  }
1073  case MISCREG_HDFAR: // alias for secure DFAR
1074  idx = MISCREG_DFAR_S;
1075  break;
1076  case MISCREG_HIFAR: // alias for secure IFAR
1077  idx = MISCREG_IFAR_S;
1078  break;
1079  case MISCREG_ATS1CPR:
1081  return;
1082  case MISCREG_ATS1CPW:
1084  return;
1085  case MISCREG_ATS1CUR:
1087  MMU::UserMode, val);
1088  return;
1089  case MISCREG_ATS1CUW:
1091  MMU::UserMode, val);
1092  return;
1093  case MISCREG_ATS12NSOPR:
1094  if (!release->has(ArmExtension::SECURITY))
1095  panic("Security Extensions required for ATS12NSOPR");
1097  return;
1098  case MISCREG_ATS12NSOPW:
1099  if (!release->has(ArmExtension::SECURITY))
1100  panic("Security Extensions required for ATS12NSOPW");
1102  return;
1103  case MISCREG_ATS12NSOUR:
1104  if (!release->has(ArmExtension::SECURITY))
1105  panic("Security Extensions required for ATS12NSOUR");
1107  MMU::UserMode, val);
1108  return;
1109  case MISCREG_ATS12NSOUW:
1110  if (!release->has(ArmExtension::SECURITY))
1111  panic("Security Extensions required for ATS12NSOUW");
1113  MMU::UserMode, val);
1114  return;
1115  case MISCREG_ATS1HR:
1117  return;
1118  case MISCREG_ATS1HW:
1120  return;
1121  case MISCREG_TTBCR:
1122  {
1123  TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
1124  const uint32_t ones = (uint32_t)(-1);
1125  TTBCR ttbcrMask = 0;
1126  TTBCR ttbcrNew = newVal;
1127 
1128  // ARM DDI 0406C.b, ARMv7-32
1129  ttbcrMask.n = ones; // T0SZ
1130  if (release->has(ArmExtension::SECURITY)) {
1131  ttbcrMask.pd0 = ones;
1132  ttbcrMask.pd1 = ones;
1133  }
1134  ttbcrMask.epd0 = ones;
1135  ttbcrMask.irgn0 = ones;
1136  ttbcrMask.orgn0 = ones;
1137  ttbcrMask.sh0 = ones;
1138  ttbcrMask.ps = ones; // T1SZ
1139  ttbcrMask.a1 = ones;
1140  ttbcrMask.epd1 = ones;
1141  ttbcrMask.irgn1 = ones;
1142  ttbcrMask.orgn1 = ones;
1143  ttbcrMask.sh1 = ones;
1144  if (release->has(ArmExtension::LPAE))
1145  ttbcrMask.eae = ones;
1146 
1147  if (release->has(ArmExtension::LPAE) && ttbcrNew.eae) {
1148  newVal = newVal & ttbcrMask;
1149  } else {
1150  newVal = (newVal & ttbcrMask) | (ttbcr & (~ttbcrMask));
1151  }
1152  // Invalidate TLB MiscReg
1154  break;
1155  }
1156  case MISCREG_TTBR0:
1157  case MISCREG_TTBR1:
1158  {
1159  TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
1160  if (release->has(ArmExtension::LPAE)) {
1161  if (ttbcr.eae) {
1162  // ARMv7 bit 63-56, 47-40 reserved, UNK/SBZP
1163  // ARMv8 AArch32 bit 63-56 only
1164  uint64_t ttbrMask = mask(63,56) | mask(47,40);
1165  newVal = (newVal & (~ttbrMask));
1166  }
1167  }
1168  // Invalidate TLB MiscReg
1170  break;
1171  }
1172  case MISCREG_SCTLR_EL1:
1173  case MISCREG_CONTEXTIDR:
1174  case MISCREG_PRRR:
1175  case MISCREG_NMRR:
1176  case MISCREG_MAIR0:
1177  case MISCREG_MAIR1:
1178  case MISCREG_DACR:
1179  case MISCREG_VTTBR:
1180  case MISCREG_SCR_EL3:
1181  case MISCREG_TCR_EL1:
1182  case MISCREG_TCR_EL2:
1183  case MISCREG_TCR_EL3:
1184  case MISCREG_VTCR_EL2:
1185  case MISCREG_SCTLR_EL2:
1186  case MISCREG_SCTLR_EL3:
1187  case MISCREG_HSCTLR:
1188  case MISCREG_TTBR0_EL1:
1189  case MISCREG_TTBR1_EL1:
1190  case MISCREG_TTBR0_EL2:
1191  case MISCREG_TTBR1_EL2:
1192  case MISCREG_TTBR0_EL3:
1194  break;
1195  case MISCREG_HCR_EL2:
1196  {
1197  const HDCR mdcr = tc->readMiscRegNoEffect(MISCREG_MDCR_EL2);
1198  selfDebug->setenableTDETGE((HCR)val, mdcr);
1200  }
1201  break;
1202  case MISCREG_NZCV:
1203  {
1204  CPSR cpsr = val;
1205 
1206  tc->setReg(cc_reg::Nz, cpsr.nz);
1207  tc->setReg(cc_reg::C, cpsr.c);
1208  tc->setReg(cc_reg::V, cpsr.v);
1209  }
1210  break;
1211  case MISCREG_DAIF:
1212  {
1213  CPSR cpsr = miscRegs[MISCREG_CPSR];
1214  cpsr.daif = (uint8_t) ((CPSR) newVal).daif;
1215  newVal = cpsr;
1216  idx = MISCREG_CPSR;
1217  }
1218  break;
1219  case MISCREG_SP_EL0:
1220  tc->setReg(int_reg::Sp0, newVal);
1221  break;
1222  case MISCREG_SP_EL1:
1223  tc->setReg(int_reg::Sp1, newVal);
1224  break;
1225  case MISCREG_SP_EL2:
1226  tc->setReg(int_reg::Sp2, newVal);
1227  break;
1228  case MISCREG_SPSEL:
1229  {
1230  CPSR cpsr = miscRegs[MISCREG_CPSR];
1231  cpsr.sp = (uint8_t) ((CPSR) newVal).sp;
1232  newVal = cpsr;
1233  idx = MISCREG_CPSR;
1234  }
1235  break;
1236  case MISCREG_CURRENTEL:
1237  {
1238  CPSR cpsr = miscRegs[MISCREG_CPSR];
1239  cpsr.el = (uint8_t) ((CPSR) newVal).el;
1240  newVal = cpsr;
1241  idx = MISCREG_CPSR;
1242  }
1243  break;
1244  case MISCREG_PAN:
1245  {
1246  // PAN is affecting data accesses
1248 
1249  CPSR cpsr = miscRegs[MISCREG_CPSR];
1250  cpsr.pan = (uint8_t) ((CPSR) newVal).pan;
1251  newVal = cpsr;
1252  idx = MISCREG_CPSR;
1253  }
1254  break;
1255  case MISCREG_UAO:
1256  {
1257  // UAO is affecting data accesses
1259 
1260  CPSR cpsr = miscRegs[MISCREG_CPSR];
1261  cpsr.uao = (uint8_t) ((CPSR) newVal).uao;
1262  newVal = cpsr;
1263  idx = MISCREG_CPSR;
1264  }
1265  break;
1266  case MISCREG_AT_S1E1R_Xt:
1268  return;
1269  case MISCREG_AT_S1E1W_Xt:
1271  return;
1272  case MISCREG_AT_S1E0R_Xt:
1274  MMU::UserMode, val);
1275  return;
1276  case MISCREG_AT_S1E0W_Xt:
1278  MMU::UserMode, val);
1279  return;
1280  case MISCREG_AT_S1E2R_Xt:
1282  return;
1283  case MISCREG_AT_S1E2W_Xt:
1285  return;
1286  case MISCREG_AT_S12E1R_Xt:
1288  return;
1289  case MISCREG_AT_S12E1W_Xt:
1291  return;
1292  case MISCREG_AT_S12E0R_Xt:
1294  MMU::UserMode, val);
1295  return;
1296  case MISCREG_AT_S12E0W_Xt:
1298  MMU::UserMode, val);
1299  return;
1300  case MISCREG_AT_S1E3R_Xt:
1302  return;
1303  case MISCREG_AT_S1E3W_Xt:
1305  return;
1306  case MISCREG_L2CTLR:
1307  warn("miscreg L2CTLR (%s) written with %#x. ignored...\n",
1308  miscRegName[idx], uint32_t(val));
1309  break;
1310 
1311  // Generic Timer registers
1314  getGenericTimer().setMiscReg(idx, newVal);
1315  break;
1319  getGICv3CPUInterface().setMiscReg(idx, newVal);
1320  return;
1321  case MISCREG_ZCR_EL3:
1322  case MISCREG_ZCR_EL2:
1323  case MISCREG_ZCR_EL1:
1324  // Set the value here as we need to update the regs before
1325  // reading them back in getCurSveVecLenInBits to avoid
1326  // setting stale vector lengths in the decoder.
1327  setMiscRegNoEffect(idx, newVal);
1328  tc->getDecoderPtr()->as<Decoder>().setSveLen(
1329  (getCurSveVecLenInBits() >> 7) - 1);
1330  return;
1331  case MISCREG_SMCR_EL3:
1332  case MISCREG_SMCR_EL2:
1333  case MISCREG_SMCR_EL1:
1334  // Set the value here as we need to update the regs before
1335  // reading them back in getCurSmeVecLenInBits to avoid
1336  // setting stale vector lengths in the decoder.
1337  setMiscRegNoEffect(idx, newVal);
1338  tc->getDecoderPtr()->as<Decoder>().setSmeLen(
1339  (getCurSmeVecLenInBits() >> 7) - 1);
1340  return;
1341  }
1342  setMiscRegNoEffect(idx, newVal);
1343  }
1344 }
1345 
1346 RegVal
1348 {
1349  int flat_idx = flattenMiscIndex(idx);
1350  return lookUpMiscReg[flat_idx].reset();
1351 }
1352 
1353 void
1355 {
1356  int flat_idx = flattenMiscIndex(idx);
1357  InitReg(flat_idx).reset(val);
1358 }
1359 
1360 BaseISADevice &
1362 {
1363  // We only need to create an ISA interface the first time we try
1364  // to access the timer.
1365  if (timer)
1366  return *timer.get();
1367 
1368  assert(system);
1369  GenericTimer *generic_timer(system->getGenericTimer());
1370  if (!generic_timer) {
1371  panic("Trying to get a generic timer from a system that hasn't "
1372  "been configured to use a generic timer.\n");
1373  }
1374 
1375  timer.reset(new GenericTimerISA(*generic_timer, tc->contextId()));
1376  timer->setThreadContext(tc);
1377 
1378  return *timer.get();
1379 }
1380 
1381 BaseISADevice &
1383 {
1384  if (gicv3CpuInterface)
1385  return *gicv3CpuInterface.get();
1386 
1387  auto gicv3_ifc = getGICv3CPUInterface(tc);
1388  panic_if(!gicv3_ifc, "The system does not have a GICv3 irq controller\n");
1389  gicv3CpuInterface.reset(gicv3_ifc);
1390 
1391  return *gicv3CpuInterface.get();
1392 }
1393 
1396 {
1397  assert(system);
1398  Gicv3 *gicv3 = dynamic_cast<Gicv3 *>(system->getGIC());
1399  if (gicv3) {
1400  return gicv3->getCPUInterface(tc->contextId());
1401  } else {
1402  return nullptr;
1403  }
1404 }
1405 
1406 bool
1408 {
1409  if (!release->has(ArmExtension::SECURITY)) {
1410  return false;
1411  }
1412 
1413  SCR scr = miscRegs[MISCREG_SCR];
1414  CPSR cpsr = miscRegs[MISCREG_CPSR];
1415 
1416  switch ((OperatingMode) (uint8_t) cpsr.mode) {
1417  case MODE_MON:
1418  case MODE_EL3T:
1419  case MODE_EL3H:
1420  return true;
1421  case MODE_HYP:
1422  case MODE_EL2T:
1423  case MODE_EL2H:
1424  return false;
1425  default:
1426  return !scr.ns;
1427  }
1428 }
1429 
1432 {
1433  CPSR cpsr = readMiscRegNoEffect(MISCREG_CPSR);
1434 
1435  return opModeToEL((OperatingMode)(uint8_t)cpsr.mode);
1436 }
1437 
1438 unsigned
1440 {
1441  SVCR svcr = miscRegs[MISCREG_SVCR];
1442  // If we are in Streaming Mode, we should return the Streaming Mode vector
1443  // length instead.
1444  if (svcr.sm) {
1445  return getCurSmeVecLenInBits();
1446  }
1447 
1448  if (!FullSystem) {
1449  return sveVL * 128;
1450  }
1451 
1452  panic_if(!tc,
1453  "A ThreadContext is needed to determine the SVE vector length "
1454  "in full-system mode");
1455 
1456  CPSR cpsr = miscRegs[MISCREG_CPSR];
1457  ExceptionLevel el = (ExceptionLevel) (uint8_t) cpsr.el;
1458 
1459  unsigned len = 0;
1460 
1461  if (el == EL1 || (el == EL0 && !ELIsInHost(tc, el))) {
1462  len = static_cast<ZCR>(miscRegs[MISCREG_ZCR_EL1]).len;
1463  }
1464 
1465  if (el == EL2 || (el == EL0 && ELIsInHost(tc, el))) {
1466  len = static_cast<ZCR>(miscRegs[MISCREG_ZCR_EL2]).len;
1467  } else if (release->has(ArmExtension::VIRTUALIZATION) && !isSecure(tc) &&
1468  (el == EL0 || el == EL1)) {
1469  len = std::min(
1470  len,
1471  static_cast<unsigned>(
1472  static_cast<ZCR>(miscRegs[MISCREG_ZCR_EL2]).len));
1473  }
1474 
1475  if (el == EL3) {
1476  len = static_cast<ZCR>(miscRegs[MISCREG_ZCR_EL3]).len;
1477  } else if (release->has(ArmExtension::SECURITY)) {
1478  len = std::min(
1479  len,
1480  static_cast<unsigned>(
1481  static_cast<ZCR>(miscRegs[MISCREG_ZCR_EL3]).len));
1482  }
1483 
1484  len = std::min(len, sveVL - 1);
1485 
1486  return (len + 1) * 128;
1487 }
1488 
1489 unsigned
1491 {
1492  if (!FullSystem) {
1493  return smeVL * 128;
1494  }
1495 
1496  panic_if(!tc,
1497  "A ThreadContext is needed to determine the SME vector length "
1498  "in full-system mode");
1499 
1500  CPSR cpsr = miscRegs[MISCREG_CPSR];
1501  ExceptionLevel el = (ExceptionLevel) (uint8_t) cpsr.el;
1502 
1503  unsigned len = 0;
1504 
1505  if (el == EL1 || (el == EL0 && !ELIsInHost(tc, el))) {
1506  len = static_cast<SMCR>(miscRegs[MISCREG_SMCR_EL1]).len;
1507  }
1508 
1509  if (el == EL2 || (el == EL0 && ELIsInHost(tc, el))) {
1510  len = static_cast<SMCR>(miscRegs[MISCREG_SMCR_EL2]).len;
1511  } else if (release->has(ArmExtension::VIRTUALIZATION) && !isSecure(tc) &&
1512  (el == EL0 || el == EL1)) {
1513  len = std::min(
1514  len,
1515  static_cast<unsigned>(
1516  static_cast<SMCR>(miscRegs[MISCREG_SMCR_EL2]).len));
1517  }
1518 
1519  if (el == EL3) {
1520  len = static_cast<SMCR>(miscRegs[MISCREG_SMCR_EL3]).len;
1521  } else if (release->has(ArmExtension::SECURITY)) {
1522  len = std::min(
1523  len,
1524  static_cast<unsigned>(
1525  static_cast<SMCR>(miscRegs[MISCREG_SMCR_EL3]).len));
1526  }
1527 
1528  len = std::min(len, smeVL - 1);
1529 
1530  // len + 1 must be a power of 2! Round down to the nearest whole power of
1531  // two.
1532  static const unsigned LUT[16] = {0, 1, 1, 3, 3, 3, 3, 7,
1533  7, 7, 7, 7, 7, 7, 7, 15};
1534  len = LUT[len];
1535 
1536  return (len + 1) * 128;
1537 }
1538 
1539 void
1541 {
1542  DPRINTF(Checkpoint, "Serializing Arm Misc Registers\n");
1544 }
1545 
1546 void
1548 {
1549  DPRINTF(Checkpoint, "Unserializing Arm Misc Registers\n");
1551 
1552  for (auto idx = 0; idx < NUM_MISCREGS; idx++) {
1553  if (!lookUpMiscReg[idx].info[MISCREG_UNSERIALIZE] &&
1554  miscRegs[idx] != lookUpMiscReg[idx].reset()) {
1555  warn("Checkpoint value for register %s does not match "
1556  "current configuration (checkpointed: %#x, current: %#x)",
1557  miscRegName[idx], miscRegs[idx],
1558  lookUpMiscReg[idx].reset());
1559  miscRegs[idx] = lookUpMiscReg[idx].reset();
1560  }
1561  }
1562 
1563  CPSR tmp_cpsr = miscRegs[MISCREG_CPSR];
1564  updateRegMap(tmp_cpsr);
1565 }
1566 
1567 void
1570 {
1571  // If we're in timing mode then doing the translation in
1572  // functional mode then we're slightly distorting performance
1573  // results obtained from simulations. The translation should be
1574  // done in the same mode the core is running in. NOTE: This
1575  // can't be an atomic translation because that causes problems
1576  // with unexpected atomic snoop requests.
1577  warn_once("Doing AT (address translation) in functional mode! Fix Me!\n");
1578 
1579  auto req = std::make_shared<Request>(
1581  tc->pcState().instAddr(), tc->contextId());
1582 
1584  req, tc, mode, tran_type);
1585 
1586  PAR par = 0;
1587  if (fault == NoFault) {
1588  Addr paddr = req->getPaddr();
1589  uint64_t attr = getMMUPtr(tc)->getAttr();
1590  uint64_t attr1 = attr >> 56;
1591  if (!attr1 || attr1 ==0x44) {
1592  attr |= 0x100;
1593  attr &= ~ uint64_t(0x80);
1594  }
1595  par = (paddr & mask(47, 12)) | attr;
1596  DPRINTF(MiscRegs,
1597  "MISCREG: Translated addr %#x: PAR_EL1: %#xx\n",
1598  val, par);
1599  } else {
1600  ArmFault *arm_fault = static_cast<ArmFault *>(fault.get());
1601  arm_fault->update(tc);
1602  // Set fault bit and FSR
1603  FSR fsr = arm_fault->getFsr(tc);
1604 
1605  par.f = 1; // F bit
1606  par.fst = fsr.status; // FST
1607  par.ptw = (arm_fault->iss() >> 7) & 0x1; // S1PTW
1608  par.s = arm_fault->isStage2() ? 1 : 0; // S
1609 
1610  DPRINTF(MiscRegs,
1611  "MISCREG: Translated addr %#x fault fsr %#x: PAR: %#x\n",
1612  val, fsr, par);
1613  }
1615  return;
1616 }
1617 
1618 void
1621 {
1622  // If we're in timing mode then doing the translation in
1623  // functional mode then we're slightly distorting performance
1624  // results obtained from simulations. The translation should be
1625  // done in the same mode the core is running in. NOTE: This
1626  // can't be an atomic translation because that causes problems
1627  // with unexpected atomic snoop requests.
1628  warn_once("Doing AT (address translation) in functional mode! Fix Me!\n");
1629 
1630  auto req = std::make_shared<Request>(
1632  tc->pcState().instAddr(), tc->contextId());
1633 
1635  req, tc, mode, tran_type);
1636 
1637  PAR par = 0;
1638  if (fault == NoFault) {
1639  Addr paddr = req->getPaddr();
1640  TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
1642 
1643  uint8_t max_paddr_bit = 0;
1644  if (release->has(ArmExtension::LPAE) &&
1645  (ttbcr.eae || tran_type & MMU::HypMode ||
1646  ((tran_type & MMU::S1S2NsTran) && hcr.vm) )) {
1647 
1648  max_paddr_bit = 39;
1649  } else {
1650  max_paddr_bit = 31;
1651  }
1652 
1653  par = (paddr & mask(max_paddr_bit, 12)) |
1654  (getMMUPtr(tc)->getAttr());
1655 
1656  DPRINTF(MiscRegs,
1657  "MISCREG: Translated addr 0x%08x: PAR: 0x%08x\n",
1658  val, par);
1659  } else {
1660  ArmFault *arm_fault = static_cast<ArmFault *>(fault.get());
1661  arm_fault->update(tc);
1662  // Set fault bit and FSR
1663  FSR fsr = arm_fault->getFsr(tc);
1664 
1665  par.f = 0x1; // F bit
1666  par.lpae = fsr.lpae;
1667  par.ptw = (arm_fault->iss() >> 7) & 0x1;
1668  par.s = arm_fault->isStage2() ? 1 : 0;
1669 
1670  if (par.lpae) {
1671  // LPAE - rearange fault status
1672  par.fst = fsr.status;
1673  } else {
1674  // VMSA - rearange fault status
1675  par.fs4_0 = fsr.fsLow | (fsr.fsHigh << 5);
1676  par.fs5 = fsr.ext;
1677  }
1678  DPRINTF(MiscRegs,
1679  "MISCREG: Translated addr 0x%08x fault fsr %#x: PAR: 0x%08x\n",
1680  val, fsr, par);
1681  }
1683  return;
1684 }
1685 
1686 template <class XC>
1687 static inline void
1689  Addr cacheBlockMask)
1690 {
1691  // Should only every see invalidations / direct writes
1692  assert(pkt->isInvalidate() || pkt->isWrite());
1693 
1694  DPRINTF(LLSC, "%s: handling snoop for address: %#x locked: %d\n",
1695  tc->getCpuPtr()->name(), pkt->getAddr(),
1696  xc->readMiscReg(MISCREG_LOCKFLAG));
1697  if (!xc->readMiscReg(MISCREG_LOCKFLAG))
1698  return;
1699 
1700  Addr locked_addr = xc->readMiscReg(MISCREG_LOCKADDR) & cacheBlockMask;
1701  // If no caches are attached, the snoop address always needs to be masked
1702  Addr snoop_addr = pkt->getAddr() & cacheBlockMask;
1703 
1704  DPRINTF(LLSC, "%s: handling snoop for address: %#x locked addr: %#x\n",
1705  tc->getCpuPtr()->name(), snoop_addr, locked_addr);
1706  if (locked_addr == snoop_addr) {
1707  DPRINTF(LLSC, "%s: address match, clearing lock and signaling sev\n",
1708  tc->getCpuPtr()->name());
1709  xc->setMiscReg(MISCREG_LOCKFLAG, false);
1710  // Implement ARMv8 WFE/SEV semantics
1711  sendEvent(tc);
1712  xc->setMiscReg(MISCREG_SEV_MAILBOX, true);
1713  }
1714 }
1715 
1716 void
1718 {
1719  lockedSnoopHandler(tc, tc, pkt, cacheBlockMask);
1720 }
1721 
1722 void
1724 {
1725  lockedSnoopHandler(xc->tcBase(), xc, pkt, cacheBlockMask);
1726 }
1727 
1728 void
1730 {
1731  tc->setMiscReg(MISCREG_LOCKADDR, req->getPaddr());
1732  tc->setMiscReg(MISCREG_LOCKFLAG, true);
1733  DPRINTF(LLSC, "%s: Placing address %#x in monitor\n",
1734  tc->getCpuPtr()->name(), req->getPaddr());
1735 }
1736 
1737 void
1739 {
1740  xc->setMiscReg(MISCREG_LOCKADDR, req->getPaddr());
1741  xc->setMiscReg(MISCREG_LOCKFLAG, true);
1742  DPRINTF(LLSC, "%s: Placing address %#x in monitor\n",
1743  xc->tcBase()->getCpuPtr()->name(), req->getPaddr());
1744 }
1745 
1746 void
1748 {
1749  DPRINTF(LLSC, "%s: handling snoop lock hit address: %#x\n",
1751  tc->setMiscReg(MISCREG_LOCKFLAG, false);
1753 }
1754 
1755 void
1757 {
1758  DPRINTF(LLSC, "%s: handling snoop lock hit address: %#x\n",
1759  xc->tcBase()->getCpuPtr()->name(),
1761  xc->setMiscReg(MISCREG_LOCKFLAG, false);
1762  xc->setMiscReg(MISCREG_SEV_MAILBOX, true);
1763 }
1764 
1765 template <class XC>
1766 static inline bool
1768  Addr cacheBlockMask)
1769 {
1770  if (req->isSwap())
1771  return true;
1772 
1773  DPRINTF(LLSC, "Handling locked write for address %#x in monitor.\n",
1774  req->getPaddr());
1775  // Verify that the lock flag is still set and the address
1776  // is correct
1777  bool lock_flag = xc->readMiscReg(MISCREG_LOCKFLAG);
1778  Addr lock_addr = xc->readMiscReg(MISCREG_LOCKADDR) & cacheBlockMask;
1779  if (!lock_flag || (req->getPaddr() & cacheBlockMask) != lock_addr) {
1780  // Lock flag not set or addr mismatch in CPU;
1781  // don't even bother sending to memory system
1782  req->setExtraData(0);
1783  xc->setMiscReg(MISCREG_LOCKFLAG, false);
1784  DPRINTF(LLSC, "clearing lock flag in handle locked write\n",
1785  tc->getCpuPtr()->name());
1786  // the rest of this code is not architectural;
1787  // it's just a debugging aid to help detect
1788  // livelock by warning on long sequences of failed
1789  // store conditionals
1790  int stCondFailures = xc->readStCondFailures();
1791  stCondFailures++;
1792  xc->setStCondFailures(stCondFailures);
1793  if (stCondFailures % 100000 == 0) {
1794  warn("context %d: %d consecutive "
1795  "store conditional failures\n",
1796  tc->contextId(), stCondFailures);
1797  }
1798 
1799  // store conditional failed already, so don't issue it to mem
1800  return false;
1801  }
1802  return true;
1803 }
1804 
1805 bool
1806 ISA::handleLockedWrite(const RequestPtr &req, Addr cacheBlockMask)
1807 {
1808  return lockedWriteHandler(tc, tc, req, cacheBlockMask);
1809 }
1810 
1811 bool
1813  Addr cacheBlockMask)
1814 {
1815  return lockedWriteHandler(xc->tcBase(), xc, req, cacheBlockMask);
1816 }
1817 
1818 void
1820 {
1821  // A spinlock would typically include a Wait For Event (WFE) to
1822  // conserve energy. The ARMv8 architecture specifies that an event
1823  // is automatically generated when clearing the exclusive monitor
1824  // to wake up the processor in WFE.
1825  DPRINTF(LLSC, "Clearing lock and signaling sev\n");
1826  tc->setMiscReg(MISCREG_LOCKFLAG, false);
1827  // Implement ARMv8 WFE/SEV semantics
1828  sendEvent(tc);
1830 }
1831 
1832 void
1834 {
1835  // A spinlock would typically include a Wait For Event (WFE) to
1836  // conserve energy. The ARMv8 architecture specifies that an event
1837  // is automatically generated when clearing the exclusive monitor
1838  // to wake up the processor in WFE.
1839  DPRINTF(LLSC, "Clearing lock and signaling sev\n");
1840  xc->setMiscReg(MISCREG_LOCKFLAG, false);
1841  // Implement ARMv8 WFE/SEV semantics
1842  sendEvent(xc->tcBase());
1843  xc->setMiscReg(MISCREG_SEV_MAILBOX, true);
1844 }
1845 
1846 } // namespace ArmISA
1847 } // namespace gem5
gem5::ArmISA::ISA::setMiscReg
void setMiscReg(RegIndex, RegVal val) override
Definition: isa.cc:655
gem5::ArmISA::MISCREG_SP_EL0
@ MISCREG_SP_EL0
Definition: misc.hh:622
gem5::ArmISA::MODE_EL2H
@ MODE_EL2H
Definition: types.hh:285
gem5::ArmISA::MISCREG_FAR_EL1
@ MISCREG_FAR_EL1
Definition: misc.hh:655
gem5::ArmISA::MISCREG_NSACR
@ MISCREG_NSACR
Definition: misc.hh:250
gic_v3_cpu_interface.hh
gem5::Request::funcRequestorId
@ funcRequestorId
This requestor id is used for functional requests that don't come from a particular device.
Definition: request.hh:279
gem5::ArmISA::MISCREG_CPSR
@ MISCREG_CPSR
Definition: misc.hh:66
gem5::ArmISA::BaseISADevice::setISA
virtual void setISA(ISA *isa)
Definition: isa_device.cc:55
gem5::ArmISA::MISCREG_ID_MMFR4
@ MISCREG_ID_MMFR4
Definition: misc.hh:224
gem5::ArmISA::MISCREG_CPTR_EL2
@ MISCREG_CPTR_EL2
Definition: misc.hh:594
gem5::ArmISA::MMU::S12E0Tran
@ S12E0Tran
Definition: mmu.hh:130
gem5::ArmSystem::physAddrRange
uint8_t physAddrRange() const
Returns the supported physical address range in bits.
Definition: system.hh:220
gem5::ArmISA::MISCREG_VTTBR
@ MISCREG_VTTBR
Definition: misc.hh:453
gem5::ArmISA::MISCREG_PMCR
@ MISCREG_PMCR
Definition: misc.hh:356
gem5::ArmISA::MISCREG_CNTV_TVAL
@ MISCREG_CNTV_TVAL
Definition: misc.hh:432
gem5::ArmISA::ISA::addressTranslation64
void addressTranslation64(MMU::ArmTranslationType tran_type, BaseMMU::Mode mode, Request::Flags flags, RegVal val)
Definition: isa.cc:1568
gem5::ArmISA::SelfDebug::setenableTDETGE
void setenableTDETGE(HCR hcr, HDCR mdcr)
Definition: self_debug.hh:357
gem5::PCStateBase::instAddr
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
Definition: pcstate.hh:107
gem5::BaseMMU::Read
@ Read
Definition: mmu.hh:56
gem5::ArmISA::MISCREG_CSSELR
@ MISCREG_CSSELR
Definition: misc.hh:235
gem5::ArmISA::SelfDebug::init
void init(ThreadContext *tc)
Definition: self_debug.cc:323
gem5::ArmISA::MMU::S12E1Tran
@ S12E1Tran
Definition: mmu.hh:131
gem5::ArmISA::ISA::dummyDevice
DummyISADevice dummyDevice
Dummy device for to handle non-existing ISA devices.
Definition: isa.hh:80
gem5::ArmISA::MISCREG_TTBR0_EL2
@ MISCREG_TTBR0_EL2
Definition: misc.hh:609
gem5::ArmISA::MISCREG_AMAIR_EL1
@ MISCREG_AMAIR_EL1
Definition: misc.hh:750
gem5::ArmISA::MISCREG_AT_S12E0R_Xt
@ MISCREG_AT_S12E0R_Xt
Definition: misc.hh:680
gem5::ThreadContext::readMiscReg
virtual RegVal readMiscReg(RegIndex misc_reg)=0
gem5::ArmISA::MISCREG_CNTHVS_TVAL_EL2
@ MISCREG_CNTHVS_TVAL_EL2
Definition: misc.hh:808
gem5::NoFault
constexpr decltype(nullptr) NoFault
Definition: types.hh:253
gem5::ThreadContext::getSystemPtr
virtual System * getSystemPtr()=0
gem5::ArmISA::ISA::currEL
ExceptionLevel currEL() const
Returns the current Exception Level (EL) of the ISA object.
Definition: isa.cc:1431
gem5::ArmISA::MISCREG_AMAIR_EL12
@ MISCREG_AMAIR_EL12
Definition: misc.hh:751
gem5::ArmISA::MODE_MON
@ MODE_MON
Definition: types.hh:292
gem5::ArmISA::MISCREG_HSTR
@ MISCREG_HSTR
Definition: misc.hh:257
gem5::BaseISA::tc
ThreadContext * tc
Definition: isa.hh:66
gem5::ArmISA::MISCREG_MDCR_EL3
@ MISCREG_MDCR_EL3
Definition: misc.hh:602
gem5::ArmISA::MISCREG_L2CTLR
@ MISCREG_L2CTLR
Definition: misc.hh:372
gem5::ArmISA::MISCREG_TTBR0_EL3
@ MISCREG_TTBR0_EL3
Definition: misc.hh:615
warn
#define warn(...)
Definition: logging.hh:256
gem5::System::Threads::size
int size() const
Definition: system.hh:210
gem5::ArmISA::MISCREG_ID_ISAR5
@ MISCREG_ID_ISAR5
Definition: misc.hh:230
gem5::ArmISA::ISA::selfDebug
SelfDebug * selfDebug
Definition: isa.hh:111
gem5::ArmISA::MISCREG_CNTP_CTL_EL02
@ MISCREG_CNTP_CTL_EL02
Definition: misc.hh:784
gem5::ArmISA::BaseISADevice::readMiscReg
virtual RegVal readMiscReg(int misc_reg)=0
Read a system register belonging to this device.
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::ExecContext::setMiscReg
virtual void setMiscReg(int misc_reg, RegVal val)=0
Sets a miscellaneous register, handling any architectural side effects due to writing that register.
gem5::ArmISA::MISCREG_SCTLR_EL3
@ MISCREG_SCTLR_EL3
Definition: misc.hh:597
gem5::ArmISA::MISCREG_AT_S1E3W_Xt
@ MISCREG_AT_S1E3W_Xt
Definition: misc.hh:683
gem5::ArmISA::MISCREG_PMEVTYPER5_EL0
@ MISCREG_PMEVTYPER5_EL0
Definition: misc.hh:823
system.hh
gem5::ArmISA::ISA::getCurSveVecLenInBits
unsigned getCurSveVecLenInBits() const
Definition: isa.cc:1439
gem5::ArmSystem::highestELIs64
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8)
Definition: system.hh:187
gem5::ArmISA::SelfDebug
Definition: self_debug.hh:242
gem5::ArmISA::MISCREG_CURRENTEL
@ MISCREG_CURRENTEL
Definition: misc.hh:624
gem5::ArmISA::MISCREG_TTBR0
@ MISCREG_TTBR0
Definition: misc.hh:259
gem5::ArmISA::int_reg::Sp0
constexpr RegId Sp0
Definition: int.hh:233
gem5::ArmISA::ISA::gicv3CpuInterface
std::unique_ptr< BaseISADevice > gicv3CpuInterface
Definition: isa.hh:89
gem5::ArmISA::cc_reg::V
constexpr RegId V
Definition: cc.hh:96
gem5::igbreg::txd_op::ic
bool ic(TxDesc *d)
Definition: i8254xGBe_defs.hh:302
gem5::ArmISA::MISCREG_CNTVCT
@ MISCREG_CNTVCT
Definition: misc.hh:420
gem5::Gicv3::getCPUInterface
Gicv3CPUInterface * getCPUInterface(int cpu_id) const
Definition: gic_v3.hh:189
gem5::ArmISA::MISCREG_AT_S12E0W_Xt
@ MISCREG_AT_S12E0W_Xt
Definition: misc.hh:681
gem5::ArmISA::MISCREG_DBGWCR15
@ MISCREG_DBGWCR15
Definition: misc.hh:174
gem5::ArmISA::MISCREG_MPIDR
@ MISCREG_MPIDR
Definition: misc.hh:214
gem5::ArmISA::el
Bitfield< 3, 2 > el
Definition: misc_types.hh:73
gem5::ArmISA::MISCREG_CNTFRQ
@ MISCREG_CNTFRQ
Definition: misc.hh:418
gem5::ArmISA::MISCREG_CONTEXTIDR
@ MISCREG_CONTEXTIDR
Definition: misc.hh:404
gem5::ArmISA::MISCREG_CNTHPS_TVAL_EL2
@ MISCREG_CNTHPS_TVAL_EL2
Definition: misc.hh:801
gem5::ArmISA::MISCREG_CNTV_CTL_EL0
@ MISCREG_CNTV_CTL_EL0
Definition: misc.hh:781
gem5::ArmISA::MISCREG_CNTHVS_CVAL_EL2
@ MISCREG_CNTHVS_CVAL_EL2
Definition: misc.hh:807
gem5::MatStore
Backing store for matrices.
Definition: matrix.hh:129
gem5::ArmISA::MISCREG_ATS1CUW
@ MISCREG_ATS1CUW
Definition: misc.hh:312
gem5::ArmISA::MISCREG_TCR_EL2
@ MISCREG_TCR_EL2
Definition: misc.hh:610
gem5::ArmISA::MISCREG_DBGBCR15_EL1
@ MISCREG_DBGBCR15_EL1
Definition: misc.hh:494
gem5::BaseCPU::getInterruptController
BaseInterrupts * getInterruptController(ThreadID tid)
Definition: base.hh:228
gem5::ArmISA::MISCREG_CNTP_CTL_EL0
@ MISCREG_CNTP_CTL_EL0
Definition: misc.hh:778
gem5::ArmISA::MISCREG_FPSID
@ MISCREG_FPSID
Definition: misc.hh:76
gem5::ArmISA::MISCREG_SDCR
@ MISCREG_SDCR
Definition: misc.hh:247
gem5::ArmISA::MISCREG_FAR_EL12
@ MISCREG_FAR_EL12
Definition: misc.hh:656
gem5::ArmISA::MMU::getAttr
uint64_t getAttr() const
Definition: mmu.hh:369
gem5::ArmISA::MISCREG_SCTLR_NS
@ MISCREG_SCTLR_NS
Definition: misc.hh:241
gem5::ArmISA::MISCREG_VPIDR
@ MISCREG_VPIDR
Definition: misc.hh:238
warn_once
#define warn_once(...)
Definition: logging.hh:260
gem5::ThreadContext::getReg
virtual RegVal getReg(const RegId &reg) const
Definition: thread_context.cc:180
gem5::ArmISA::MISCREG_MDCR_EL2
@ MISCREG_MDCR_EL2
Definition: misc.hh:593
gem5::ArmISA::ISA::haveLargeAsid64
bool haveLargeAsid64
Definition: isa.hh:93
gem5::ArmISA::MISCREG_SMCR_EL3
@ MISCREG_SMCR_EL3
Definition: misc.hh:1088
gem5::ArmISA::MISCREG_MVFR1
@ MISCREG_MVFR1
Definition: misc.hh:78
gem5::ArmISA::MISCREG_ATS12NSOUR
@ MISCREG_ATS12NSOUR
Definition: misc.hh:315
gem5::ArmISA::MODE_EL2T
@ MODE_EL2T
Definition: types.hh:284
gem5::ArmISA::ISA::takeOverFrom
void takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc) override
Definition: isa.cc:179
gem5::ArmISA::ISA::handleLockedSnoop
void handleLockedSnoop(PacketPtr pkt, Addr cacheBlockMask) override
Definition: isa.cc:1717
gem5::InstDecoder::as
Type & as()
Definition: decoder.hh:71
gem5::BaseMMU::Mode
Mode
Definition: mmu.hh:56
gem5::ArmISA::attr
attr
Definition: misc_types.hh:713
gem5::ArmISA::lockedWriteHandler
static bool lockedWriteHandler(ThreadContext *tc, XC *xc, const RequestPtr &req, Addr cacheBlockMask)
Definition: isa.cc:1767
gem5::ArmISA::MISCREG_NZCV
@ MISCREG_NZCV
Definition: misc.hh:625
gem5::PCStateBase::as
Target & as()
Definition: pcstate.hh:72
gem5::ArmISA::ISA::updateRegMap
void updateRegMap(CPSR cpsr)
Definition: isa.hh:129
gem5::BaseMMU::Write
@ Write
Definition: mmu.hh:56
gem5::ArmISA::MISCREG_SCR_EL3
@ MISCREG_SCR_EL3
Definition: misc.hh:599
gem5::ArmISA::ISA::release
const ArmRelease * release
This could be either a FS or a SE release.
Definition: isa.hh:103
gem5::ThreadContext::getMMUPtr
virtual BaseMMU * getMMUPtr()=0
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::ThreadContext::pcState
virtual const PCStateBase & pcState() const =0
gem5::ArmISA::ISA::timer
std::unique_ptr< BaseISADevice > timer
Definition: isa.hh:86
gem5::ArmISA::MISCREG_DBGBCR0
@ MISCREG_DBGBCR0
Definition: misc.hh:127
gem5::ArmISA::MISCREG_DAIF
@ MISCREG_DAIF
Definition: misc.hh:626
gem5::ArmISA::MISCREG_CNTP_TVAL
@ MISCREG_CNTP_TVAL
Definition: misc.hh:427
gem5::ArmISA::MISCREG_TTBR1_EL1
@ MISCREG_TTBR1_EL1
Definition: misc.hh:605
gem5::ArmISA::MISCREG_VBAR_EL2
@ MISCREG_VBAR_EL2
Definition: misc.hh:762
gem5::ArmISA::MISCREG_TTBCR
@ MISCREG_TTBCR
Definition: misc.hh:265
gem5::ArmISA::MISCREG_AFSR1_EL2
@ MISCREG_AFSR1_EL2
Definition: misc.hh:649
random.hh
gem5::ArmISA::MISCREG_HSCTLR
@ MISCREG_HSCTLR
Definition: misc.hh:251
gem5::ArmISA::SelfDebug::updateOSLock
void updateOSLock(RegVal val)
Definition: self_debug.hh:363
gem5::ArmSystem::smeVL
unsigned smeVL() const
Returns the SME vector length at reset, in quadwords.
Definition: system.hh:212
gem5::ArmISA::MISCREG_ESR_EL2
@ MISCREG_ESR_EL2
Definition: misc.hh:650
gem5::ArmISA::MMU::S1E0Tran
@ S1E0Tran
Definition: mmu.hh:126
gem5::ArmSystem::haveLargeAsid64
bool haveLargeAsid64() const
Returns true if ASID is 16 bits in AArch64 (ARMv8)
Definition: system.hh:206
gem5::ArmISA::MISCREG_AT_S1E0W_Xt
@ MISCREG_AT_S1E0W_Xt
Definition: misc.hh:668
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:776
gem5::ArmISA::MISCREG_OSLSR_EL1
@ MISCREG_OSLSR_EL1
Definition: misc.hh:534
gem5::ArmISA::MMU::S1CTran
@ S1CTran
Definition: mmu.hh:117
gem5::ArmISA::MISCREG_PMINTENSET_EL1
@ MISCREG_PMINTENSET_EL1
Definition: misc.hh:732
gem5::Packet::isWrite
bool isWrite() const
Definition: packet.hh:594
gem5::ArmISA::MISCREG_TLBTR
@ MISCREG_TLBTR
Definition: misc.hh:213
gem5::ArmISA::daif
Bitfield< 9, 6 > daif
Definition: misc_types.hh:70
gem5::ArmISA::MISCREG_CONTEXTIDR_EL1
@ MISCREG_CONTEXTIDR_EL1
Definition: misc.hh:767
gem5::ArmISA::MISCREG_ID_AA64AFR1_EL1
@ MISCREG_ID_AA64AFR1_EL1
Definition: misc.hh:571
gem5::ArmISA::miscRegName
const char *const miscRegName[]
Definition: misc.hh:1748
gem5::ArmISA::MISCREG_TCR_EL3
@ MISCREG_TCR_EL3
Definition: misc.hh:616
gem5::ArmISA::MISCREG_HIFAR
@ MISCREG_HIFAR
Definition: misc.hh:295
gem5::ArmISA::MISCREG_LOCKFLAG
@ MISCREG_LOCKFLAG
Definition: misc.hh:88
gem5::ThreadContext::contextId
virtual ContextID contextId() const =0
gem5::ArmISA::EL1
@ EL1
Definition: types.hh:274
gem5::ArmISA::ISA::copyRegsFrom
void copyRegsFrom(ThreadContext *src) override
Definition: isa.cc:186
gem5::ArmISA::MISCREG_ID_ISAR3
@ MISCREG_ID_ISAR3
Definition: misc.hh:228
gem5::ArmISA::int_reg::Sp1
constexpr RegId Sp1
Definition: int.hh:234
gem5::ArmISA::MISCREG_ID_AA64MMFR0_EL1
@ MISCREG_ID_AA64MMFR0_EL1
Definition: misc.hh:574
gem5::X86ISA::system
Bitfield< 15 > system
Definition: misc.hh:1004
gem5::ArmISA::MISCREG_ID_MMFR3
@ MISCREG_ID_MMFR3
Definition: misc.hh:223
gem5::ArmISA::opModeToEL
static ExceptionLevel opModeToEL(OperatingMode mode)
Definition: types.hh:391
gem5::ArmISA::MISCREG_DBGOSLAR
@ MISCREG_DBGOSLAR
Definition: misc.hh:192
gem5::ArmISA::ELIsInHost
bool ELIsInHost(ThreadContext *tc, ExceptionLevel el)
Returns true if the current exception level el is executing a Host OS or an application of a Host OS ...
Definition: utility.cc:281
gem5::ArmISA::CpsrMaskQ
static const uint32_t CpsrMaskQ
Definition: misc.hh:2818
gem5::ArmISA::MISCREG_PMOVSSET
@ MISCREG_PMOVSSET
Definition: misc.hh:371
gem5::ArmISA::ISA::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: isa.cc:1540
gem5::ArmISA::MISCREG_MAIR_EL1
@ MISCREG_MAIR_EL1
Definition: misc.hh:748
gem5::ArmISA::MMU::S1E3Tran
@ S1E3Tran
Definition: mmu.hh:129
gem5::ArmISA::MISCREG_ID_ISAR1
@ MISCREG_ID_ISAR1
Definition: misc.hh:226
gem5::ArmISA::MISCREG_ATS12NSOPW
@ MISCREG_ATS12NSOPW
Definition: misc.hh:314
gem5::ArmISA::MISCREG_ELR_EL12
@ MISCREG_ELR_EL12
Definition: misc.hh:621
gem5::VegaISA::r
Bitfield< 5 > r
Definition: pagetable.hh:60
SERIALIZE_MAPPING
#define SERIALIZE_MAPPING(member, names, size)
Definition: serialize.hh:660
gem5::ExecContext::readMiscReg
virtual RegVal readMiscReg(int misc_reg)=0
Reads a miscellaneous register, handling any architectural side effects due to reading that register.
gem5::ArmISA::FpscrQcMask
static const uint32_t FpscrQcMask
Definition: misc.hh:2835
gem5::ArmISA::MISCREG_ICH_LR15_EL2
@ MISCREG_ICH_LR15_EL2
Definition: misc.hh:936
gem5::ArmISA::ISA::sveVL
unsigned sveVL
SVE vector length in quadwords.
Definition: isa.hh:97
gem5::ArmISA::MISCREG_CNTV_CVAL_EL02
@ MISCREG_CNTV_CVAL_EL02
Definition: misc.hh:788
system.hh
gem5::ArmISA::MISCREG_IMPLEMENTED
@ MISCREG_IMPLEMENTED
Definition: misc.hh:1143
gem5::ArmISA::MISCREG_ID_AA64DFR1_EL1
@ MISCREG_ID_AA64DFR1_EL1
Definition: misc.hh:569
gem5::ArmISA::MISCREG_SCTLR
@ MISCREG_SCTLR
Definition: misc.hh:240
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::ArmISA::MISCREG_PAR_EL1
@ MISCREG_PAR_EL1
Definition: misc.hh:661
faults.hh
gem5::ArmISA::MISCREG_ICC_AP0R0
@ MISCREG_ICC_AP0R0
Definition: misc.hh:981
gem5::ArmISA::MODE_EL3H
@ MODE_EL3H
Definition: types.hh:287
gem5::ArmISA::MISCREG_CNTVCT_EL0
@ MISCREG_CNTVCT_EL0
Definition: misc.hh:777
gem5::ArmISA::MISCREG_CNTPCT_EL0
@ MISCREG_CNTPCT_EL0
Definition: misc.hh:776
gem5::ArmISA::FpscrExcMask
static const uint32_t FpscrExcMask
Definition: misc.hh:2839
gem5::ArmISA::MISCREG_CNTP_CTL
@ MISCREG_CNTP_CTL
Definition: misc.hh:421
gem5::PowerISA::PCState
Definition: pcstate.hh:42
gem5::ArmISA::SelfDebug::updateDBGBCR
void updateDBGBCR(int index, DBGBCR val)
Definition: self_debug.hh:369
gem5::ArmISA::MISCREG_CNTP_TVAL_EL02
@ MISCREG_CNTP_TVAL_EL02
Definition: misc.hh:786
gem5::ArmISA::MISCREG_ID_MMFR1
@ MISCREG_ID_MMFR1
Definition: misc.hh:221
gem5::ArmISA::MISCREG_CNTV_TVAL_EL02
@ MISCREG_CNTV_TVAL_EL02
Definition: misc.hh:789
gem5::ArmSystem::getGIC
BaseGic * getGIC() const
Get a pointer to the system's GIC.
Definition: system.hh:180
gem5::ArmISA::MISCREG_DBGBCR15
@ MISCREG_DBGBCR15
Definition: misc.hh:142
gem5::ArmISA::MISCREG_CNTKCTL_EL12
@ MISCREG_CNTKCTL_EL12
Definition: misc.hh:791
gem5::ArmISA::MMU::S1E2Tran
@ S1E2Tran
Definition: mmu.hh:128
gem5::ArmISA::getMMUPtr
MMU * getMMUPtr(T *tc)
Definition: mmu.hh:516
gem5::ArmISA::MISCREG_VTCR_EL2
@ MISCREG_VTCR_EL2
Definition: misc.hh:612
gem5::Random::random
std::enable_if_t< std::is_integral_v< T >, T > random()
Use the SFINAE idiom to choose an implementation based on whether the type is integral or floating po...
Definition: random.hh:90
gem5::ArmISA::MISCREG_DACR
@ MISCREG_DACR
Definition: misc.hh:270
gem5::ArmISA::MISCREG_HCPTR
@ MISCREG_HCPTR
Definition: misc.hh:256
gem5::ArmISA::MISCREG_ID_ISAR0
@ MISCREG_ID_ISAR0
Definition: misc.hh:225
gem5::ArmISA::MISCREG_CNTKCTL_EL1
@ MISCREG_CNTKCTL_EL1
Definition: misc.hh:790
gem5::ArmISA::MISCREG_DBGDSCRext
@ MISCREG_DBGDSCRext
Definition: misc.hh:108
gem5::ArmISA::MISCREG_MAIR_EL2
@ MISCREG_MAIR_EL2
Definition: misc.hh:752
gem5::ArmISA::MISCREG_ID_MMFR2
@ MISCREG_ID_MMFR2
Definition: misc.hh:222
gem5::ArmISA::MISCREG_SVCR
@ MISCREG_SVCR
Definition: misc.hh:1084
gem5::ArmISA::SelfDebug::setbSDD
void setbSDD(RegVal val)
Definition: self_debug.hh:337
gem5::SimObject::Params
SimObjectParams Params
Definition: sim_object.hh:170
gem5::ArmISA::MISCREG_TTBR1_EL12
@ MISCREG_TTBR1_EL12
Definition: misc.hh:606
mmu.hh
gem5::ArmISA::ISA::handleLockedRead
void handleLockedRead(const RequestPtr &req) override
Definition: isa.cc:1729
gem5::ArmISA::MISCREG_SCTLR_S
@ MISCREG_SCTLR_S
Definition: misc.hh:242
gem5::ArmISA::ArmFault::iss
virtual uint32_t iss() const =0
gem5::FloatRegClass
@ FloatRegClass
Floating-point register.
Definition: reg_class.hh:61
gem5::ArmISA::MISCREG_DBGWCR15_EL1
@ MISCREG_DBGWCR15_EL1
Definition: misc.hh:526
gem5::ArmISA::MMU::UserMode
@ UserMode
Definition: mmu.hh:111
gem5::ArmISA::MISCREG_CNTHP_TVAL_EL2
@ MISCREG_CNTHP_TVAL_EL2
Definition: misc.hh:798
gem5::ArmISA::MiscRegLUTEntryInitializer::reset
chain reset(uint64_t res_val) const
Definition: misc.hh:1252
gem5::ArmRelease::has
bool has(ArmExtension ext) const
Definition: system.hh:76
gem5::ArmISA::MISCREG_CNTHCTL_EL2
@ MISCREG_CNTHCTL_EL2
Definition: misc.hh:795
htm.hh
gem5::ArmISA::Interrupts
Definition: interrupts.hh:71
gem5::Flags< FlagsType >
gem5::ArmISA::MISCREG_CNTVOFF
@ MISCREG_CNTVOFF
Definition: misc.hh:438
gem5::ArmISA::MODE_EL3T
@ MODE_EL3T
Definition: types.hh:286
gem5::ArmISA::SelfDebug::setMDBGen
void setMDBGen(RegVal val)
Definition: self_debug.hh:351
gem5::ArmISA::ISA::pmu
BaseISADevice * pmu
Definition: isa.hh:83
gem5::ArmISA::MISCREG_ELR_EL1
@ MISCREG_ELR_EL1
Definition: misc.hh:620
gem5::ArmISA::MISCREG_PRRR
@ MISCREG_PRRR
Definition: misc.hh:374
gem5::BaseISA::_regClasses
RegClasses _regClasses
Definition: isa.hh:68
decoder.hh
gem5::ThreadContext::setHtmCheckpointPtr
virtual void setHtmCheckpointPtr(BaseHTMCheckpointPtr cpt)=0
gem5::VecRegContainer
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
Definition: vec_reg.hh:123
gem5::ArmISA::MISCREG_DBGWCR0
@ MISCREG_DBGWCR0
Definition: misc.hh:159
interrupts.hh
gem5::ArmISA::ISA::handleLockedSnoopHit
void handleLockedSnoopHit() override
Definition: isa.cc:1747
gem5::ArmISA::MISCREG_ATS1CUR
@ MISCREG_ATS1CUR
Definition: misc.hh:311
gem5::ArmISA::MISCREG_ID_AA64PFR1_EL1
@ MISCREG_ID_AA64PFR1_EL1
Definition: misc.hh:567
gem5::ArmISA::MISCREG_SCTLR_EL12
@ MISCREG_SCTLR_EL12
Definition: misc.hh:585
gem5::ArmISA::SelfDebug::setMDSCRvals
void setMDSCRvals(RegVal val)
Definition: self_debug.hh:343
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::ArmISA::MODE_HYP
@ MODE_HYP
Definition: types.hh:294
gem5::ArmISA::MISCREG_CPACR_EL12
@ MISCREG_CPACR_EL12
Definition: misc.hh:588
gem5::ArmISA::MISCREG_SCTLR_EL1
@ MISCREG_SCTLR_EL1
Definition: misc.hh:584
gem5::ArmISA::MISCREG_ID_AA64MMFR2_EL1
@ MISCREG_ID_AA64MMFR2_EL1
Definition: misc.hh:844
gem5::Named::name
virtual std::string name() const
Definition: named.hh:47
gem5::ArmISA::MISCREG_ID_ISAR2
@ MISCREG_ID_ISAR2
Definition: misc.hh:227
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::ArmISA::MISCREG_ICH_LRC15
@ MISCREG_ICH_LRC15
Definition: misc.hh:1073
gem5::ArmISA::MISCREG_HDCR
@ MISCREG_HDCR
Definition: misc.hh:255
gem5::ArmISA::MISCREG_CPTR_EL3
@ MISCREG_CPTR_EL3
Definition: misc.hh:601
gem5::ArmISA::MISCREG_ID_ISAR4
@ MISCREG_ID_ISAR4
Definition: misc.hh:229
gem5::ArmISA::MISCREG_TCR_EL12
@ MISCREG_TCR_EL12
Definition: misc.hh:608
gem5::ArmISA::MISCREG_CONTEXTIDR_EL12
@ MISCREG_CONTEXTIDR_EL12
Definition: misc.hh:768
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:210
gem5::ArmISA::MISCREG_PMOVSSET_EL0
@ MISCREG_PMOVSSET_EL0
Definition: misc.hh:747
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
gem5::ArmISA::lookUpMiscReg
std::vector< struct MiscRegLUTEntry > lookUpMiscReg(NUM_MISCREGS)
Definition: misc.hh:1627
gem5::ArmISA::cc_reg::C
constexpr RegId C
Definition: cc.hh:95
gem5::ThreadContext::getDecoderPtr
virtual InstDecoder * getDecoderPtr()=0
gem5::ArmISA::MISCREG_MAIR1
@ MISCREG_MAIR1
Definition: misc.hh:383
gem5::ArmISA::EL2
@ EL2
Definition: types.hh:275
gem5::ArmISA::MISCREG_AMAIR_EL2
@ MISCREG_AMAIR_EL2
Definition: misc.hh:753
gem5::ArmISA::MISCREG_FPEXC
@ MISCREG_FPEXC
Definition: misc.hh:80
gem5::ArmISA::ISA::globalClearExclusive
void globalClearExclusive() override
Definition: isa.cc:1819
gem5::ArmISA::MISCREG_MIDR_EL1
@ MISCREG_MIDR_EL1
Definition: misc.hh:544
gem5::ArmISA::MISCREG_AT_S1E1W_Xt
@ MISCREG_AT_S1E1W_Xt
Definition: misc.hh:666
gem5::ArmISA::MISCREG_CNTHP_CVAL_EL2
@ MISCREG_CNTHP_CVAL_EL2
Definition: misc.hh:797
gem5::ArmISA::MISCREG_SCTLR_EL2
@ MISCREG_SCTLR_EL2
Definition: misc.hh:589
gem5::ArmISA::MISCREG_ID_AA64AFR0_EL1
@ MISCREG_ID_AA64AFR0_EL1
Definition: misc.hh:570
gem5::ArmISA::ISA::getMiscIndices
std::pair< int, int > getMiscIndices(int misc_reg) const
Definition: isa.hh:336
gem5::ArmISA::NUM_MISCREGS
@ NUM_MISCREGS
Definition: misc.hh:1138
isa.hh
gem5::ArmISA::uao
Bitfield< 23 > uao
Definition: misc_types.hh:58
gem5::ArmISA::MISCREG_CNTHVS_CTL_EL2
@ MISCREG_CNTHVS_CTL_EL2
Definition: misc.hh:806
gem5::ArmISA::ISA::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: isa.cc:1547
gem5::ArmISA::ELIs32
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
Definition: utility.cc:273
gem5::CheckerCPU
CheckerCPU class.
Definition: cpu.hh:84
gem5::ArmISA::ArmFault::update
void update(ThreadContext *tc)
Definition: faults.cc:428
gem5::ArmISA::MISCREG_CCSIDR
@ MISCREG_CCSIDR
Definition: misc.hh:232
gem5::ArmISA::v
Bitfield< 28 > v
Definition: misc_types.hh:54
gem5::ArmISA::ISA::ISA
ISA(const Params &p)
Definition: isa.cc:83
gem5::ArmISA::MISCREG_MVFR0
@ MISCREG_MVFR0
Definition: misc.hh:79
cpu.hh
gem5::RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:92
gem5::statistics::reset
void reset()
Definition: statistics.cc:309
gem5::ArmISA::ISA::addressTranslation
void addressTranslation(MMU::ArmTranslationType tran_type, BaseMMU::Mode mode, Request::Flags flags, RegVal val)
Definition: isa.cc:1619
gem5::ArmISA::MISCREG_PMXEVTYPER_PMCCFILTR
@ MISCREG_PMXEVTYPER_PMCCFILTR
Definition: misc.hh:95
gem5::ArmISA::Decoder
Definition: decoder.hh:64
gem5::ExecContext::tcBase
virtual ThreadContext * tcBase() const =0
Returns a pointer to the ThreadContext.
gem5::GenericTimer
Definition: generic_timer.hh:286
gem5::ArmISA::MISCREG_ICC_IGRPEN1_EL3
@ MISCREG_ICC_IGRPEN1_EL3
Definition: misc.hh:904
gem5::ArmISA::MISCREG_CPACR_EL1
@ MISCREG_CPACR_EL1
Definition: misc.hh:587
gem5::ArmISA::MISCREG_ATS1HR
@ MISCREG_ATS1HR
Definition: misc.hh:324
gem5::ArmISA::EL2Enabled
bool EL2Enabled(ThreadContext *tc)
Definition: utility.cc:258
gem5::ArmISA::MISCREG_SPSEL
@ MISCREG_SPSEL
Definition: misc.hh:623
gem5::ArmISA::pan
Bitfield< 22 > pan
Definition: misc_types.hh:59
gem5::ArmISA::MISCREG_MPIDR_EL1
@ MISCREG_MPIDR_EL1
Definition: misc.hh:545
gem5::ArmISA::ISA::setMiscRegReset
void setMiscRegReset(RegIndex, RegVal val)
Definition: isa.cc:1354
gem5::ArmISA::MISCREG_ACTLR
@ MISCREG_ACTLR
Definition: misc.hh:243
gem5::ArmISA::MISCREG_SPSR_EL2
@ MISCREG_SPSR_EL2
Definition: misc.hh:631
gem5::ArmISA::MISCREG_DC_ZVA_Xt
@ MISCREG_DC_ZVA_Xt
Definition: misc.hh:671
gem5::ArmISA::MISCREG_SP_EL1
@ MISCREG_SP_EL1
Definition: misc.hh:633
gem5::ArmISA::MISCREG_AT_S1E0R_Xt
@ MISCREG_AT_S1E0R_Xt
Definition: misc.hh:667
gem5::ArmISA::mask
Bitfield< 3, 0 > mask
Definition: pcstate.hh:63
gem5::ArmISA::MISCREG_ISR
@ MISCREG_ISR
Definition: misc.hh:401
gem5::ArmISA::MISCREG_ID_AFR0
@ MISCREG_ID_AFR0
Definition: misc.hh:219
gem5::ArmISA::MISCREG_MIDR
@ MISCREG_MIDR
Definition: misc.hh:210
cprintf.hh
gem5::ArmISA::ISA::handleLockedWrite
bool handleLockedWrite(const RequestPtr &req, Addr cacheBlockMask) override
Definition: isa.cc:1806
gem5::bits
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:76
flags
uint8_t flags
Definition: helpers.cc:66
gem5::ArmISA::EL3
@ EL3
Definition: types.hh:276
gem5::ArmISA::MISCREG_SMCR_EL2
@ MISCREG_SMCR_EL2
Definition: misc.hh:1089
gem5::ArmISA::ISA::getGICv3CPUInterface
BaseISADevice & getGICv3CPUInterface()
Definition: isa.cc:1382
gem5::ArmISA::MISCREG_PAR
@ MISCREG_PAR
Definition: misc.hh:299
gem5::ArmISA::MISCREG_CNTP_CVAL
@ MISCREG_CNTP_CVAL
Definition: misc.hh:424
gem5::ThreadContext::readMiscRegNoEffect
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
gem5::ArmISA::MISCREG_CNTHP_CTL_EL2
@ MISCREG_CNTHP_CTL_EL2
Definition: misc.hh:796
gem5::ArmISA::MISCREG_CNTV_CTL_EL02
@ MISCREG_CNTV_CTL_EL02
Definition: misc.hh:787
gem5::ArmISA::ISA::startup
void startup() override
startup() is the final initialization call before simulation.
Definition: isa.cc:148
gem5::ArmISA::MISCREG_ID_PFR1
@ MISCREG_ID_PFR1
Definition: misc.hh:217
gem5::ArmISA::MISCREG_ID_AA64DFR0_EL1
@ MISCREG_ID_AA64DFR0_EL1
Definition: misc.hh:568
faults.hh
generic_timer.hh
gem5::ArmISA::MISCREG_CNTV_CVAL
@ MISCREG_CNTV_CVAL
Definition: misc.hh:431
gem5::ArmISA::MISCREG_CNTV_CVAL_EL0
@ MISCREG_CNTV_CVAL_EL0
Definition: misc.hh:782
gem5::ArmISA::ISA::getGenericTimer
BaseISADevice & getGenericTimer()
Definition: isa.cc:1361
gem5::ArmISA::ISA::readMiscReg
RegVal readMiscReg(RegIndex idx) override
Definition: isa.cc:398
gem5::ArmISA::MISCREG_HDFAR
@ MISCREG_HDFAR
Definition: misc.hh:294
gem5::ArmISA::MISCREG_ID_AA64MMFR1_EL1
@ MISCREG_ID_AA64MMFR1_EL1
Definition: misc.hh:575
gem5::ArmISA::MISCREG_ZCR_EL12
@ MISCREG_ZCR_EL12
Definition: misc.hh:1079
gem5::ArmISA::MISCREG_SPSR_EL1
@ MISCREG_SPSR_EL1
Definition: misc.hh:618
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::ArmISA::MISCREG_LOCKADDR
@ MISCREG_LOCKADDR
Definition: misc.hh:87
gem5::ArmISA::MISCREG_NMRR
@ MISCREG_NMRR
Definition: misc.hh:380
gem5::X86ISA::floatRegClass
constexpr RegClass floatRegClass
Definition: float.hh:143
gem5::ArmISA::flatIntRegClass
constexpr RegClass flatIntRegClass
Definition: int.hh:178
gem5::ArmISA::MISCREG_DBGBCR0_EL1
@ MISCREG_DBGBCR0_EL1
Definition: misc.hh:479
gem5::ArmISA::MiscRegIndex
MiscRegIndex
Definition: misc.hh:64
gem5::ArmISA::MISCREG_CNTP_TVAL_EL0
@ MISCREG_CNTP_TVAL_EL0
Definition: misc.hh:780
gem5::ArmISA::MISCREG_AFSR0_EL2
@ MISCREG_AFSR0_EL2
Definition: misc.hh:648
gem5::ArmISA::MISCREG_AT_S12E1R_Xt
@ MISCREG_AT_S12E1R_Xt
Definition: misc.hh:678
gem5::ArmISA::MISCREG_TTBR1
@ MISCREG_TTBR1
Definition: misc.hh:262
gem5::ArmISA::isSecure
bool isSecure(ThreadContext *tc)
Definition: utility.cc:74
gem5::ArmISA::MMU::HypMode
@ HypMode
Definition: mmu.hh:118
gem5::ArmISA::ISA::initializeMiscRegMetadata
void initializeMiscRegMetadata()
Definition: misc.cc:2289
gem5::ArmISA::ISA::getCurSmeVecLenInBits
unsigned getCurSmeVecLenInBits() const
Definition: isa.cc:1490
gem5::ArmISA::MISCREG_IFAR_S
@ MISCREG_IFAR_S
Definition: misc.hh:293
gem5::ArmISA::MISCREG_AFSR1_EL12
@ MISCREG_AFSR1_EL12
Definition: misc.hh:644
gem5::ArmISA::MISCREG_SP_EL2
@ MISCREG_SP_EL2
Definition: misc.hh:640
gem5::ArmISA::MISCREG_ID_AA64ISAR1_EL1
@ MISCREG_ID_AA64ISAR1_EL1
Definition: misc.hh:573
gem5::ArmISA::MISCREG_AT_S1E2W_Xt
@ MISCREG_AT_S1E2W_Xt
Definition: misc.hh:677
gem5::ArmISA::ArmFault::getFsr
virtual FSR getFsr(ThreadContext *tc) const
Definition: faults.hh:256
gem5::ArmISA::vecRegClass
constexpr RegClass vecRegClass
Definition: vec.hh:101
utility.hh
gem5::ArmISA::ISA::highestELIs64
bool highestELIs64
Definition: isa.hh:92
gem5::ArmISA::MISCREG_MAIR0
@ MISCREG_MAIR0
Definition: misc.hh:377
gem5::ArmISA::MISCREG_RNDRRS
@ MISCREG_RNDRRS
Definition: misc.hh:1097
gem5::ArmISA::HTMCheckpoint
Definition: htm.hh:58
gem5::ArmISA::ArmFault
Definition: faults.hh:64
gem5::X86ISA::reg
Bitfield< 5, 3 > reg
Definition: types.hh:92
gem5::ArmISA::MISCREG_UNSERIALIZE
@ MISCREG_UNSERIALIZE
Definition: misc.hh:1146
gem5::ArmISA::len
Bitfield< 18, 16 > len
Definition: misc_types.hh:502
gem5::ArmISA::ISA::setupThreadContext
void setupThreadContext()
Definition: isa.cc:163
gem5::FullSystem
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:220
gem5::ArmISA::miscRegClass
constexpr RegClass miscRegClass
Definition: misc.hh:2810
gem5::ArmISA::MISCREG_CNTVOFF_EL2
@ MISCREG_CNTVOFF_EL2
Definition: misc.hh:810
gem5::ThreadContext::pcStateNoRecord
virtual void pcStateNoRecord(const PCStateBase &val)=0
gem5::ArmISA::MISCREG_DBGWCR0_EL1
@ MISCREG_DBGWCR0_EL1
Definition: misc.hh:511
gem5::ArmISA::MISCREG_ATS12NSOPR
@ MISCREG_ATS12NSOPR
Definition: misc.hh:313
stat_control.hh
gem5::ArmISA::MISCREG_FPSCR_QC
@ MISCREG_FPSCR_QC
Definition: misc.hh:86
gem5::ArmISA::MMU::ArmTranslationType
ArmTranslationType
Definition: mmu.hh:114
gem5::Gicv3
Definition: gic_v3.hh:95
gem5::ArmISA::MISCREG_ATS1CPW
@ MISCREG_ATS1CPW
Definition: misc.hh:310
gem5::ArmISA::EL0
@ EL0
Definition: types.hh:273
panic_if
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
Definition: logging.hh:214
gem5::ArmISA::MMU::S1S2NsTran
@ S1S2NsTran
Definition: mmu.hh:121
gem5::ArmISA::MISCREG_PAN
@ MISCREG_PAN
Definition: misc.hh:1134
gem5::ArmSystem
Definition: system.hh:92
gem5::ArmISA::BaseISADevice::setThreadContext
virtual void setThreadContext(ThreadContext *tc)
Definition: isa_device.hh:68
gem5::ArmISA::MISCREG_HCR
@ MISCREG_HCR
Definition: misc.hh:253
gem5::ArmISA::MISCREG_DFAR_S
@ MISCREG_DFAR_S
Definition: misc.hh:290
gem5::ArmISA::MISCREG_ATS1HW
@ MISCREG_ATS1HW
Definition: misc.hh:325
gem5::Gicv3CPUInterface
Definition: gic_v3_cpu_interface.hh:58
gem5::ArmISA::vecElemClass
constexpr RegClass vecElemClass
Definition: vec.hh:105
gem5::ArmISA::MISCREG_ATS12NSOUW
@ MISCREG_ATS12NSOUW
Definition: misc.hh:316
gem5::ArmSystem::sveVL
unsigned sveVL() const
Returns the SVE vector length at reset, in quadwords.
Definition: system.hh:209
gem5::ArmISA::ISA::setMiscRegNoEffect
void setMiscRegNoEffect(RegIndex idx, RegVal val) override
Definition: isa.cc:633
gem5::ArmISA::MISCREG_SMCR_EL1
@ MISCREG_SMCR_EL1
Definition: misc.hh:1091
base.hh
gem5::ArmISA::MISCREG_FPSCR_EXC
@ MISCREG_FPSCR_EXC
Definition: misc.hh:85
gem5::ArmISA::MISCREG_AT_S1E3R_Xt
@ MISCREG_AT_S1E3R_Xt
Definition: misc.hh:682
gem5::ArmISA::ISA::InitReg
const MiscRegLUTEntryInitializer InitReg(uint32_t reg)
Definition: isa.hh:114
gem5::System::threads
Threads threads
Definition: system.hh:310
gem5::ArmISA::MISCREG_CNTP_CVAL_EL0
@ MISCREG_CNTP_CVAL_EL0
Definition: misc.hh:779
gem5::ArmISA::MISCREG_FPSCR
@ MISCREG_FPSCR
Definition: misc.hh:77
gem5::ArmISA::MISCREG_ZCR_EL1
@ MISCREG_ZCR_EL1
Definition: misc.hh:1080
gem5::SimObject::startup
virtual void startup()
startup() is the final initialization call before simulation.
Definition: sim_object.cc:96
gem5::ArmISA::MISCREG_CLIDR
@ MISCREG_CLIDR
Definition: misc.hh:233
gem5::ArmISA::MISCREG_ICH_AP0R0_EL2
@ MISCREG_ICH_AP0R0_EL2
Definition: misc.hh:907
gem5::ArmISA::MMU::translateFunctional
TranslationGenPtr translateFunctional(Addr start, Addr size, ThreadContext *tc, Mode mode, Request::Flags flags) override
Returns a translation generator for a region of virtual addresses, instead of directly translating a ...
Definition: mmu.hh:91
gem5::ArmISA::ISA::readMiscRegReset
RegVal readMiscRegReset(RegIndex) const
Definition: isa.cc:1347
gem5::ArmISA::MISCREG_CNTHV_TVAL_EL2
@ MISCREG_CNTHV_TVAL_EL2
Definition: misc.hh:805
gem5::ArmISA::ISA::miscRegs
RegVal miscRegs[NUM_MISCREGS]
Definition: isa.hh:125
gem5::ArmISA::lockedSnoopHandler
static void lockedSnoopHandler(ThreadContext *tc, XC *xc, PacketPtr pkt, Addr cacheBlockMask)
Definition: isa.cc:1688
misc.hh
gem5::ArmISA::sendEvent
void sendEvent(ThreadContext *tc)
Send an event (SEV) to a specific PE if there isn't already a pending event.
Definition: utility.cc:65
gem5::ArmISA::ISA::smeVL
unsigned smeVL
SME vector length in quadwords.
Definition: isa.hh:100
gem5::ThreadContext::setMiscReg
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
gem5::ArmISA::ISA::system
ArmSystem * system
Definition: isa.hh:74
gem5::ArmISA::MISCREG_DBGOSLSR
@ MISCREG_DBGOSLSR
Definition: misc.hh:193
gem5::MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::ArmISA::MISCREG_ICC_PMR_EL1
@ MISCREG_ICC_PMR_EL1
Definition: misc.hh:859
gem5::ArmISA::MISCREG_SCR
@ MISCREG_SCR
Definition: misc.hh:248
reg_class.hh
gem5::ArmISA::MISCREG_CNTHPS_CTL_EL2
@ MISCREG_CNTHPS_CTL_EL2
Definition: misc.hh:799
gem5::ArmISA::MISCREG_ELR_EL2
@ MISCREG_ELR_EL2
Definition: misc.hh:632
gem5::ArmISA::MISCREG_ID_PFR0
@ MISCREG_ID_PFR0
Definition: misc.hh:216
gem5::ArmISA::MISCREG_MAIR_EL12
@ MISCREG_MAIR_EL12
Definition: misc.hh:749
gem5::ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:71
gem5::ArmSystem::releaseFS
const ArmRelease * releaseFS() const
Definition: system.hh:156
gem5::ArmISA::MISCREG_PMEVCNTR0_EL0
@ MISCREG_PMEVCNTR0_EL0
Definition: misc.hh:812
gem5::ArmSystem::getGenericTimer
GenericTimer * getGenericTimer() const
Get a pointer to the system's generic timer model.
Definition: system.hh:177
gem5::ArmISA::MMU::invalidateMiscReg
void invalidateMiscReg()
Definition: mmu.cc:197
gem5::ArmISA::MISCREG_REVIDR
@ MISCREG_REVIDR
Definition: misc.hh:215
pmu.hh
gem5::ArmISA::MISCREG_CNTHPS_CVAL_EL2
@ MISCREG_CNTHPS_CVAL_EL2
Definition: misc.hh:800
gem5::ArmISA::BaseISADevice::setMiscReg
virtual void setMiscReg(int misc_reg, RegVal val)=0
Write to a system register belonging to this device.
gem5::ArmISA::MISCREG_FPSR
@ MISCREG_FPSR
Definition: misc.hh:628
gem5::ArmISA::MISCREG_ZCR_EL3
@ MISCREG_ZCR_EL3
Definition: misc.hh:1077
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::ArmISA::cc_reg::Nz
constexpr RegId Nz
Definition: cc.hh:94
gem5::ArmISA::NUM_PHYS_MISCREGS
@ NUM_PHYS_MISCREGS
Definition: misc.hh:1104
gem5::ThreadContext::getCpuPtr
virtual BaseCPU * getCpuPtr()=0
gem5::ArmISA::MMU::S1E1Tran
@ S1E1Tran
Definition: mmu.hh:127
gem5::ArmISA::MISCREG_AFSR0_EL1
@ MISCREG_AFSR0_EL1
Definition: misc.hh:641
gem5::ArmISA::MISCREG_SEV_MAILBOX
@ MISCREG_SEV_MAILBOX
Definition: misc.hh:96
gem5::ThreadContext::threadId
virtual int threadId() const =0
gem5::ArmISA::MISCREG_AFSR0_EL12
@ MISCREG_AFSR0_EL12
Definition: misc.hh:642
gem5::ArmISA::MISCREG_CONTEXTIDR_EL2
@ MISCREG_CONTEXTIDR_EL2
Definition: misc.hh:839
gem5::ArmISA::MISCREG_CNTHV_CVAL_EL2
@ MISCREG_CNTHV_CVAL_EL2
Definition: misc.hh:804
gem5::ArmISA::ISA::physAddrRange
uint8_t physAddrRange
Definition: isa.hh:94
gem5::ArmISA::MISCREG_RNDR
@ MISCREG_RNDR
Definition: misc.hh:1096
gem5::ArmISA::MISCREG_FPCR
@ MISCREG_FPCR
Definition: misc.hh:627
gem5::ArmISA::ISA::redirectRegVHE
int redirectRegVHE(int misc_reg)
Returns the enconcing equivalent when VHE is implemented and HCR_EL2.E2H is enabled and executing at ...
Definition: isa.cc:228
gem5::ArmISA::MISCREG_CNTFRQ_EL0
@ MISCREG_CNTFRQ_EL0
Definition: misc.hh:775
gem5::ArmISA::SelfDebug::updateDBGWCR
void updateDBGWCR(int index, DBGWCR val)
Definition: self_debug.hh:375
gem5::ArmISA::vecPredRegClass
constexpr RegClass vecPredRegClass
Definition: vec.hh:109
self_debug.hh
gem5::BaseISA
Definition: isa.hh:58
gem5::RegIndex
uint16_t RegIndex
Definition: types.hh:176
gem5::ArmISA::sp
Bitfield< 0 > sp
Definition: misc_types.hh:75
gem5::Packet::getAddr
Addr getAddr() const
Definition: packet.hh:807
gem5::ArmISA::MISCREG_AT_S12E1W_Xt
@ MISCREG_AT_S12E1W_Xt
Definition: misc.hh:679
gem5::ArmISA::MISCREG_HCR_EL2
@ MISCREG_HCR_EL2
Definition: misc.hh:591
gem5::ArmISA::MISCREG_AFSR1_EL1
@ MISCREG_AFSR1_EL1
Definition: misc.hh:643
gem5::ArmISA::MISCREG_ATS1CPR
@ MISCREG_ATS1CPR
Definition: misc.hh:309
gem5::ArmISA::MISCREG_TTBR0_EL1
@ MISCREG_TTBR0_EL1
Definition: misc.hh:603
gem5::ArmISA::MISCREG_ZCR_EL2
@ MISCREG_ZCR_EL2
Definition: misc.hh:1078
gem5::ArmISA::MISCREG_FAR_EL2
@ MISCREG_FAR_EL2
Definition: misc.hh:657
decoder.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::ArmISA::MISCREG_ID_AA64PFR0_EL1
@ MISCREG_ID_AA64PFR0_EL1
Definition: misc.hh:566
gem5::ArmISA::MISCREG_DBGDSCRint
@ MISCREG_DBGDSCRint
Definition: misc.hh:101
gem5::ArmISA::MISCREG_TTBR0_EL12
@ MISCREG_TTBR0_EL12
Definition: misc.hh:604
gem5::ArmISA::MISCREG_CNTV_CTL
@ MISCREG_CNTV_CTL
Definition: misc.hh:430
gem5::ArmISA::SelfDebug::setDebugMask
void setDebugMask(bool mask)
Definition: self_debug.hh:381
gem5::ArmISA::ISA::readMiscRegNoEffect
RegVal readMiscRegNoEffect(RegIndex idx) const override
Definition: isa.cc:374
gem5::ArmISA::ArmFault::isStage2
virtual bool isStage2() const
Definition: faults.hh:255
gem5::ArmISA::matRegClass
constexpr RegClass matRegClass
Definition: mat.hh:92
gem5::GenericTimerISA
Definition: generic_timer.hh:399
gem5::ArmISA::MISCREG_CNTHV_CTL_EL2
@ MISCREG_CNTHV_CTL_EL2
Definition: misc.hh:803
gem5::ArmISA::MISCREG_CNTP_CVAL_EL02
@ MISCREG_CNTP_CVAL_EL02
Definition: misc.hh:785
gem5::random_mt
Random random_mt
Definition: random.cc:99
gem5::ArmISA::MISCREG_ESR_EL1
@ MISCREG_ESR_EL1
Definition: misc.hh:645
gem5::ArmISA::MISCREG_ID_MMFR0
@ MISCREG_ID_MMFR0
Definition: misc.hh:220
gem5::FloatRegClassName
constexpr char FloatRegClassName[]
Definition: reg_class.hh:75
gem5::ArmISA::MMU
Definition: mmu.hh:60
gem5::ArmISA::MISCREG_VBAR_EL1
@ MISCREG_VBAR_EL1
Definition: misc.hh:758
UNSERIALIZE_MAPPING
#define UNSERIALIZE_MAPPING(member, names, size)
Definition: serialize.hh:666
gem5::ArmISA::MISCREG_ESR_EL12
@ MISCREG_ESR_EL12
Definition: misc.hh:646
gem5::loader::Arm
@ Arm
Definition: object_file.hh:70
gem5::ArmISA::MISCREG_CPACR
@ MISCREG_CPACR
Definition: misc.hh:246
gem5::ArmISA::MISCREG_MDSCR_EL1
@ MISCREG_MDSCR_EL1
Definition: misc.hh:460
gem5::ThreadContext::getCheckerCpuPtr
virtual CheckerCPU * getCheckerCpuPtr()=0
gem5::ArmISA::MISCREG_VBAR_EL12
@ MISCREG_VBAR_EL12
Definition: misc.hh:759
gic_v3.hh
gem5::ArmISA::ccRegClass
constexpr RegClass ccRegClass
Definition: cc.hh:87
gem5::ArmISA::preUnflattenMiscReg
void preUnflattenMiscReg()
Definition: misc.cc:707
gem5::ArmISA::MISCREG_ISR_EL1
@ MISCREG_ISR_EL1
Definition: misc.hh:761
gem5::ArmISA::OperatingMode
OperatingMode
Definition: types.hh:279
gem5::ArmISA::MISCREG_ID_AA64ISAR0_EL1
@ MISCREG_ID_AA64ISAR0_EL1
Definition: misc.hh:572
gem5::ArmISA::MISCREG_OSLAR_EL1
@ MISCREG_OSLAR_EL1
Definition: misc.hh:533
gem5::ArmISA::MISCREG_AT_S1E1R_Xt
@ MISCREG_AT_S1E1R_Xt
Definition: misc.hh:665
gem5::ArmISA::readMPIDR
RegVal readMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
This helper function is either returing the value of MPIDR_EL1 (by calling getMPIDR),...
Definition: utility.cc:138
gem5::ArmISA::MISCREG_UAO
@ MISCREG_UAO
Definition: misc.hh:1135
gem5::ArmISA::MISCREG_TTBR1_EL2
@ MISCREG_TTBR1_EL2
Definition: misc.hh:842
gem5::ArmISA::MISCREG_ID_DFR0
@ MISCREG_ID_DFR0
Definition: misc.hh:218
gem5::ArmISA::MISCREG_SPSR_EL12
@ MISCREG_SPSR_EL12
Definition: misc.hh:619
gem5::ArmISA::ISA::inSecureState
bool inSecureState() const
Return true if the PE is in Secure state.
Definition: isa.cc:1407
gem5::ArmISA::unflattenMiscReg
int unflattenMiscReg(int reg)
Definition: misc.cc:723
gem5::ArmISA::int_reg::Sp2
constexpr RegId Sp2
Definition: int.hh:235
gem5::Packet::isInvalidate
bool isInvalidate() const
Definition: packet.hh:609
gem5::ArmISA::MISCREG_TCR_EL1
@ MISCREG_TCR_EL1
Definition: misc.hh:607
gem5::ArmISA::ExceptionLevel
ExceptionLevel
Definition: types.hh:271
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::ArmISA::ISA::clear
void clear() override
Definition: isa.cc:133
gem5::ArmISA::BaseISADevice
Base class for devices that use the MiscReg interfaces.
Definition: isa_device.hh:61
gem5::ArmISA::mode
Bitfield< 4, 0 > mode
Definition: misc_types.hh:74
gem5::ArmISA::ISA::flattenMiscIndex
int flattenMiscIndex(int reg) const
Definition: isa.hh:203
gem5::ArmISA::MISCREG_CNTV_TVAL_EL0
@ MISCREG_CNTV_TVAL_EL0
Definition: misc.hh:783
gem5::ThreadContext::setMiscRegNoEffect
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
gem5::ArmISA::MISCREG_WARN_NOT_FAIL
@ MISCREG_WARN_NOT_FAIL
Definition: misc.hh:1147
gem5::ThreadContext::setReg
virtual void setReg(const RegId &reg, RegVal val)
Definition: thread_context.cc:188
gem5::ArmISA::MISCREG_AT_S1E2R_Xt
@ MISCREG_AT_S1E2R_Xt
Definition: misc.hh:676
gem5::ArmISA::MISCREG_CPSR_Q
@ MISCREG_CPSR_Q
Definition: misc.hh:84

Generated on Sun Jul 30 2023 01:56:46 for gem5 by doxygen 1.8.17