47using namespace ArmISA;
56 bool foundPsr =
false;
84 bool foundPsr =
false;
135 std::stringstream
ss;
144 std::stringstream
ss;
154 std::stringstream
ss;
167 std::stringstream
ss;
180 std::stringstream
ss;
189 std::stringstream
ss;
199 std::stringstream
ss;
210 std::stringstream
ss;
220 std::stringstream
ss;
235 std::stringstream
ss;
251 std::stringstream
ss;
265 std::stringstream
ss;
278 std::stringstream
ss;
290 std::stringstream
ss;
302 std::stringstream
ss;
313 std::stringstream
ss;
326 std::stringstream
ss;
338 std::stringstream
ss;
358 flags[IsNonSpeculative] =
true;
389 return std::make_shared<UndefinedInstruction>(
machInst,
false,
413 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
423 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
433 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
443 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
453 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
456 mbits(value, 31, 12),
468 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
471 mbits(value, 31, 12),
483 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
486 mbits(value, 31, 12),
498 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
501 mbits(value, 31, 12),
513 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
526 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
539 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
541 mbits(value, 31, 12),
false);
551 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
553 mbits(value, 31, 12),
true);
563 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
565 mbits(value, 31, 12),
false);
575 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
577 mbits(value, 31, 12),
true);
587 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
589 mbits(value, 31, 12),
false);
599 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
601 mbits(value, 31, 12),
true);
611 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
613 mbits(value, 31, 12),
false);
623 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
625 mbits(value, 31, 12),
true);
635 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
638 static_cast<Addr>(
bits(value, 35, 0)) << 12,
650 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
653 static_cast<Addr>(
bits(value, 35, 0)) << 12,
665 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
668 static_cast<Addr>(
bits(value, 35, 0)) << 12,
680 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
683 static_cast<Addr>(
bits(value, 35, 0)) << 12,
694 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
697 mbits(value, 31, 12),
708 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
711 mbits(value, 31, 12),
722 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
735 bool secure = release->has(ArmExtension::SECURITY) && !scr.ns;
772 panic(
"Unrecognized TLBIOp\n");
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).
void printShiftOperand(std::ostream &os, RegIndex rm, bool immShift, uint32_t shiftAmt, RegIndex rs, ArmShiftType type) const
Data TLB Invalidate by ASID match.
Data TLB Invalidate by VA.
const ArmRelease * getRelease() const
Instruction TLB Invalidate All.
Instruction TLB Invalidate by ASID match.
Instruction TLB Invalidate by VA.
TLB Invalidate All, Non-Secure.
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.
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.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
McrMrcImplDefined(const char *_mnemonic, ArmISA::ExtMachInst _machInst, uint64_t _iss, ArmISA::MiscRegIndex _miscReg)
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
Certain mrc/mcr instructions act as nops or flush the pipe based on what register the instruction is ...
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
McrMrcMiscInst(const char *_mnemonic, ArmISA::ExtMachInst _machInst, uint64_t _iss, ArmISA::MiscRegIndex _miscReg)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
ArmISA::MiscRegIndex miscReg
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
ArmISA::MiscRegIndex dest
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
ArmISA::MiscRegIndex dest
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.
void printMsrBase(std::ostream &os) const
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.
Register ID: describe an architectural register with its class and index.
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.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
ArmISA::ArmShiftType shiftType
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.
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.
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.
uint8_t numSrcRegs() const
Number of source registers.
uint8_t numDestRegs() const
Number of destination registers.
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
const char * mnemonic
Base mnemonic (e.g., "add").
std::bitset< Num_Flags > flags
Flag values for this instruction.
const RegId & srcRegIdx(int i) const
Return logical index (architectural reg num) of i'th source reg.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual BaseISA * getIsaPtr() const =0
void performTlbi(ExecContext *xc, ArmISA::MiscRegIndex dest_idx, RegVal value) const
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.
constexpr T mbits(T val, unsigned first, unsigned last)
Mask off the given bits in place like bits() but without shifting.
#define panic(...)
This implements a cprintf based panic() function.
Fault mcrMrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst, ThreadContext *tc, uint32_t imm)
Bitfield< 27, 25 > encoding
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
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
@ MiscRegClass
Control (misc) register.
void ccprintf(cp::Print &print)
The file contains the definition of a set of TLB Invalidate Instructions.