Go to the documentation of this file.
42 #ifndef __ARCH_ARM_UTILITY_HH__
43 #define __ARCH_ARM_UTILITY_HH__
91 panic(
"Unhandled predicate condition: %d\n", code);
100 panic(
"Copy Misc. Regs Not Implemented Yet\n");
219 static inline uint8_t
224 it.bottom2 = psr.it1;
239 TCR tcr,
bool isInstr);
277 static inline uint32_t
279 uint32_t opc1, uint32_t
opc2)
281 return (isRead << 0) |
291 uint32_t &crn, uint32_t &opc1, uint32_t &
opc2)
293 isRead = (iss >> 0) & 0x1;
294 crm = (iss >> 1) & 0xF;
296 crn = (iss >> 10) & 0xF;
297 opc1 = (iss >> 14) & 0x7;
298 opc2 = (iss >> 17) & 0x7;
301 static inline uint32_t
305 return (isRead << 0) |
312 static inline uint32_t
334 HDCR hdcr, HSTR hstr, HCPTR hcptr, uint32_t iss);
423 CPSR cpsr, SCR scr, NSACR nsacr,
424 bool checkSecurity =
true);
451 return isBigEndian64(tc) ? ByteOrder::big : ByteOrder::little;
void sendEvent(ThreadContext *tc)
Send an event (SEV) to a specific PE if there isn't already a pending event.
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
bool isGenericTimerSystemAccessTrapEL3(const MiscRegIndex miscReg, ThreadContext *tc)
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 ...
void copyRegs(ThreadContext *src, ThreadContext *dest)
bool EL2Enabled(ThreadContext *tc)
uint8_t encodePhysAddrRange64(int pa_size)
Returns the encoding corresponding to the specified n.
ExceptionLevel debugTargetFrom(ThreadContext *tc, bool secure)
RegVal getAffinity(ArmSystem *arm_sys, ThreadContext *tc)
Retrieves MPIDR_EL1.
int computeAddrTop(ThreadContext *tc, bool selbit, bool isInstr, TCR tcr, ExceptionLevel el)
bool HaveVirtHostExt(ThreadContext *tc)
PCState buildRetPC(const PCState &curPC, const PCState &callPC)
static OperatingMode currOpMode(const ThreadContext *tc)
bool isGenericTimerVirtSystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
ByteOrder byteOrder(const ThreadContext *tc)
bool isGenericTimerPhysEL1SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
bool isGenericTimerCommonEL0SystemAccessTrapEL2(const MiscRegIndex miscReg, 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...
static ExceptionLevel currEL(const ThreadContext *tc)
bool condGenericTimerCommonEL1SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
bool isAArch64AArch32SystemAccessTrapEL1(const MiscRegIndex miscReg, ThreadContext *tc)
bool isGenericTimerHypTrap(const MiscRegIndex miscReg, ThreadContext *tc, ExceptionClass *ec)
static bool inSecureState(SCR scr, CPSR cpsr)
static uint8_t itState(CPSR psr)
int decodePhysAddrRange64(uint8_t pa_enc)
Returns the n.
bool condGenericTimerPhysHypTrap(const MiscRegIndex miscReg, ThreadContext *tc)
bool mcrrMrrc15TrapToHyp(const MiscRegIndex miscReg, ThreadContext *tc, uint32_t iss, ExceptionClass *ec)
bool HaveSecureEL2Ext(ThreadContext *tc)
bool mcrMrc15TrapToHyp(const MiscRegIndex miscReg, ThreadContext *tc, uint32_t iss, ExceptionClass *ec)
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.
bool condGenericTimerPhysEL1SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
Fault AArch64AArch32SystemAccessTrap(const MiscRegIndex miscReg, ExtMachInst machInst, ThreadContext *tc, uint32_t imm, ExceptionClass ec)
bool decodeMrsMsrBankedReg(uint8_t sysM, bool r, bool &isIntReg, int ®Idx, CPSR cpsr, SCR scr, NSACR nsacr, bool checkSecurity)
void advancePC(PCState &pc, const StaticInstPtr &inst)
Fault mcrrMrrc15Trap(const MiscRegIndex miscReg, ExtMachInst machInst, ThreadContext *tc, uint32_t imm)
bool ELIs64(ThreadContext *tc, ExceptionLevel el)
Fault mcrMrc15Trap(const MiscRegIndex miscReg, ExtMachInst machInst, ThreadContext *tc, uint32_t imm)
bool IsSecureEL2Enabled(ThreadContext *tc)
bool ELStateUsingAArch32(ThreadContext *tc, ExceptionLevel el, bool secure)
Addr truncPage(Addr addr)
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
bool isBigEndian64(const ThreadContext *tc)
ThreadContext is the external interface to all thread state for anything outside of the CPU.
bool testPredicate(uint32_t nz, uint32_t c, uint32_t v, ConditionCode code)
static int decodeMrsMsrBankedIntRegIndex(uint8_t sysM, bool r)
bool isAArch64AArch32SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
std::shared_ptr< FaultBase > Fault
std::pair< bool, bool > ELStateUsingAArch32K(ThreadContext *tc, ExceptionLevel el, bool secure)
bool SPAlignmentCheckEnabled(ThreadContext *tc)
bool isGenericTimerPhysHypTrap(const MiscRegIndex miscReg, ThreadContext *tc, ExceptionClass *ec)
static ExceptionLevel opModeToEL(OperatingMode mode)
ExceptionLevel s1TranslationRegime(ThreadContext *tc, ExceptionLevel el)
bool longDescFormatInUse(ThreadContext *tc)
std::pair< bool, bool > ELUsingAArch32K(ThreadContext *tc, ExceptionLevel el)
This function checks whether selected EL provided as an argument is using the AArch32 ISA.
static void copyMiscRegs(ThreadContext *src, ThreadContext *dest)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Addr purifyTaggedAddr(Addr addr, ThreadContext *tc, ExceptionLevel el, TCR tcr, bool isInstr)
Removes the tag from tagged addresses if that mode is enabled.
RegVal readMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
This helper function is either returing the value of MPIDR_EL1 (by calling getMPIDR),...
static uint32_t msrMrs64IssBuild(bool isRead, uint32_t op0, uint32_t op1, uint32_t crn, uint32_t crm, uint32_t op2, IntRegIndex rt)
bool HavePACExt(ThreadContext *tc)
static bool inPrivilegedMode(CPSR cpsr)
bool isGenericTimerSystemAccessTrapEL1(const MiscRegIndex miscReg, ThreadContext *tc)
static void mcrMrcIssExtract(uint32_t iss, bool &isRead, uint32_t &crm, IntRegIndex &rt, uint32_t &crn, uint32_t &opc1, uint32_t &opc2)
bool isSecureBelowEL3(ThreadContext *tc)
GenericISA::DelaySlotPCState< MachInst > PCState
uint64_t getExecutingAsid(ThreadContext *tc)
bool isUnpriviledgeAccess(ThreadContext *tc)
virtual RegVal readMiscReg(RegIndex misc_reg)=0
bool isGenericTimerCommonEL0HypTrap(const MiscRegIndex miscReg, ThreadContext *tc, ExceptionClass *ec)
bool condGenericTimerCommonEL0SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
If you want a reference counting pointer to a mutable object, create it like this:
static uint32_t mcrMrcIssBuild(bool isRead, uint32_t crm, IntRegIndex rt, uint32_t crn, uint32_t opc1, uint32_t opc2)
bool inAArch64(ThreadContext *tc)
bool isGenericTimerPhysEL0SystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
static bool inUserMode(CPSR cpsr)
bool mcrMrc14TrapToHyp(const MiscRegIndex miscReg, HCR hcr, CPSR cpsr, SCR scr, HDCR hdcr, HSTR hstr, HCPTR hcptr, uint32_t iss)
bool condGenericTimerSystemAccessTrapEL1(const MiscRegIndex miscReg, ThreadContext *tc)
bool isGenericTimerSystemAccessTrapEL2(const MiscRegIndex miscReg, ThreadContext *tc)
Addr roundPage(Addr addr)
bool badMode(ThreadContext *tc, OperatingMode mode)
badMode is checking if the execution mode provided as an argument is valid and implemented.
bool isSecure(ThreadContext *tc)
#define panic(...)
This implements a cprintf based panic() function.
Generated on Wed Sep 30 2020 14:02:01 for gem5 by doxygen 1.8.17