Go to the documentation of this file.
46 using namespace ArmISA;
52 printMnemonic(
ss,
"",
false);
61 printMnemonic(
ss,
"",
false);
70 printMnemonic(
ss,
"",
false);
83 printMnemonic(
ss,
"",
false);
84 printIntReg(
ss, dest);
96 printMnemonic(
ss,
"",
false);
97 printIntReg(
ss, dest);
101 printIntReg(
ss, op2);
117 (misc_reg.
crm << 1) |
119 (misc_reg.
crn << 10) |
120 (misc_reg.
op1 << 14) |
121 (misc_reg.
op2 << 17) |
122 (misc_reg.
op0 << 20);
137 return std::make_shared<SupervisorTrap>(getEMI(),
iss,
ec);
139 return std::make_shared<HypervisorTrap>(getEMI(),
iss,
ec);
141 return std::make_shared<SecureMonitorTrap>(getEMI(),
iss,
ec);
154 return (
imm & 0x1) << 22;
156 return (
imm & 0x1) << 23;
158 panic(
"Not a valid PSTATE field register\n");
166 std::stringstream
ss;
168 printMiscReg(
ss, dest);
178 std::stringstream
ss;
180 printMiscReg(
ss, dest);
182 printIntReg(
ss, op1);
190 return _iss(misc_reg, op1);
197 std::stringstream
ss;
199 printIntReg(
ss, dest);
201 printMiscReg(
ss, op1);
209 return _iss(misc_reg, dest);
227 return csprintf(
"%-10s (implementation defined)", fullMnemonic.c_str());
233 return _iss(miscReg, intReg);
240 std::stringstream
ss;
242 printIntReg(
ss, dest);
279 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
293 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
303 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
317 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
326 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
338 if (hcr.tge && hcr.e2h) {
343 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
344 TLBIVMALL tlbiOp(target_el, secure,
false);
355 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
370 if (hcr.tge && hcr.e2h) {
375 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
376 TLBIVMALL tlbiOp(target_el, secure,
false);
385 static_cast<Addr>(
bits(value, 43, 0)) << 12,
395 static_cast<Addr>(
bits(value, 43, 0)) << 12,
408 static_cast<Addr>(
bits(value, 43, 0)) << 12,
422 static_cast<Addr>(
bits(value, 43, 0)) << 12,
434 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
438 auto asid = asid_16bits ?
bits(value, 63, 48) :
442 static_cast<Addr>(
bits(value, 43, 0)) << 12,
447 static_cast<Addr>(
bits(value, 43, 0)) << 12,
459 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
463 auto asid = asid_16bits ?
bits(value, 63, 48) :
467 static_cast<Addr>(
bits(value, 43, 0)) << 12,
472 static_cast<Addr>(
bits(value, 43, 0)) << 12,
488 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
492 auto asid = asid_16bits ?
bits(value, 63, 48) :
496 static_cast<Addr>(
bits(value, 43, 0)) << 12,
501 static_cast<Addr>(
bits(value, 43, 0)) << 12,
517 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
521 auto asid = asid_16bits ?
bits(value, 63, 48) :
525 static_cast<Addr>(
bits(value, 43, 0)) << 12,
530 static_cast<Addr>(
bits(value, 43, 0)) << 12,
540 auto asid = asid_16bits ?
bits(value, 63, 48) :
546 if (hcr.tge && hcr.e2h) {
551 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
552 TLBIMVA tlbiOp(target_el, secure,
553 static_cast<Addr>(
bits(value, 43, 0)) << 12,
563 auto asid = asid_16bits ?
bits(value, 63, 48) :
569 if (hcr.tge && hcr.e2h) {
574 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
575 TLBIMVA tlbiOp(target_el, secure,
576 static_cast<Addr>(
bits(value, 43, 0)) << 12,
590 auto asid = asid_16bits ?
bits(value, 63, 48) :
596 if (hcr.tge && hcr.e2h) {
601 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
602 TLBIMVA tlbiOp(target_el, secure,
603 static_cast<Addr>(
bits(value, 43, 0)) << 12,
612 auto asid = asid_16bits ?
bits(value, 63, 48) :
618 if (hcr.tge && hcr.e2h) {
623 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
624 TLBIMVA tlbiOp(target_el, secure,
625 static_cast<Addr>(
bits(value, 43, 0)) << 12,
635 auto asid = asid_16bits ?
bits(value, 63, 48) :
641 if (hcr.tge && hcr.e2h) {
646 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
659 auto asid = asid_16bits ?
bits(value, 63, 48) :
665 if (hcr.tge && hcr.e2h) {
670 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
683 if (hcr.tge && hcr.e2h) {
688 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
690 static_cast<Addr>(
bits(value, 43, 0)) << 12,
704 if (hcr.tge && hcr.e2h) {
709 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
711 static_cast<Addr>(
bits(value, 43, 0)) << 12,
729 if (hcr.tge && hcr.e2h) {
734 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
736 static_cast<Addr>(
bits(value, 43, 0)) << 12,
756 if (hcr.tge && hcr.e2h) {
761 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
763 static_cast<Addr>(
bits(value, 43, 0)) << 12,
776 bool secure = release->has(ArmExtension::SECURITY) &&
777 !scr.ns && !
bits(value, 63);
782 static_cast<Addr>(
bits(value, top_bit, 0)) << 12,
796 bool secure = release->has(ArmExtension::SECURITY) &&
797 !scr.ns && !
bits(value, 63);
800 static_cast<Addr>(
bits(value, 35, 0)) << 12,
819 bool secure = release->has(ArmExtension::SECURITY) &&
820 !scr.ns && !
bits(value, 63);
825 static_cast<Addr>(
bits(value, top_bit, 0)) << 12,
844 bool secure = release->has(ArmExtension::SECURITY) &&
845 !scr.ns && !
bits(value, 63);
848 static_cast<Addr>(
bits(value, 35, 0)) << 12,
856 panic(
"Invalid TLBI\n");
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
uint8_t physAddrRange() const
Returns the supported physical address range in bits.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
Implementaton of AArch64 TLBI ALLE(1,2,3)(IS) instructions.
@ MISCREG_TLBI_VAAE1IS_Xt
TLB Invalidate by ASID match.
@ MISCREG_TLBI_IPAS2E1IS_Xt
uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg, RegIndex int_index) const
@ MISCREG_TLBI_ASIDE1OS_Xt
@ MISCREG_TLBI_IPAS2LE1IS_Xt
@ MISCREG_TLBI_VMALLS12E1IS
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
bool haveLargeAsid64() const
Returns true if ASID is 16 bits in AArch64 (ARMv8)
@ MISCREG_TLBI_VALE2IS_Xt
@ MISCREG_TLBI_VALE1IS_Xt
uint32_t iss() const override
@ MISCREG_TLBI_IPAS2E1OS_Xt
std::string csprintf(const char *format, const Args &...args)
Bitfield< 27, 25 > encoding
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
@ MISCREG_TLBI_VALE3IS_Xt
@ MISCREG_TLBI_VMALLS12E1
void ccprintf(cp::Print &print)
Fault generateTrap(ArmISA::ExceptionLevel el) const
uint32_t iss() const override
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 override
Internal function to generate disassembly string.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Fault checkFaultAccessAArch64SysReg(MiscRegIndex reg, CPSR cpsr, ThreadContext *tc, const MiscRegOp64 &inst)
void performTlbi(ExecContext *xc, ArmISA::MiscRegIndex idx, RegVal value) const
std::shared_ptr< FaultBase > Fault
@ MISCREG_TLBI_VMALLS12E1OS
TLB Invalidate by VA, All ASID.
virtual ThreadContext * tcBase() const =0
Returns a pointer to the ThreadContext.
bool EL2Enabled(ThreadContext *tc)
RegVal miscRegImm() const
Returns the "register view" of the immediate field.
@ MISCREG_TLBI_ASIDE1IS_Xt
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.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
Internal function to generate disassembly string.
@ MISCREG_TLBI_VAALE1OS_Xt
MiscRegNum64 encodeAArch64SysReg(MiscRegIndex misc_reg)
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
TLB Invalidate by Intermediate Physical Address.
@ MISCREG_TLBI_IPAS2LE1OS_Xt
@ MISCREG_TLBI_IPAS2LE1_Xt
@ MISCREG_TLBI_VAALE1IS_Xt
@ MISCREG_TLBI_VALE3OS_Xt
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
void broadcast(ThreadContext *tc)
Broadcast the TLB Invalidate operation to all TLBs in the Arm system.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Implementaton of AArch64 TLBI VMALLE1(IS)/VMALLS112E1(IS) instructions.
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
@ MISCREG_TLBI_VALE2OS_Xt
@ MISCREG_TLBI_VAAE1OS_Xt
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
virtual BaseISA * getIsaPtr() const =0
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const ArmRelease * getRelease() const
@ MISCREG_TLBI_IPAS2E1_Xt
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
#define panic(...)
This implements a cprintf based panic() function.
Generated on Sun Jul 30 2023 01:56:48 for gem5 by doxygen 1.8.17