Go to the documentation of this file.
42 #ifndef __ARCH_ARM_UTILITY_HH__
43 #define __ARCH_ARM_UTILITY_HH__
87 panic(
"Unhandled predicate condition: %d\n", code);
187 static inline uint8_t
192 it.bottom2 = psr.it1;
207 TCR tcr,
bool isInstr);
228 static inline uint32_t
230 uint32_t opc1, uint32_t
opc2)
232 return (isRead << 0) |
242 uint32_t &crn, uint32_t &opc1, uint32_t &
opc2)
244 isRead = (iss >> 0) & 0x1;
245 crm = (iss >> 1) & 0xF;
246 rt = (IntRegIndex)((iss >> 5) & 0xF);
247 crn = (iss >> 10) & 0xF;
248 opc1 = (iss >> 14) & 0x7;
249 opc2 = (iss >> 17) & 0x7;
252 static inline uint32_t
256 return (isRead << 0) |
263 static inline uint32_t
265 uint32_t crm, uint32_t op2, IntRegIndex
rt)
337 CPSR cpsr, SCR scr, NSACR nsacr,
338 bool checkSecurity=
true);
350 sysM,
r, isIntReg, regIdx, 0, 0, 0,
false);
351 return (validReg && isIntReg) ? regIdx : INTREG_ZERO;
367 return isBigEndian64(tc) ? ByteOrder::big : ByteOrder::little;
bool ELIs64(ThreadContext *tc, ExceptionLevel el)
bool isGenericTimerPhysEL1SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool isGenericTimerHypTrap(const MiscRegIndex misc_reg, ThreadContext *tc, ExceptionClass *ec)
bool testPredicate(uint32_t nz, uint32_t c, uint32_t v, ConditionCode code)
int decodePhysAddrRange64(uint8_t pa_enc)
Returns the n.
bool isGenericTimerSystemAccessTrapEL1(const MiscRegIndex misc_reg, ThreadContext *tc)
bool isGenericTimerCommonEL0HypTrap(const MiscRegIndex misc_reg, ThreadContext *tc, ExceptionClass *ec)
uint8_t encodePhysAddrRange64(int pa_size)
Returns the encoding corresponding to the specified n.
bool isSecureBelowEL3(ThreadContext *tc)
bool isGenericTimerSystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool mcrrMrrc15TrapToHyp(const MiscRegIndex misc_reg, ThreadContext *tc, uint32_t iss, ExceptionClass *ec)
ByteOrder byteOrder(const ThreadContext *tc)
static ExceptionLevel opModeToEL(OperatingMode mode)
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 ...
bool isAArch64AArch32SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool inAArch64(ThreadContext *tc)
bool badMode(ThreadContext *tc, OperatingMode mode)
badMode is checking if the execution mode provided as an argument is valid and implemented.
Fault AArch64AArch32SystemAccessTrap(const MiscRegIndex misc_reg, ExtMachInst mach_inst, ThreadContext *tc, uint32_t imm, ExceptionClass ec)
Addr truncPage(Addr addr)
std::pair< bool, bool > ELUsingAArch32K(ThreadContext *tc, ExceptionLevel el)
This function checks whether selected EL provided as an argument is using the AArch32 ISA.
bool condGenericTimerCommonEL0SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool condGenericTimerSystemAccessTrapEL1(const MiscRegIndex misc_reg, ThreadContext *tc)
bool mcrMrc14TrapToHyp(const MiscRegIndex misc_reg, ThreadContext *tc, uint32_t iss)
bool HaveLVA(ThreadContext *tc)
Fault mcrMrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst, ThreadContext *tc, uint32_t imm)
Addr purifyTaggedAddr(Addr addr, ThreadContext *tc, ExceptionLevel el, TCR tcr, bool is_instr)
Removes the tag from tagged addresses if that mode is enabled.
bool HavePACExt(ThreadContext *tc)
bool isGenericTimerCommonEL0SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
static uint32_t mcrMrcIssBuild(bool isRead, uint32_t crm, IntRegIndex rt, uint32_t crn, uint32_t opc1, uint32_t opc2)
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Fault mcrrMrrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst, ThreadContext *tc, uint32_t imm)
bool condGenericTimerPhysHypTrap(const MiscRegIndex misc_reg, ThreadContext *tc)
std::shared_ptr< FaultBase > Fault
bool HaveVirtHostExt(ThreadContext *tc)
Addr roundPage(Addr addr)
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
void syncVecElemsToRegs(ThreadContext *tc)
RegVal getAffinity(ArmSystem *arm_sys, ThreadContext *tc)
Retrieves MPIDR_EL1.
bool EL2Enabled(ThreadContext *tc)
static uint32_t msrMrs64IssBuild(bool isRead, uint32_t op0, uint32_t op1, uint32_t crn, uint32_t crm, uint32_t op2, IntRegIndex rt)
bool SPAlignmentCheckEnabled(ThreadContext *tc)
bool mcrMrc15TrapToHyp(const MiscRegIndex misc_reg, ThreadContext *tc, uint32_t iss, ExceptionClass *ec)
ExceptionLevel s1TranslationRegime(ThreadContext *tc, ExceptionLevel el)
ExceptionLevel debugTargetFrom(ThreadContext *tc, bool secure)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
static bool inPrivilegedMode(CPSR cpsr)
bool isSecure(ThreadContext *tc)
std::pair< bool, bool > ELStateUsingAArch32K(ThreadContext *tc, ExceptionLevel el, bool secure)
ExceptionLevel currEL(const ThreadContext *tc)
Returns the current Exception Level (EL) of the provided ThreadContext.
bool IsSecureEL2Enabled(ThreadContext *tc)
static int decodeMrsMsrBankedIntRegIndex(uint8_t sysM, bool r)
void syncVecRegsToElems(ThreadContext *tc)
bool decodeMrsMsrBankedReg(uint8_t sysM, bool r, bool &isIntReg, int ®Idx, CPSR cpsr, SCR scr, NSACR nsacr, bool checkSecurity)
bool isUnpriviledgeAccess(ThreadContext *tc)
bool isGenericTimerSystemAccessTrapEL3(const MiscRegIndex misc_reg, ThreadContext *tc)
void sendEvent(ThreadContext *tc)
Send an event (SEV) to a specific PE if there isn't already a pending event.
bool ELStateUsingAArch32(ThreadContext *tc, ExceptionLevel el, bool secure)
bool longDescFormatInUse(ThreadContext *tc)
static bool inUserMode(CPSR cpsr)
bool HaveSecureEL2Ext(ThreadContext *tc)
bool badMode32(ThreadContext *tc, OperatingMode mode)
badMode is checking if the execution mode provided as an argument is valid and implemented for AArch3...
bool isGenericTimerVirtSystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool condGenericTimerPhysEL1SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
bool condGenericTimerCommonEL1SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
static uint8_t itState(CPSR psr)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
int computeAddrTop(ThreadContext *tc, bool selbit, bool is_instr, TCR tcr, ExceptionLevel el)
bool isGenericTimerPhysHypTrap(const MiscRegIndex misc_reg, ThreadContext *tc, ExceptionClass *ec)
bool isBigEndian64(const ThreadContext *tc)
bool isAArch64AArch32SystemAccessTrapEL1(const MiscRegIndex misc_reg, ThreadContext *tc)
bool isGenericTimerPhysEL0SystemAccessTrapEL2(const MiscRegIndex misc_reg, ThreadContext *tc)
RegVal readMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
This helper function is either returing the value of MPIDR_EL1 (by calling getMPIDR),...
static uint32_t mcrrMrrcIssBuild(bool isRead, uint32_t crm, IntRegIndex rt, IntRegIndex rt2, uint32_t opc1)
RegVal getMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
This helper function is returning the value of MPIDR_EL1.
#define panic(...)
This implements a cprintf based panic() function.
static void mcrMrcIssExtract(uint32_t iss, bool &isRead, uint32_t &crm, IntRegIndex &rt, uint32_t &crn, uint32_t &opc1, uint32_t &opc2)
Generated on Wed May 4 2022 12:13:49 for gem5 by doxygen 1.8.17