41#ifndef __ARCH_ARM_REGS_MISC_HH__
42#define __ARCH_ARM_REGS_MISC_HH__
53#include "debug/MiscRegs.hh"
56#define TLBI_VARIANTS(TLBI) \
56#define TLBI_VARIANTS(TLBI) \ …
60#define TLBI_CASE_VARIANTS(TLBI) \
60#define TLBI_CASE_VARIANTS(TLBI) \ …
64#define TLBI_STR_VARIANTS(TLBI) \
64#define TLBI_STR_VARIANTS(TLBI) \ …
1283 std::bitset<NUM_MISCREG_INFOS>
info;
1297 template <MiscRegInfo Sec, MiscRegInfo NonSec>
1305 faultRead({defaultFault<MISCREG_USR_S_RD, MISCREG_USR_NS_RD>,
1306 defaultFault<MISCREG_PRI_S_RD, MISCREG_PRI_NS_RD>,
1307 defaultFault<MISCREG_HYP_S_RD, MISCREG_HYP_NS_RD>,
1308 defaultFault<MISCREG_MON_NS0_RD, MISCREG_MON_NS1_RD>}),
1309 faultWrite({defaultFault<MISCREG_USR_S_WR, MISCREG_USR_NS_WR>,
1310 defaultFault<MISCREG_PRI_S_WR, MISCREG_PRI_NS_WR>,
1311 defaultFault<MISCREG_HYP_S_WR, MISCREG_HYP_NS_WR>,
1312 defaultFault<MISCREG_MON_NS0_WR, MISCREG_MON_NS1_WR>})
1724 unsigned _crn,
unsigned _crm,
1741 assert(
opc1 < 16 &&
crm < 16);
1760 return reg64 << 19 |
1783 unsigned _crn,
unsigned _crm,
1796 return op0 == other.
op0 &&
1822 unsigned crm,
unsigned opc2);
1824 unsigned crn,
unsigned crm,
1834 unsigned crm,
unsigned opc2);
1870 "pmxevtyper_pmccfiltr",
2324 "dbgauthstatus_el1",
2714 "icc_igrpen1_el1_ns",
2715 "icc_igrpen1_el1_s",
2793 "icv_igrpen1_el1_ns",
2794 "icv_igrpen1_el1_s",
2961 "The miscRegName array and NUM_MISCREGS are inconsistent.");
3077struct hash<
gem5::ArmISA::MiscRegNum32>
3082 return reg.packed();
3077struct hash<
gem5::ArmISA::MiscRegNum32> {
…};
3087struct hash<
gem5::ArmISA::MiscRegNum64>
3092 return reg.packed();
3087struct hash<
gem5::ArmISA::MiscRegNum64> {
…};
#define TLBI_STR_VARIANTS(TLBI)
std::string regName(const RegId &id) const override
Print the name of the register specified in id.
Metadata table accessible via the value of the register.
chain userNonSecureWrite(bool v=true) const
const MiscRegLUTEntryInitializer & chain
chain userSecureWrite(bool v=true) const
chain exceptUserMode() const
chain warnNotFail(bool v=true) const
chain mapsTo(uint32_t l, uint32_t u=0) const
chain fault(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
chain userSecureRead(bool v=true) const
chain implemented(bool v=true) const
chain reads(bool v) const
MiscRegLUTEntryInitializer(struct MiscRegLUTEntry &e)
chain highest(ArmSystem *const sys) const
chain secure(bool v=true) const
chain mutex(bool v=true) const
chain hypNonSecureWrite(bool v=true) const
chain priv(bool v=true) const
chain raz(uint64_t mask=(uint64_t) -1) const
chain hypSecureRead(bool v=true) const
chain monSecure(bool v=true) const
chain privSecure(bool v=true) const
chain privSecureRead(bool v=true) const
chain privNonSecure(bool v=true) const
chain hypSecureWrite(bool v=true) const
chain userNonSecureRead(bool v=true) const
chain nonSecure(bool v=true) const
chain privNonSecureRead(bool v=true) const
chain monNonSecureWrite(bool v=true) const
chain reset(uint64_t res_val) const
chain monNonSecureRead(bool v=true) const
chain monWrite(bool v=true) const
chain user(bool v=true) const
chain unverifiable(bool v=true) const
chain hypSecure(bool v=true) const
chain banked(bool v=true) const
chain privRead(bool v=true) const
chain hypRead(bool v=true) const
struct MiscRegLUTEntry & entry
chain banked64(bool v=true) const
chain fault(MiscRegLUTEntry::FaultCB cb) const
chain res0(uint64_t mask) const
chain bankedChild(bool v=true) const
chain hypWrite(bool v=true) const
chain writes(bool v) const
chain allPrivileges(bool v=true) const
chain monSecureRead(bool v=true) const
chain privSecureWrite(bool v=true) const
chain res1(uint64_t mask) const
chain faultRead(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
chain hypNonSecureRead(bool v=true) const
chain monNonSecure(bool v=true) const
chain monSecureWrite(bool v=true) const
chain rao(uint64_t mask=(uint64_t) -1) const
chain mon(bool v=true) const
chain unimplemented() const
chain privNonSecureWrite(bool v=true) const
chain unserialize(bool v=true) const
chain faultWrite(ExceptionLevel el, MiscRegLUTEntry::FaultCB cb) const
chain hyp(bool v=true) const
This class is implementing the Base class for a generic AArch64 instruction which is making use of sy...
Register ID: describe an architectural register with its class and index.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
bool AArch32isUndefinedGenericTimer(MiscRegIndex reg, ThreadContext *tc)
static const uint32_t FpscrQcMask
static MiscRegClassOps miscRegClassOps
bool aarch64SysRegReadOnly(MiscRegIndex miscReg)
static const uint32_t CpsrMask
static const uint32_t FpscrExcMask
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
MiscRegIndex decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
Fault checkFaultAccessAArch64SysReg(MiscRegIndex reg, CPSR cpsr, ThreadContext *tc, const MiscRegOp64 &inst)
static const uint32_t ApsrMask
static const uint32_t CpsrMaskQ
static const uint32_t FpCondCodesMask
void preUnflattenMiscReg()
static const uint32_t FpscrAhpMask
@ MISCREG_ID_AA64PFR0_EL1
@ MISCREG_ICC_BPR1_EL1_NS
@ MISCREG_ICC_IGRPEN1_EL1_NS
@ MISCREG_ICV_IGRPEN1_EL1_S
@ MISCREG_ICC_IGRPEN1_EL3
@ MISCREG_ID_AA64ZFR0_EL1
@ MISCREG_ICV_AP1R1_EL1_NS
@ MISCREG_ICC_IGRPEN1_EL1_S
@ MISCREG_ICV_AP1R2_EL1_S
@ MISCREG_ICV_IGRPEN1_EL1_NS
@ MISCREG_ICV_IGRPEN0_EL1
@ MISCREG_ID_AA64DFR0_EL1
@ MISCREG_ICC_AP1R3_EL1_NS
@ MISCREG_ICV_AP1R3_EL1_S
@ MISCREG_ICC_AP1R0_EL1_S
@ MISCREG_ICC_AP1R1_EL1_S
@ MISCREG_ICV_CTLR_EL1_NS
@ MISCREG_ID_AA64DFR1_EL1
@ MISCREG_ID_AA64ISAR1_EL1
@ MISCREG_ID_AA64MMFR1_EL1
@ MISCREG_ICV_AP1R1_EL1_S
@ MISCREG_ICC_AP1R3_EL1_S
@ MISCREG_ID_AA64MMFR3_EL1
@ MISCREG_ICV_AP1R0_EL1_NS
@ MISCREG_CNTHPS_CVAL_EL2
@ MISCREG_CNTHPS_TVAL_EL2
@ MISCREG_ICC_AP1R1_EL1_NS
@ MISCREG_ID_AA64MMFR0_EL1
@ MISCREG_ICC_CTLR_EL1_NS
@ MISCREG_CNTHVS_TVAL_EL2
@ MISCREG_ICV_AP1R0_EL1_S
@ MISCREG_ICV_BPR1_EL1_NS
@ MISCREG_CNTHVS_CVAL_EL2
@ MISCREG_ID_AA64MMFR2_EL1
@ MISCREG_DBGCLAIMSET_EL1
@ MISCREG_ICC_AP1R0_EL1_NS
@ MISCREG_ICV_AP1R2_EL1_NS
@ MISCREG_ICC_AP1R2_EL1_S
@ MISCREG_ICC_IGRPEN0_EL1
@ MISCREG_ICC_AP1R2_EL1_NS
@ MISCREG_DBGCLAIMCLR_EL1
@ MISCREG_ID_AA64AFR1_EL1
@ MISCREG_ICC_IGRPEN1_EL1
@ MISCREG_ID_AA64AFR0_EL1
@ MISCREG_ICV_IGRPEN1_EL1
@ MISCREG_ID_AA64ISAR0_EL1
@ MISCREG_ID_AA64SMFR0_EL1
@ MISCREG_CONTEXTIDR_EL12
@ MISCREG_DBGAUTHSTATUS_EL1
@ MISCREG_PMXEVTYPER_PMCCFILTR
@ MISCREG_ID_AA64PFR1_EL1
@ MISCREG_ICV_AP1R3_EL1_NS
std::optional< MiscRegNum64 > encodeAArch64SysReg(MiscRegIndex misc_reg)
MiscRegIndex decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
static const uint32_t CondCodesMask
int unflattenMiscReg(int reg)
constexpr RegClass miscRegClass
const char *const miscRegName[]
int snsBankedIndex(MiscRegIndex reg, ThreadContext *tc)
std::tuple< bool, bool > canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to write coprocessor registers.
int snsBankedIndex64(MiscRegIndex reg, ThreadContext *tc)
MiscRegIndex decodeCP15Reg64(unsigned crm, unsigned opc1)
std::vector< struct MiscRegLUTEntry > lookUpMiscReg(NUM_MISCREGS)
std::tuple< bool, bool > canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
Check for permission to read coprocessor registers.
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< FaultBase > Fault
constexpr char MiscRegClassName[]
@ MiscRegClass
Control (misc) register.
Overload hash function for BasicBlockRange type.
static Fault defaultFault(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst)
std::function< Fault(const MiscRegLUTEntry &entry, ThreadContext *tc, const MiscRegOp64 &inst) > FaultCB
std::array< FaultCB, EL3+1 > faultRead
std::bitset< NUM_MISCREG_INFOS > info
std::array< FaultCB, EL3+1 > faultWrite
Fault checkFault(ThreadContext *tc, const MiscRegOp64 &inst, ExceptionLevel el)
bool operator==(const MiscRegNum32 &other) const
MiscRegNum32(const MiscRegNum32 &rhs)=default
MiscRegNum32(unsigned _coproc, unsigned _opc1, unsigned _crm)
MiscRegNum32(unsigned _coproc, unsigned _opc1, unsigned _crn, unsigned _crm, unsigned _opc2)
MiscRegNum64(unsigned _op0, unsigned _op1, unsigned _crn, unsigned _crm, unsigned _op2)
MiscRegNum64(const MiscRegNum64 &rhs)=default
bool operator==(const MiscRegNum64 &other) const
size_t operator()(const gem5::ArmISA::MiscRegNum32 ®) const
size_t operator()(const gem5::ArmISA::MiscRegNum64 ®) const