Go to the documentation of this file.
41 #ifndef __ARCH_ARM_REGS_MISC_HH__
42 #define __ARCH_ARM_REGS_MISC_HH__
52 #include "debug/MiscRegs.hh"
1198 std::bitset<NUM_MISCREG_INFOS>
info;
1200 using FaultCB = std::function<
1212 template <MiscRegInfo Sec, MiscRegInfo NonSec>
1220 faultRead({defaultFault<MISCREG_USR_S_RD, MISCREG_USR_NS_RD>,
1221 defaultFault<MISCREG_PRI_S_RD, MISCREG_PRI_NS_RD>,
1222 defaultFault<MISCREG_HYP_S_RD, MISCREG_HYP_NS_RD>,
1223 defaultFault<MISCREG_MON_NS0_RD, MISCREG_MON_NS1_RD>}),
1224 faultWrite({defaultFault<MISCREG_USR_S_WR, MISCREG_USR_NS_WR>,
1225 defaultFault<MISCREG_PRI_S_WR, MISCREG_PRI_NS_WR>,
1226 defaultFault<MISCREG_HYP_S_WR, MISCREG_HYP_NS_WR>,
1227 defaultFault<MISCREG_MON_NS0_WR, MISCREG_MON_NS1_WR>})
1632 unsigned _crn,
unsigned _crm,
1649 assert(
opc1 < 16 &&
crm < 16);
1668 return reg64 << 19 |
1691 unsigned _crn,
unsigned _crm,
1704 return op0 == other.
op0 &&
1730 unsigned crm,
unsigned opc2);
1732 unsigned crn,
unsigned crm,
1742 unsigned crm,
unsigned opc2);
1778 "pmxevtyper_pmccfiltr",
2220 "dbgauthstatus_el1",
2383 "tlbi_ipas2e1is_xt",
2384 "tlbi_ipas2e1os_xt",
2385 "tlbi_ipas2le1is_xt",
2386 "tlbi_ipas2le1os_xt",
2395 "tlbi_vmalls12e1is",
2396 "tlbi_vmalls12e1os",
2572 "icc_igrpen1_el1_ns",
2573 "icc_igrpen1_el1_s",
2651 "icv_igrpen1_el1_ns",
2652 "icv_igrpen1_el1_s",
2796 "The miscRegName array and NUM_MISCREGS are inconsistent.");
2912 struct hash<
gem5::ArmISA::MiscRegNum32>
2917 return reg.packed();
2922 struct hash<
gem5::ArmISA::MiscRegNum64>
2927 return reg.packed();
2932 #endif // __ARCH_ARM_REGS_MISC_HH__
@ MISCREG_ICC_CTLR_EL1_NS
MiscRegNum32(unsigned _coproc, unsigned _opc1, unsigned _crn, unsigned _crm, unsigned _opc2)
@ MISCREG_ICC_AP1R0_EL1_NS
@ MISCREG_CNTHVS_TVAL_EL2
chain mapsTo(uint32_t l, uint32_t u=0) const
static const uint32_t CpsrMask
static const uint32_t FpscrAhpMask
@ MISCREG_ICC_AP1R1_EL1_NS
@ MISCREG_TLBI_VAAE1IS_Xt
MiscRegLUTEntryInitializer(struct MiscRegLUTEntry &e)
chain privSecureRead(bool v=true) const
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to write coprocessor registers.
chain hypNonSecureWrite(bool v=true) const
@ MISCREG_CNTHPS_TVAL_EL2
@ MISCREG_CNTHVS_CVAL_EL2
@ MISCREG_TLBI_IPAS2E1IS_Xt
@ MISCREG_ICV_IGRPEN1_EL1_S
@ MISCREG_ICC_AP1R3_EL1_NS
chain user(bool v=true) const
chain allPrivileges(bool v=true) const
chain hypSecureWrite(bool v=true) const
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
chain banked(bool v=true) const
@ MISCREG_ICV_AP1R3_EL1_S
@ MISCREG_TLBI_ASIDE1OS_Xt
@ MISCREG_TLBI_IPAS2LE1IS_Xt
chain highest(ArmSystem *const sys) const
@ MISCREG_TLBI_VMALLS12E1IS
static const uint32_t FpCondCodesMask
chain hyp(bool v=true) const
struct MiscRegLUTEntry & entry
std::bitset< NUM_MISCREG_INFOS > info
@ MISCREG_TLBI_VALE2IS_Xt
chain privSecureWrite(bool v=true) const
@ MISCREG_ICV_AP1R0_EL1_S
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
@ MISCREG_TLBI_VALE1IS_Xt
@ MISCREG_ID_AA64AFR1_EL1
const char *const miscRegName[]
chain bankedChild(bool v=true) const
@ MISCREG_ID_AA64MMFR0_EL1
@ MISCREG_TLBI_IPAS2E1OS_Xt
static const uint32_t CpsrMaskQ
static const uint32_t ApsrMask
chain privNonSecureRead(bool v=true) const
@ MISCREG_ICV_IGRPEN0_EL1
static const uint32_t FpscrQcMask
static MiscRegClassOps miscRegClassOps
chain priv(bool v=true) const
@ MISCREG_ID_AA64DFR1_EL1
static const uint32_t CondCodesMask
chain mutex(bool v=true) const
@ MISCREG_TLBI_VALE3IS_Xt
static const uint32_t FpscrExcMask
chain userSecureWrite(bool v=true) const
@ MISCREG_TLBI_VMALLS12E1
@ MISCREG_ICC_AP1R0_EL1_S
chain userNonSecureWrite(bool v=true) const
bool aarch64SysRegReadOnly(MiscRegIndex miscReg)
@ MISCREG_ICV_AP1R1_EL1_S
@ MISCREG_DBGCLAIMCLR_EL1
MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
MiscRegNum64(unsigned _op0, unsigned _op1, unsigned _crn, unsigned _crm, unsigned _op2)
@ MISCREG_DBGAUTHSTATUS_EL1
@ MISCREG_ICC_AP1R3_EL1_S
chain reset(uint64_t res_val) const
chain privSecure(bool v=true) const
@ MISCREG_DBGCLAIMSET_EL1
@ MISCREG_ID_AA64SMFR0_EL1
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to read coprocessor registers.
size_t operator()(const gem5::ArmISA::MiscRegNum32 ®) const
chain raz(uint64_t mask=(uint64_t) -1) const
@ MISCREG_ID_AA64PFR1_EL1
ThreadContext is the external interface to all thread state for anything outside of the CPU.
@ MISCREG_ICV_BPR1_EL1_NS
@ MISCREG_ID_AA64MMFR2_EL1
Fault checkFaultAccessAArch64SysReg(MiscRegIndex reg, CPSR cpsr, ThreadContext *tc, const MiscRegOp64 &inst)
std::shared_ptr< FaultBase > Fault
chain rao(uint64_t mask=(uint64_t) -1) const
@ MISCREG_CONTEXTIDR_EL12
chain privNonSecure(bool v=true) const
@ MISCREG_TLBI_VMALLS12E1OS
std::vector< struct MiscRegLUTEntry > lookUpMiscReg(NUM_MISCREGS)
chain hypRead(bool v=true) const
chain exceptUserMode() const
MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1)
@ MISCREG_ICC_AP1R1_EL1_S
@ MISCREG_ID_AA64AFR0_EL1
@ MISCREG_ICC_AP1R2_EL1_S
chain privRead(bool v=true) const
bool AArch32isUndefinedGenericTimer(MiscRegIndex reg, ThreadContext *tc)
@ MISCREG_PMXEVTYPER_PMCCFILTR
@ MISCREG_ICV_IGRPEN1_EL1_NS
chain monSecureRead(bool v=true) const
@ MISCREG_ICC_IGRPEN1_EL3
chain hypNonSecureRead(bool v=true) const
@ MISCREG_ICV_AP1R2_EL1_NS
size_t operator()(const gem5::ArmISA::MiscRegNum64 ®) const
@ MISCREG_TLBI_ASIDE1IS_Xt
chain fault(MiscRegLUTEntry::FaultCB cb) const
@ MISCREG_ICC_BPR1_EL1_NS
chain warnNotFail(bool v=true) const
chain userSecureRead(bool v=true) const
chain hypSecureRead(bool v=true) const
chain secure(bool v=true) const
@ MISCREG_ID_AA64DFR0_EL1
static Fault defaultFault(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst)
chain hypSecure(bool v=true) const
@ MISCREG_ICC_IGRPEN1_EL1_S
@ MISCREG_ID_AA64MMFR1_EL1
This class is implementing the Base class for a generic AArch64 instruction which is making use of sy...
chain unimplemented() const
@ MISCREG_TLBI_VAALE1OS_Xt
chain unserialize(bool v=true) const
MiscRegNum64 encodeAArch64SysReg(MiscRegIndex misc_reg)
std::array< FaultCB, EL3+1 > faultRead
@ MISCREG_ICC_IGRPEN0_EL1
@ MISCREG_ID_AA64ISAR1_EL1
@ MISCREG_TLBI_IPAS2LE1OS_Xt
@ MISCREG_ID_AA64ZFR0_EL1
@ MISCREG_TLBI_IPAS2LE1_Xt
MiscRegNum32(unsigned _coproc, unsigned _opc1, unsigned _crm)
chain reads(bool v) const
@ MISCREG_TLBI_VAALE1IS_Xt
chain fault(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
chain privNonSecureWrite(bool v=true) const
@ MISCREG_TLBI_VALE3OS_Xt
constexpr RegClass miscRegClass
constexpr char MiscRegClassName[]
bool operator==(const MiscRegNum32 &other) const
chain unverifiable(bool v=true) const
chain faultRead(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
Metadata table accessible via the value of the register.
chain nonSecure(bool v=true) const
@ MiscRegClass
Control (misc) register.
chain res0(uint64_t mask) const
Overload hash function for BasicBlockRange type.
chain implemented(bool v=true) const
@ MISCREG_ICC_AP1R2_EL1_NS
const typedef MiscRegLUTEntryInitializer & chain
Fault checkFault(ThreadContext *tc, const MiscRegOp64 &inst, ExceptionLevel el)
@ MISCREG_ICV_AP1R2_EL1_S
chain monNonSecureRead(bool v=true) const
chain monSecureWrite(bool v=true) const
bool operator==(const MiscRegNum64 &other) const
chain mon(bool v=true) const
@ MISCREG_CNTHPS_CVAL_EL2
std::function< Fault(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst) > FaultCB
chain faultWrite(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
@ MISCREG_TLBI_VALE2OS_Xt
@ MISCREG_TLBI_VAAE1OS_Xt
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
@ MISCREG_ICV_AP1R3_EL1_NS
chain monSecure(bool v=true) const
chain userNonSecureRead(bool v=true) const
chain monNonSecure(bool v=true) const
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
@ MISCREG_ID_AA64PFR0_EL1
@ MISCREG_ICC_IGRPEN1_EL1
chain hypWrite(bool v=true) const
@ MISCREG_ICV_IGRPEN1_EL1
@ MISCREG_ICV_AP1R1_EL1_NS
@ MISCREG_ICC_IGRPEN1_EL1_NS
@ MISCREG_TLBI_IPAS2E1_Xt
MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
void preUnflattenMiscReg()
chain writes(bool v) const
@ MISCREG_ID_AA64ISAR0_EL1
@ MISCREG_ICV_AP1R0_EL1_NS
std::string regName(const RegId &id) const override
Print the name of the register specified in id.
@ MISCREG_ICV_CTLR_EL1_NS
chain banked64(bool v=true) const
int unflattenMiscReg(int reg)
@ MISCREG_TLBI_VALE1OS_Xt
Register ID: describe an architectural register with its class and index.
std::array< FaultCB, EL3+1 > faultWrite
chain monNonSecureWrite(bool v=true) const
chain res1(uint64_t mask) const
Generated on Sun Jul 30 2023 01:56:48 for gem5 by doxygen 1.8.17