Go to the documentation of this file.
50 #include "debug/Arm.hh"
51 #include "debug/MiscRegs.hh"
55 #include "params/ArmISA.hh"
64 _decoderFlavor(
p->decoderFlavor), _vecRegRenameMode(Enums::Full),
65 pmu(
p->pmu), impdefAsNop(
p->impdef_nop),
158 mvfr0.advSimdRegisters = 2;
159 mvfr0.singlePrecision = 2;
160 mvfr0.doublePrecision = 2;
161 mvfr0.vfpExceptionTrapping = 0;
163 mvfr0.squareRoot = 1;
164 mvfr0.shortVectors = 1;
165 mvfr0.roundingModes = 1;
169 mvfr1.flushToZero = 1;
170 mvfr1.defaultNaN = 1;
171 mvfr1.advSimdLoadStore = 1;
172 mvfr1.advSimdInteger = 1;
173 mvfr1.advSimdSinglePrecision = 1;
174 mvfr1.advSimdHalfPrecision = 1;
175 mvfr1.vfpHalfPrecision = 1;
236 sctlr.te = (bool) sctlr_rst.te;
237 sctlr.nmfi = (
bool) sctlr_rst.nmfi;
238 sctlr.v = (bool) sctlr_rst.v;
296 panic(
"Invalid highest implemented exception level");
366 (
p->id_aa64dfr0_el1 & 0xfffffffffffff0ff
ULL) |
367 (
p->pmu ? 0x0000000000000100ULL : 0);
377 (
p->pmu ? 0x03000000
ULL : 0);
490 int lower = map.first, upper = map.second;
496 DPRINTF(MiscRegs,
"Reading MiscReg %s with set res0 bits: %#x\n",
500 DPRINTF(MiscRegs,
"Reading MiscReg %s with clear res1 bits: %#x\n",
517 cpsr.j =
pc.jazelle() ? 1 : 0;
518 cpsr.t =
pc.thumb() ? 1 : 0;
525 warn(
"Unimplemented system register %s read.\n",
528 panic(
"Unimplemented system register %s read.\n",
542 const uint32_t ones = (uint32_t)(-1);
546 cpacrMask.cp10 = ones;
547 cpacrMask.cp11 = ones;
548 cpacrMask.asedis = ones;
557 if (!nsacr.cp10) cpacrMask.cp10 = 0;
558 if (!nsacr.cp11) cpacrMask.cp11 = 0;
563 DPRINTF(MiscRegs,
"Reading misc reg %s: %#x\n",
593 warn_once(
"The clidr register always reports 0 caches.\n");
594 warn_once(
"clidr LoUIS field of 0b001 to match current "
595 "ARM implementations.\n");
598 warn_once(
"The ccsidr register isn't implemented and "
599 "always reads as 0.\n");
606 unsigned lineSizeWords =
608 unsigned log2LineSizeWords = 0;
610 while (lineSizeWords >>= 1) {
616 ctr.iCacheLineSize = log2LineSizeWords;
618 ctr.l1IndexPolicy = 0x3;
620 ctr.dCacheLineSize = log2LineSizeWords;
622 ctr.erg = log2LineSizeWords;
624 ctr.cwg = log2LineSizeWords;
631 warn(
"Not doing anything for miscreg ACTLR\n");
641 panic(
"shouldn't be reading this register seperately\n");
648 const uint32_t ones = (uint32_t)(-1);
650 fpscrMask.ioc = ones;
651 fpscrMask.dzc = ones;
652 fpscrMask.ofc = ones;
653 fpscrMask.ufc = ones;
654 fpscrMask.ixc = ones;
655 fpscrMask.idc = ones;
665 const uint32_t ones = (uint32_t)(-1);
667 fpscrMask.len = ones;
668 fpscrMask.fz16 = ones;
669 fpscrMask.stride = ones;
670 fpscrMask.rMode = ones;
673 fpscrMask.ahp = ones;
757 if (!secure_lookup) {
759 val |= (
mask ^ 0x7FFF) & 0xBFFF;
779 | (haveTimer ? 0x00010000 : 0x0);
782 return 0x0000000000000002 |
786 (
haveSVE ? 0x0000000100000000 : 0) |
816 int lower = map.first, upper = map.second;
822 DPRINTF(MiscRegs,
"Writing MiscReg %s (%d %d:%d) : %#x\n",
826 DPRINTF(MiscRegs,
"Writing MiscReg %s (%d %d) : %#x\n",
844 int old_mode = old_cpsr.mode;
846 if (old_mode != cpsr.mode || cpsr.il != old_cpsr.il) {
851 if (cpsr.pan != old_cpsr.pan) {
855 DPRINTF(
Arm,
"Updating CPSR from %#x to %#x f:%d i:%d a:%d mode:%#x\n",
856 miscRegs[misc_reg], cpsr, cpsr.f, cpsr.i, cpsr.a, cpsr.mode);
858 pc.nextThumb(cpsr.t);
859 pc.nextJazelle(cpsr.j);
860 pc.illegalExec(cpsr.il == 1);
877 warn(
"Unimplemented system register %s write with %#x.\n",
880 panic(
"Unimplemented system register %s write with %#x.\n",
890 const uint32_t ones = (uint32_t)(-1);
894 cpacrMask.cp10 = ones;
895 cpacrMask.cp11 = ones;
896 cpacrMask.asedis = ones;
905 if (!nsacr.cp10) cpacrMask.cp10 = 0;
906 if (!nsacr.cp11) cpacrMask.cp11 = 0;
912 newVal |= old_val & ~cpacrMask;
913 DPRINTF(MiscRegs,
"Writing misc reg %s: %#x\n",
919 const uint32_t ones = (uint32_t)(-1);
921 cpacrMask.tta = ones;
922 cpacrMask.fpen = ones;
924 cpacrMask.zen = ones;
927 DPRINTF(MiscRegs,
"Writing misc reg %s: %#x\n",
933 const uint32_t ones = (uint32_t)(-1);
935 cptrMask.tcpac = ones;
943 cptrMask.res1_13_12_el2 = ones;
944 cptrMask.res1_7_0_el2 = ones;
946 cptrMask.res1_8_el2 = ones;
948 cptrMask.res1_9_el2 = ones;
950 DPRINTF(MiscRegs,
"Writing misc reg %s: %#x\n",
956 const uint32_t ones = (uint32_t)(-1);
958 cptrMask.tcpac = ones;
965 DPRINTF(MiscRegs,
"Writing misc reg %s: %#x\n",
970 warn_once(
"The csselr register isn't implemented.\n");
974 warn(
"Calling DC ZVA! Not Implemeted! Expect WEIRD results\n");
979 const uint32_t ones = (uint32_t)(-1);
981 fpscrMask.ioc = ones;
982 fpscrMask.dzc = ones;
983 fpscrMask.ofc = ones;
984 fpscrMask.ufc = ones;
985 fpscrMask.ixc = ones;
986 fpscrMask.idc = ones;
987 fpscrMask.ioe = ones;
988 fpscrMask.dze = ones;
989 fpscrMask.ofe = ones;
990 fpscrMask.ufe = ones;
991 fpscrMask.ixe = ones;
992 fpscrMask.ide = ones;
993 fpscrMask.len = ones;
994 fpscrMask.fz16 = ones;
995 fpscrMask.stride = ones;
996 fpscrMask.rMode = ones;
999 fpscrMask.ahp = ones;
1000 fpscrMask.qc = ones;
1005 newVal = (newVal & (uint32_t)fpscrMask) |
1007 ~(uint32_t)fpscrMask);
1013 const uint32_t ones = (uint32_t)(-1);
1014 FPSCR fpscrMask = 0;
1015 fpscrMask.ioc = ones;
1016 fpscrMask.dzc = ones;
1017 fpscrMask.ofc = ones;
1018 fpscrMask.ufc = ones;
1019 fpscrMask.ixc = ones;
1020 fpscrMask.idc = ones;
1021 fpscrMask.qc = ones;
1026 newVal = (newVal & (uint32_t)fpscrMask) |
1028 ~(uint32_t)fpscrMask);
1034 const uint32_t ones = (uint32_t)(-1);
1035 FPSCR fpscrMask = 0;
1036 fpscrMask.len = ones;
1037 fpscrMask.fz16 = ones;
1038 fpscrMask.stride = ones;
1039 fpscrMask.rMode = ones;
1040 fpscrMask.fz = ones;
1041 fpscrMask.dn = ones;
1042 fpscrMask.ahp = ones;
1043 newVal = (newVal & (uint32_t)fpscrMask) |
1045 ~(uint32_t)fpscrMask);
1074 const uint32_t fpexcMask = 0x60000000;
1075 newVal = (newVal & fpexcMask) |
1101 const uint32_t temp = (
val == 0xC5ACCE55)? 0x1 : 0x0;
1103 r.oslk =
bits(temp,0);
1222 r.udccdis =
v.udccdis;
1223 r.mdbgen =
v.mdbgen;
1344 const uint32_t ifsrMask =
1346 newVal = newVal & ~ifsrMask;
1352 const uint32_t dfsrMask =
mask(31, 14) |
mask(8, 8);
1353 newVal = newVal & ~dfsrMask;
1363 DPRINTF(MiscRegs,
"Writing AMAIR: %#x\n", newVal);
1372 DPRINTF(MiscRegs,
"Writing SCTLR: %#x\n", newVal);
1383 SCTLR new_sctlr = newVal;
1476 mbits(newVal, 31, 12),
1491 mbits(newVal, 31, 12),
1534 mbits(newVal, 31,12));
1547 mbits(newVal, 31,12));
1563 mbits(newVal, 31,12));
1576 mbits(newVal, 31,12));
1593 static_cast<Addr>(
bits(newVal, 35, 0)) << 12);
1608 static_cast<Addr>(
bits(newVal, 35, 0)) << 12);
1621 mbits(newVal, 31, 12),
1635 mbits(newVal, 31, 12),
1751 bool is_host = (hcr.tge && hcr.e2h);
1776 bool is_host = (hcr.tge && hcr.e2h);
1793 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1805 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1819 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1832 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1845 bits(newVal, 55, 48);
1848 bool is_host = (hcr.tge && hcr.e2h);
1851 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1864 bits(newVal, 55, 48);
1867 bool is_host = (hcr.tge && hcr.e2h);
1870 static_cast<Addr>(
bits(newVal, 43, 0)) << 12,
1883 bits(newVal, 55, 48);
1886 bool is_host = (hcr.tge && hcr.e2h);
1898 bits(newVal, 55, 48);
1901 bool is_host = (hcr.tge && hcr.e2h);
1917 bool is_host = (hcr.tge && hcr.e2h);
1920 static_cast<Addr>(
bits(newVal, 43, 0)) << 12);
1933 bool is_host = (hcr.tge && hcr.e2h);
1936 static_cast<Addr>(
bits(newVal, 43, 0)) << 12);
1950 static_cast<Addr>(
bits(newVal, 35, 0)) << 12);
1964 static_cast<Addr>(
bits(newVal, 35, 0)) << 12);
1970 warn(
"Not doing anything for write of miscreg ACTLR\n");
1985 newVal &= ~((uint32_t) hstrMask);
1993 if (!secure_lookup) {
1997 newVal = (newVal & ~
mask) | (oldValue &
mask);
2023 panic(
"Security Extensions required for ATS12NSOPR");
2028 panic(
"Security Extensions required for ATS12NSOPW");
2033 panic(
"Security Extensions required for ATS12NSOUR");
2039 panic(
"Security Extensions required for ATS12NSOUW");
2052 const uint32_t ones = (uint32_t)(-1);
2053 TTBCR ttbcrMask = 0;
2054 TTBCR ttbcrNew = newVal;
2059 ttbcrMask.pd0 = ones;
2060 ttbcrMask.pd1 = ones;
2062 ttbcrMask.epd0 = ones;
2063 ttbcrMask.irgn0 = ones;
2064 ttbcrMask.orgn0 = ones;
2065 ttbcrMask.sh0 = ones;
2066 ttbcrMask.ps = ones;
2067 ttbcrMask.a1 = ones;
2068 ttbcrMask.epd1 = ones;
2069 ttbcrMask.irgn1 = ones;
2070 ttbcrMask.orgn1 = ones;
2071 ttbcrMask.sh1 = ones;
2073 ttbcrMask.eae = ones;
2076 newVal = newVal & ttbcrMask;
2078 newVal = (newVal & ttbcrMask) | (ttbcr & (~ttbcrMask));
2093 uint64_t ttbrMask =
mask(63,56) |
mask(47,40);
2094 newVal = (newVal & (~ttbrMask));
2145 cpsr.daif = (uint8_t) ((CPSR) newVal).
daif;
2162 cpsr.sp = (uint8_t) ((CPSR) newVal).
sp;
2170 cpsr.el = (uint8_t) ((CPSR) newVal).
el;
2181 cpsr.pan = (uint8_t) ((CPSR) newVal).
pan;
2231 ~(0x2 << 22) : ~(0x3 << 22);
2233 newVal =
val & spsr_mask;
2237 warn(
"miscreg L2CTLR (%s) written with %#x. ignored...\n",
2267 return *
timer.get();
2271 if (!generic_timer) {
2272 panic(
"Trying to get a generic timer from a system that hasn't "
2273 "been configured to use a generic timer.\n");
2279 return *
timer.get();
2297 "A ThreadContext is needed to determine the SVE vector length "
2298 "in full-system mode");
2315 static_cast<unsigned>(
2324 static_cast<unsigned>(
2330 return (
len + 1) * 128;
2336 auto vv = vc.
as<uint64_t>();
2337 for (
int i = 2;
i < eCount; ++
i) {
2352 warn_once(
"Doing AT (address translation) in functional mode! Fix Me!\n");
2354 auto req = std::make_shared<Request>(
2359 req,
tc,
mode, tran_type);
2363 Addr paddr = req->getPaddr();
2365 uint64_t attr1 =
attr >> 56;
2366 if (!attr1 || attr1 ==0x44) {
2368 attr &= ~ uint64_t(0x80);
2370 par = (paddr &
mask(47, 12)) |
attr;
2372 "MISCREG: Translated addr %#x: PAR_EL1: %#xx\n",
2381 par.fst = fsr.status;
2382 par.ptw = (arm_fault->
iss() >> 7) & 0x1;
2383 par.s = arm_fault->
isStage2() ? 1 : 0;
2386 "MISCREG: Translated addr %#x fault fsr %#x: PAR: %#x\n",
2403 warn_once(
"Doing AT (address translation) in functional mode! Fix Me!\n");
2405 auto req = std::make_shared<Request>(
2410 req,
tc,
mode, tran_type);
2414 Addr paddr = req->getPaddr();
2418 uint8_t max_paddr_bit = 0;
2427 par = (paddr &
mask(max_paddr_bit, 12)) |
2431 "MISCREG: Translated addr 0x%08x: PAR: 0x%08x\n",
2440 par.lpae = fsr.lpae;
2441 par.ptw = (arm_fault->
iss() >> 7) & 0x1;
2442 par.s = arm_fault->
isStage2() ? 1 : 0;
2446 par.fst = fsr.status;
2449 par.fs4_0 = fsr.fsLow | (fsr.fsHigh << 5);
2453 "MISCREG: Translated addr 0x%08x fault fsr %#x: PAR: 0x%08x\n",
2475 ArmISAParams::create()
void setupThreadContext()
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
@ MISCREG_ID_AA64MMFR2_EL1
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 ...
@ MISCREG_ICC_IGRPEN1_EL3
@ MISCREG_TLBI_IPAS2E1IS_Xt
@ MISCREG_ID_AA64AFR1_EL1
uint8_t encodePhysAddrRange64(int pa_size)
Returns the encoding corresponding to the specified n.
std::pair< int, int > getMiscIndices(int misc_reg) const
void initializeMiscRegMetadata()
@ MISCREG_ID_AA64ISAR1_EL1
void init(ThreadContext *tc)
bool haveCrypto() const
Returns true if this system implements the Crypto Extension.
uint8_t physAddrRange() const
Returns the supported physical address range in bits.
@ MISCREG_TLBI_VAALE1IS_Xt
Base class for devices that use the MiscReg interfaces.
void preUnflattenMiscReg()
virtual uint32_t iss() const =0
bool highestELIs64() const
Returns true if the register width of the highest implemented exception level is 64 bits (ARMv8)
RegVal miscRegs[NumMiscRegs]
Addr resetAddr() const
Returns the reset address if the highest implemented exception level is 64 bits (ARMv8)
@ MISCREG_ID_AA64ZFR0_EL1
@ MISCREG_ID_AA64ISAR0_EL1
@ MISCREG_TLBI_VAAE1IS_Xt
void setMDBGen(RegVal val)
std::unique_ptr< BaseISADevice > gicv3CpuInterface
virtual void setThreadContext(ThreadContext *tc)
virtual void setIntReg(RegIndex reg_idx, RegVal val)=0
@ MISCREG_TLBI_VMALLS12E1
@ MISCREG_TLBI_VALE3IS_Xt
void updateDBGWCR(int index, DBGWCR val)
void setMiscReg(int misc_reg, RegVal val)
@ MISCREG_TLBI_ASIDE1IS_Xt
bool haveSVE() const
Returns true if SVE is implemented (ARMv8)
@ MISCREG_TLBI_IPAS2LE1IS_Xt
virtual bool isStage2() const
void broadcast(ThreadContext *tc)
Broadcast the TLB Invalidate operation to all TLBs in the Arm system.
int redirectRegVHE(ThreadContext *tc, int misc_reg)
Returns the enconcing equivalent when VHE is implemented and HCR_EL2.E2H is enabled and executing at ...
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
BaseGic * getGIC() const
Get a pointer to the system's GIC.
T mbits(T val, int first, int last)
Mask off the given bits in place like bits() but without shifting.
GenericTimer * getGenericTimer() const
Get a pointer to the system's generic timer model.
virtual void setHtmCheckpointPtr(BaseHTMCheckpointPtr cpt)=0
TLB Invalidate by ASID match.
int unflattenMiscReg(int reg)
const char *const miscRegName[]
unsigned sveVL
SVE vector length in quadwords.
@ MISCREG_TLBI_VALE2IS_Xt
bool haveVirtualization() const
Returns true if this system implements the virtualization Extensions.
RegVal readMiscRegNoEffect(int misc_reg) const
static void zeroSveVecRegUpperPart(VecRegContainer &vc, unsigned eCount)
void takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc) override
@ MISCREG_ID_AA64MMFR0_EL1
virtual int threadId() const =0
void addressTranslation(TLB::ArmTranslationType tran_type, BaseTLB::Mode mode, Request::Flags flags, RegVal val)
@ MISCREG_ID_AA64AFR0_EL1
std::unique_ptr< BaseISADevice > timer
VecRegT< VecElem, NumElems, true > as() const
View interposers.
@ MISCREG_ID_AA64DFR1_EL1
const Enums::VecRegRenameMode _vecRegRenameMode
virtual void startup()
startup() is the final initialization call before simulation.
void setDebugMask(bool mask)
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
virtual void setMiscReg(int misc_reg, RegVal val)=0
Write to a system register belonging to this device.
@ MISCREG_ID_AA64PFR0_EL1
bool haveSecurity() const
Returns true if this system implements the Security Extensions.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
DummyISADevice dummyDevice
Dummy device for to handle non-existing ISA devices.
bool haveLPAE() const
Returns true if this system implements the Large Physical Address Extension.
bool haveLSE() const
Returns true if LSE is implemented (ARMv8.1)
virtual void pcStateNoRecord(const TheISA::PCState &val)=0
void clear32(const ArmISAParams *p, const SCTLR &sctlr_rst)
bool havePAN() const
Returns true if Priviledge Access Never is implemented.
void setMDSCRvals(RegVal val)
std::shared_ptr< FaultBase > Fault
@ MISCREG_ID_AA64MMFR1_EL1
static const uint32_t FpscrExcMask
BaseISADevice & getGICv3CPUInterface()
@ MISCREG_ID_AA64DFR0_EL1
@ MISCREG_TLBI_VMALLS12E1IS
unsigned sveVL() const
Returns the SVE vector length at reset, in quadwords.
bool haveSecEL2() const
Returns true if Priviledge Access Never is implemented.
virtual ContextID contextId() const =0
void clear64(const ArmISAParams *p)
TLB Invalidate by VA, All ASID.
chain highest(ArmSystem *const sys) const
void setMiscRegNoEffect(int misc_reg, RegVal val)
constexpr decltype(nullptr) NoFault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
RegVal readMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
This helper function is either returing the value of MPIDR_EL1 (by calling getMPIDR),...
void updateOSLock(RegVal val)
chain hyp(bool v=true) const
void updateRegMap(CPSR cpsr)
BaseISADevice & getGenericTimer()
virtual TheISA::PCState pcState() const =0
static const uint32_t CpsrMaskQ
@ funcRequestorId
This requestor id is used for functional requests that don't come from a particular device.
virtual RegVal readCCReg(RegIndex reg_idx) const =0
const typedef MiscRegLUTEntryInitializer & chain
Data TLB Invalidate by VA.
Instruction TLB Invalidate All.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
@ MISCREG_TLBI_VALE1IS_Xt
virtual void setCCReg(RegIndex reg_idx, RegVal val)=0
void update(ThreadContext *tc)
GenericISA::DelaySlotPCState< MachInst > PCState
const SimObjectParams * _params
Cached copy of the object parameters.
void initID64(const ArmISAParams *p)
Gicv3CPUInterface * getCPUInterface(int cpu_id) const
ArmISA::ExceptionLevel highestEL() const
Returns the highest implemented exception level.
T insertBits(T val, int first, int last, B bit_val)
Returns val with bits first to last set to the LSBs of bit_val.
virtual FSR getFsr(ThreadContext *tc) const
virtual RegVal readMiscReg(RegIndex misc_reg)=0
@ MISCREG_PMXEVTYPER_PMCCFILTR
virtual CheckerCPU * getCheckerCpuPtr()=0
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
TLB Invalidate by Intermediate Physical Address.
virtual TheISA::Decoder * getDecoderPtr()=0
@ MISCREG_TLBI_IPAS2E1_Xt
static const uint32_t FpscrQcMask
void startup() override
startup() is the final initialization call before simulation.
RegVal readMiscReg(int misc_reg)
void updateDBGBCR(int index, DBGBCR val)
chain mon(bool v=true) const
void addressTranslation64(TLB::ArmTranslationType tran_type, BaseTLB::Mode mode, Request::Flags flags, RegVal val)
unsigned getCurSveVecLenInBits() const
Data TLB Invalidate by ASID match.
void initID32(const ArmISAParams *p)
unsigned int cacheLineSize() const
Get the cache line size of the system.
Instruction TLB Invalidate by ASID match.
chain priv(bool v=true) const
virtual RegVal readIntReg(RegIndex reg_idx) const =0
bool haveTME() const
Returns true if this system implements the transactional memory extension (ARMv9)
void setenableTDETGE(HCR hcr, HDCR mdcr)
virtual void setISA(ISA *isa)
@ MISCREG_TLBI_IPAS2LE1_Xt
virtual BaseCPU * getCpuPtr()=0
bitset< NUM_MISCREG_INFOS > miscRegInfo[NUM_MISCREGS]
const Params * params() const
BaseInterrupts * getInterruptController(ThreadID tid)
@ MISCREG_ID_AA64PFR1_EL1
Instruction TLB Invalidate by VA.
bool translateFunctional(ThreadContext *tc, Addr vaddr, Addr &paddr)
Do a functional lookup on the TLB (for debugging) and don't modify any internal state.
#define ULL(N)
uint64_t constant
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
bool isSecure(ThreadContext *tc)
static std::vector< struct MiscRegLUTEntry > lookUpMiscReg
Metadata table accessible via the value of the register.
virtual System * getSystemPtr()=0
bool haveLargeAsid64() const
Returns true if ASID is 16 bits in AArch64 (ARMv8)
#define panic(...)
This implements a cprintf based panic() function.
TLB Invalidate All, Non-Secure.
virtual RegVal readMiscReg(int misc_reg)=0
Read a system register belonging to this device.
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Generated on Wed Sep 30 2020 14:01:59 for gem5 by doxygen 1.8.17