42#include "debug/MiscRegs.hh"
139 return (
imm & 0x1) << 22;
141 return (
imm & 0x1) << 23;
143 panic(
"Not a valid PSTATE field register\n");
151 std::stringstream
ss;
163 std::stringstream
ss;
183 std::stringstream
ss;
227 std::stringstream
ss;
267 auto asid = asid_16bits ?
bits(value, 63, 48) :
271 asid, last_level, attrs);
279 static_cast<Addr>(
bits(value, 43, 0)) << 12, last_level,
295 static_cast<Addr>(
bits(value, 43, 0)) << 12, last_level,
310 auto asid = asid_16bits ?
bits(value, 63, 48) :
327 TLBIIPA tlbi_op(tc, TranslationRegime::EL10,
ss, value,
343 TLBIRMVAA tlbi_op(regime,
ss, value, last_level, attrs);
359 auto asid = asid_16bits ?
bits(value, 63, 48) :
369 tlbiRvaa(tc, value,
ss, regime, shareable, last_level, attrs);
379 TLBIRIPA tlbi_op(tc, TranslationRegime::EL10,
ss, value,
395 HaveExt(tc, ArmExtension::FEAT_XS) &&
396 HaveExt(tc, ArmExtension::FEAT_HCX) &&
404 SecurityState::Secure,
405 TranslationRegime::EL3,
413 SecurityState::Secure,
414 TranslationRegime::EL3,
416 TlbiAttr::ExcludeXS);
423 SecurityState::Secure,
424 TranslationRegime::EL3,
432 SecurityState::Secure,
433 TranslationRegime::EL3,
435 TlbiAttr::ExcludeXS);
442 SecurityState::Secure,
443 TranslationRegime::EL3,
451 SecurityState::Secure,
452 TranslationRegime::EL3,
454 TlbiAttr::ExcludeXS);
462 TranslationRegime::EL20 : TranslationRegime::EL2;
474 TranslationRegime::EL20 : TranslationRegime::EL2;
480 TlbiAttr::ExcludeXS);
487 TranslationRegime::EL20 : TranslationRegime::EL2;
499 TranslationRegime::EL20 : TranslationRegime::EL2;
505 TlbiAttr::ExcludeXS);
512 TranslationRegime::EL20 : TranslationRegime::EL2;
524 TranslationRegime::EL20 : TranslationRegime::EL2;
530 TlbiAttr::ExcludeXS);
538 TranslationRegime::EL10,
547 TranslationRegime::EL10,
549 TlbiAttr::ExcludeXS);
557 TranslationRegime::EL10,
566 TranslationRegime::EL10,
568 TlbiAttr::ExcludeXS);
576 TranslationRegime::EL10,
585 TranslationRegime::EL10,
587 TlbiAttr::ExcludeXS);
595 TranslationRegime::EL20 : TranslationRegime::EL10;
597 const TlbiAttr attrs = fnxsAttrs(tc) ?
598 TlbiAttr::ExcludeXS : TlbiAttr::None;
617 TranslationRegime::EL20 : TranslationRegime::EL10;
629 TlbiAttr::ExcludeXS);
636 TranslationRegime::EL20 : TranslationRegime::EL10;
638 const TlbiAttr attrs = fnxsAttrs(tc) ?
639 TlbiAttr::ExcludeXS : TlbiAttr::None;
653 TranslationRegime::EL20 : TranslationRegime::EL10;
660 TlbiAttr::ExcludeXS);
667 TranslationRegime::EL20 : TranslationRegime::EL10;
669 const TlbiAttr attrs = fnxsAttrs(tc) ?
670 TlbiAttr::ExcludeXS : TlbiAttr::None;
684 TranslationRegime::EL20 : TranslationRegime::EL10;
691 TlbiAttr::ExcludeXS);
699 TranslationRegime::EL10,
709 TranslationRegime::EL10,
712 TlbiAttr::ExcludeXS);
720 TranslationRegime::EL10,
730 TranslationRegime::EL10,
733 TlbiAttr::ExcludeXS);
741 TranslationRegime::EL10,
751 TranslationRegime::EL10,
754 TlbiAttr::ExcludeXS);
762 SecurityState::Secure,
763 TranslationRegime::EL3,
772 SecurityState::Secure,
773 TranslationRegime::EL3,
776 TlbiAttr::ExcludeXS);
784 SecurityState::Secure,
785 TranslationRegime::EL3,
794 SecurityState::Secure,
795 TranslationRegime::EL3,
798 TlbiAttr::ExcludeXS);
805 SecurityState::Secure,
806 TranslationRegime::EL3,
815 SecurityState::Secure,
816 TranslationRegime::EL3,
819 TlbiAttr::ExcludeXS);
827 SecurityState::Secure,
828 TranslationRegime::EL3,
837 SecurityState::Secure,
838 TranslationRegime::EL3,
841 TlbiAttr::ExcludeXS);
849 SecurityState::Secure,
850 TranslationRegime::EL3,
859 SecurityState::Secure,
860 TranslationRegime::EL3,
863 TlbiAttr::ExcludeXS);
871 SecurityState::Secure,
872 TranslationRegime::EL3,
881 SecurityState::Secure,
882 TranslationRegime::EL3,
885 TlbiAttr::ExcludeXS);
892 TranslationRegime::EL20 : TranslationRegime::EL2;
905 TranslationRegime::EL20 : TranslationRegime::EL2;
912 TlbiAttr::ExcludeXS);
920 TranslationRegime::EL2,
930 TranslationRegime::EL2,
933 TlbiAttr::ExcludeXS);
942 TranslationRegime::EL2,
952 TranslationRegime::EL2,
955 TlbiAttr::ExcludeXS);
963 TranslationRegime::EL20 : TranslationRegime::EL2;
976 TranslationRegime::EL20 : TranslationRegime::EL2;
983 TlbiAttr::ExcludeXS);
990 TranslationRegime::EL20 : TranslationRegime::EL2;
1003 TranslationRegime::EL20 : TranslationRegime::EL2;
1010 TlbiAttr::ExcludeXS);
1017 TranslationRegime::EL20 : TranslationRegime::EL2;
1030 TranslationRegime::EL20 : TranslationRegime::EL2;
1037 TlbiAttr::ExcludeXS);
1044 TranslationRegime::EL20 : TranslationRegime::EL10;
1046 const TlbiAttr attrs = fnxsAttrs(tc) ?
1047 TlbiAttr::ExcludeXS : TlbiAttr::None;
1066 TranslationRegime::EL20 : TranslationRegime::EL10;
1078 TlbiAttr::ExcludeXS);
1085 TranslationRegime::EL20 : TranslationRegime::EL10;
1087 const TlbiAttr attrs = fnxsAttrs(tc) ?
1088 TlbiAttr::ExcludeXS : TlbiAttr::None;
1102 TranslationRegime::EL20 : TranslationRegime::EL10;
1109 TlbiAttr::ExcludeXS);
1116 TranslationRegime::EL20 : TranslationRegime::EL10;
1118 const TlbiAttr attrs = fnxsAttrs(tc) ?
1119 TlbiAttr::ExcludeXS : TlbiAttr::None;
1133 TranslationRegime::EL20 : TranslationRegime::EL10;
1140 TlbiAttr::ExcludeXS);
1147 TranslationRegime::EL20 : TranslationRegime::EL10;
1149 const TlbiAttr attrs = fnxsAttrs(tc) ?
1150 TlbiAttr::ExcludeXS : TlbiAttr::None;
1164 TranslationRegime::EL20 : TranslationRegime::EL10;
1176 TlbiAttr::ExcludeXS);
1183 TranslationRegime::EL20 : TranslationRegime::EL10;
1185 const TlbiAttr attrs = fnxsAttrs(tc) ?
1186 TlbiAttr::ExcludeXS : TlbiAttr::None;
1200 TranslationRegime::EL20 : TranslationRegime::EL10;
1207 TlbiAttr::ExcludeXS);
1214 TranslationRegime::EL20 : TranslationRegime::EL10;
1216 const TlbiAttr attrs = fnxsAttrs(tc) ?
1217 TlbiAttr::ExcludeXS : TlbiAttr::None;
1231 TranslationRegime::EL20 : TranslationRegime::EL10;
1238 TlbiAttr::ExcludeXS);
1245 TranslationRegime::EL20 : TranslationRegime::EL10;
1247 const TlbiAttr attrs = fnxsAttrs(tc) ?
1248 TlbiAttr::ExcludeXS : TlbiAttr::None;
1266 TranslationRegime::EL20 : TranslationRegime::EL10;
1277 TlbiAttr::ExcludeXS);
1284 TranslationRegime::EL20 : TranslationRegime::EL10;
1286 const TlbiAttr attrs = fnxsAttrs(tc) ?
1287 TlbiAttr::ExcludeXS : TlbiAttr::None;
1300 TranslationRegime::EL20 : TranslationRegime::EL10;
1306 TlbiAttr::ExcludeXS);
1313 TranslationRegime::EL20 : TranslationRegime::EL10;
1315 const TlbiAttr attrs = fnxsAttrs(tc) ?
1316 TlbiAttr::ExcludeXS : TlbiAttr::None;
1329 TranslationRegime::EL20 : TranslationRegime::EL10;
1335 TlbiAttr::ExcludeXS);
1342 TranslationRegime::EL20 : TranslationRegime::EL10;
1344 const TlbiAttr attrs = fnxsAttrs(tc) ?
1345 TlbiAttr::ExcludeXS : TlbiAttr::None;
1364 TranslationRegime::EL20 : TranslationRegime::EL10;
1376 TlbiAttr::ExcludeXS);
1383 TranslationRegime::EL20 : TranslationRegime::EL10;
1385 const TlbiAttr attrs = fnxsAttrs(tc) ?
1386 TlbiAttr::ExcludeXS : TlbiAttr::None;
1400 TranslationRegime::EL20 : TranslationRegime::EL10;
1407 TlbiAttr::ExcludeXS);
1414 TranslationRegime::EL20 : TranslationRegime::EL10;
1416 const TlbiAttr attrs = fnxsAttrs(tc) ?
1417 TlbiAttr::ExcludeXS : TlbiAttr::None;
1431 TranslationRegime::EL20 : TranslationRegime::EL10;
1438 TlbiAttr::ExcludeXS);
1445 TranslationRegime::EL20 : TranslationRegime::EL10;
1447 const TlbiAttr attrs = fnxsAttrs(tc) ?
1448 TlbiAttr::ExcludeXS : TlbiAttr::None;
1467 TranslationRegime::EL20 : TranslationRegime::EL10;
1479 TlbiAttr::ExcludeXS);
1486 TranslationRegime::EL20 : TranslationRegime::EL10;
1488 const TlbiAttr attrs = fnxsAttrs(tc) ?
1489 TlbiAttr::ExcludeXS : TlbiAttr::None;
1503 TranslationRegime::EL20 : TranslationRegime::EL10;
1510 TlbiAttr::ExcludeXS);
1517 TranslationRegime::EL20 : TranslationRegime::EL10;
1519 const TlbiAttr attrs = fnxsAttrs(tc) ?
1520 TlbiAttr::ExcludeXS : TlbiAttr::None;
1534 TranslationRegime::EL20 : TranslationRegime::EL10;
1541 TlbiAttr::ExcludeXS);
1549 TranslationRegime::EL10,
1559 TranslationRegime::EL10,
1562 TlbiAttr::ExcludeXS);
1570 TranslationRegime::EL10,
1580 TranslationRegime::EL10,
1583 TlbiAttr::ExcludeXS);
1592 TranslationRegime::EL10,
1602 TranslationRegime::EL10,
1605 TlbiAttr::ExcludeXS);
1613 TranslationRegime::EL10,
1623 TranslationRegime::EL10,
1626 TlbiAttr::ExcludeXS);
1635 TranslationRegime::EL10,
1645 TranslationRegime::EL10,
1648 TlbiAttr::ExcludeXS);
1657 TranslationRegime::EL10,
1667 TranslationRegime::EL10,
1670 TlbiAttr::ExcludeXS);
1678 TranslationRegime::EL20 : TranslationRegime::EL10;
1680 const TlbiAttr attrs = fnxsAttrs(tc) ?
1681 TlbiAttr::ExcludeXS : TlbiAttr::None;
1700 TranslationRegime::EL20 : TranslationRegime::EL10;
1712 TlbiAttr::ExcludeXS);
1719 TranslationRegime::EL20 : TranslationRegime::EL10;
1721 const TlbiAttr attrs = fnxsAttrs(tc) ?
1722 TlbiAttr::ExcludeXS : TlbiAttr::None;
1736 TranslationRegime::EL20 : TranslationRegime::EL10;
1743 TlbiAttr::ExcludeXS);
1750 TranslationRegime::EL20 : TranslationRegime::EL10;
1752 const TlbiAttr attrs = fnxsAttrs(tc) ?
1753 TlbiAttr::ExcludeXS : TlbiAttr::None;
1767 TranslationRegime::EL20 : TranslationRegime::EL10;
1774 TlbiAttr::ExcludeXS);
1781 TranslationRegime::EL20 : TranslationRegime::EL10;
1783 const TlbiAttr attrs = fnxsAttrs(tc) ?
1784 TlbiAttr::ExcludeXS : TlbiAttr::None;
1803 TranslationRegime::EL20 : TranslationRegime::EL10;
1815 TlbiAttr::ExcludeXS);
1822 TranslationRegime::EL20 : TranslationRegime::EL10;
1824 const TlbiAttr attrs = fnxsAttrs(tc) ?
1825 TlbiAttr::ExcludeXS : TlbiAttr::None;
1839 TranslationRegime::EL20 : TranslationRegime::EL10;
1846 TlbiAttr::ExcludeXS);
1854 TranslationRegime::EL20 : TranslationRegime::EL10;
1856 const TlbiAttr attrs = fnxsAttrs(tc) ?
1857 TlbiAttr::ExcludeXS : TlbiAttr::None;
1871 TranslationRegime::EL20 : TranslationRegime::EL10;
1878 TlbiAttr::ExcludeXS);
1885 TranslationRegime::EL20 : TranslationRegime::EL10;
1887 const TlbiAttr attrs = fnxsAttrs(tc) ?
1888 TlbiAttr::ExcludeXS : TlbiAttr::None;
1907 TranslationRegime::EL20 : TranslationRegime::EL10;
1919 TlbiAttr::ExcludeXS);
1926 TranslationRegime::EL20 : TranslationRegime::EL10;
1928 const TlbiAttr attrs = fnxsAttrs(tc) ?
1929 TlbiAttr::ExcludeXS : TlbiAttr::None;
1943 TranslationRegime::EL20 : TranslationRegime::EL10;
1950 TlbiAttr::ExcludeXS);
1957 TranslationRegime::EL20 : TranslationRegime::EL10;
1959 const TlbiAttr attrs = fnxsAttrs(tc) ?
1960 TlbiAttr::ExcludeXS : TlbiAttr::None;
1974 TranslationRegime::EL20 : TranslationRegime::EL10;
1981 TlbiAttr::ExcludeXS);
1988 TranslationRegime::EL20 : TranslationRegime::EL10;
1990 const TlbiAttr attrs = fnxsAttrs(tc) ?
1991 TlbiAttr::ExcludeXS : TlbiAttr::None;
2010 TranslationRegime::EL20 : TranslationRegime::EL10;
2022 TlbiAttr::ExcludeXS);
2029 TranslationRegime::EL20 : TranslationRegime::EL10;
2031 const TlbiAttr attrs = fnxsAttrs(tc) ?
2032 TlbiAttr::ExcludeXS : TlbiAttr::None;
2046 TranslationRegime::EL20 : TranslationRegime::EL10;
2053 TlbiAttr::ExcludeXS);
2060 TranslationRegime::EL20 : TranslationRegime::EL10;
2062 const TlbiAttr attrs = fnxsAttrs(tc) ?
2063 TlbiAttr::ExcludeXS : TlbiAttr::None;
2077 TranslationRegime::EL20 : TranslationRegime::EL10;
2084 TlbiAttr::ExcludeXS);
2092 TranslationRegime::EL10,
2100 tlbiRipaS2(tc, value,
2102 TranslationRegime::EL10,
2105 TlbiAttr::ExcludeXS);
2114 TranslationRegime::EL10,
2122 tlbiRipaS2(tc, value,
2124 TranslationRegime::EL10,
2127 TlbiAttr::ExcludeXS);
2135 TranslationRegime::EL10,
2143 tlbiRipaS2(tc, value,
2145 TranslationRegime::EL10,
2148 TlbiAttr::ExcludeXS);
2154 tlbiRipaS2(tc, value,
2156 TranslationRegime::EL10,
2164 tlbiRipaS2(tc, value,
2166 TranslationRegime::EL10,
2169 TlbiAttr::ExcludeXS);
2177 TranslationRegime::EL10,
2185 tlbiRipaS2(tc, value,
2187 TranslationRegime::EL10,
2190 TlbiAttr::ExcludeXS);
2198 TranslationRegime::EL10,
2206 tlbiRipaS2(tc, value,
2208 TranslationRegime::EL10,
2211 TlbiAttr::ExcludeXS);
2219 TranslationRegime::EL10,
2227 tlbiRipaS2(tc, value,
2229 TranslationRegime::EL10,
2232 TlbiAttr::ExcludeXS);
2239 TranslationRegime::EL20 : TranslationRegime::EL2;
2252 TranslationRegime::EL20 : TranslationRegime::EL2;
2259 TlbiAttr::ExcludeXS);
2266 TranslationRegime::EL20 : TranslationRegime::EL2;
2279 TranslationRegime::EL20 : TranslationRegime::EL2;
2286 TlbiAttr::ExcludeXS);
2293 TranslationRegime::EL20 : TranslationRegime::EL2;
2306 TranslationRegime::EL20 : TranslationRegime::EL2;
2313 TlbiAttr::ExcludeXS);
2320 TranslationRegime::EL20 : TranslationRegime::EL2;
2333 TranslationRegime::EL20 : TranslationRegime::EL2;
2340 TlbiAttr::ExcludeXS);
2347 TranslationRegime::EL20 : TranslationRegime::EL2;
2360 TranslationRegime::EL20 : TranslationRegime::EL2;
2367 TlbiAttr::ExcludeXS);
2374 TranslationRegime::EL20 : TranslationRegime::EL2;
2387 TranslationRegime::EL20 : TranslationRegime::EL2;
2394 TlbiAttr::ExcludeXS);
2402 TranslationRegime::EL3,
2412 TranslationRegime::EL3,
2415 TlbiAttr::ExcludeXS);
2423 TranslationRegime::EL3,
2433 TranslationRegime::EL3,
2436 TlbiAttr::ExcludeXS);
2444 TranslationRegime::EL3,
2454 TranslationRegime::EL3,
2457 TlbiAttr::ExcludeXS);
2465 TranslationRegime::EL3,
2475 TranslationRegime::EL3,
2478 TlbiAttr::ExcludeXS);
2486 TranslationRegime::EL3,
2496 TranslationRegime::EL3,
2499 TlbiAttr::ExcludeXS);
2507 TranslationRegime::EL3,
2517 TranslationRegime::EL3,
2520 TlbiAttr::ExcludeXS);
2531 it->second(tc, value);
2533 panic(
"Invalid TLBI\n");
2573 return std::make_pair(
NoFault, 0);
2576 return std::make_pair(
NoFault, 0);
2590 warn_once(
"Doing AT (address translation) in functional mode! Fix Me!\n");
2592 auto req = std::make_shared<Request>(
2597 req, tc,
mode, tran_type);
2600 bool raise_fault =
false;
2602 Addr paddr = req->getPaddr();
2605 attr &= ~ uint64_t(0x800);
2606 uint64_t attr1 =
attr >> 56;
2607 if (!(attr1 >> 4) || attr1 == 0x44) {
2609 attr &= ~ uint64_t(0x80);
2611 par = (paddr &
mask(47, 12)) |
attr;
2612 DPRINTF(MiscRegs,
"AT: Translated addr %#x: PAR_EL1: %#x\n",
2618 FSR fsr = arm_fault->
getFsr(tc);
2624 par.fst = fsr.status;
2625 par.ptw = (arm_fault->
iss() >> 7) & 0x1;
2626 par.s = arm_fault->
isStage2() ? 1 : 0;
2634 DPRINTF(MiscRegs,
"AT: Translated addr %#x fault fsr %#x: PAR: %#x\n",
2639 if (fault !=
NoFault && !raise_fault) {
2643 return std::make_pair(fault, par);
virtual FSR getFsr(ThreadContext *tc) const
virtual uint32_t iss() const =0
virtual void annotate(AnnotationIDs id, uint64_t val)
virtual bool isExternalAbort() const
virtual void update(ThreadContext *tc)
virtual bool isStage2() const
void printMiscReg(std::ostream &os, RegIndex reg_idx) const
void printMnemonic(std::ostream &os, const std::string &suffix="", bool withPred=true, bool withCond64=false, ConditionCode cond64=COND_UC) const
void printIntReg(std::ostream &os, RegIndex reg_idx, uint8_t opWidth=0) const
Print a register name for disassembly given the unique dependence tag number (FP or int).
MachInst encoding() const
Returns the real encoding of the instruction: the machInst field is in fact always 64 bit wide and co...
static bool hasUnprivRegime(TranslationRegime regime)
TranslationGenPtr translateFunctional(Addr start, Addr size, ThreadContext *tc, Mode mode, Request::Flags flags) override
Returns a translation generator for a region of virtual addresses, instead of directly translating a ...
Implementaton of AArch64 TLBI ALLE(1,2,3)(IS) instructions.
TLB Invalidate by ASID match.
TLB Invalidate by Intermediate Physical Address.
TLB Invalidate by VA, All ASID.
void broadcast(ThreadContext *tc)
Broadcast the TLB Invalidate operation to all TLBs in the Arm system.
TLB Range Invalidate by VA, All ASIDs.
TLB Range Invalidate by VA, All ASIDs.
TLB Range Invalidate by VA.
Implementaton of AArch64 TLBI VMALLE1(IS)/VMALLS112E1(IS) instructions.
bool haveLargeAsid64() const
Returns true if ASID is 16 bits in AArch64 (ARMv8)
std::pair< Fault, uint64_t > performAt(ExecContext *xc, ArmISA::MiscRegIndex idx, RegVal val) const
std::pair< Fault, uint64_t > addressTranslation64(ThreadContext *tc, ArmISA::MMU::ArmTranslationType tran_type, BaseMMU::Mode mode, Request::Flags flags, RegVal val) const
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
virtual ThreadContext * tcBase() const =0
Returns a pointer to the ThreadContext.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
RegVal miscRegImm() const
Returns the "register view" of the immediate field.
ArmISA::MiscRegIndex dest
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
const ArmISA::MiscRegNum64 miscReg
const std::string fullMnemonic
uint32_t iss() const override
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg, RegIndex int_index) const
Fault generateTrap(ArmISA::ExceptionLevel el) const
virtual uint32_t iss() const
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
ArmISA::MiscRegIndex dest
uint32_t iss() const override
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
uint32_t iss() const override
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
Internal function to generate disassembly string.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
@ funcRequestorId
This requestor id is used for functional requests that don't come from a particular device.
gem5::Flags< FlagsType > Flags
std::bitset< Num_Flags > flags
Flag values for this instruction.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual const PCStateBase & pcState() const =0
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
virtual ContextID contextId() const =0
static void tlbiVa(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
static void tlbiIpaS2(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
static bool fnxsAttrs(ThreadContext *tc)
static void tlbiVaa(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
static void tlbiAsid(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, TlbiAttr attrs=TlbiAttr::None)
static void tlbiRipaS2(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
static std::unordered_map< ArmISA::MiscRegIndex, TlbiFunc > tlbiOps
void performTlbi(ExecContext *xc, ArmISA::MiscRegIndex idx, RegVal value) const
static void tlbiRvaa(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
static void tlbiRva(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool last_level, TlbiAttr attrs=TlbiAttr::None)
ArmISA::TLBIOp::Attr TlbiAttr
static void tlbiAll(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, TlbiAttr attrs=TlbiAttr::None)
static void tlbiVmall(ThreadContext *tc, RegVal value, ArmISA::SecurityState ss, ArmISA::TranslationRegime regime, bool shareable, bool stage2=false, TlbiAttr attrs=TlbiAttr::None)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
#define panic(...)
This implements a cprintf based panic() function.
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 ...
ExceptionLevel currEL(const ThreadContext *tc)
Returns the current Exception Level (EL) of the provided ThreadContext.
Fault checkFaultAccessAArch64SysReg(MiscRegIndex reg, CPSR cpsr, ThreadContext *tc, const MiscRegOp64 &inst)
SecurityState securityStateAtEL(ThreadContext *tc, ExceptionLevel el)
bool EL2Enabled(ThreadContext *tc)
ExceptionLevel translationEl(TranslationRegime regime)
SecurityState
Security State.
bool isHcrxEL2Enabled(ThreadContext *tc)
std::optional< MiscRegNum64 > encodeAArch64SysReg(MiscRegIndex misc_reg)
bool HaveExt(ThreadContext *tc, ArmExtension ext)
Returns true if the provided ThreadContext supports the ArmExtension passed as a second argument.
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< FaultBase > Fault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
std::string csprintf(const char *format, const Args &...args)
constexpr decltype(nullptr) NoFault
void ccprintf(cp::Print &print)
The file contains the definition of a set of TLB Invalidate Instructions.