Go to the documentation of this file.
47 using namespace ArmISA;
54 printIntReg(
ss, dest);
56 bool foundPsr =
false;
57 for (
unsigned i = 0;
i < numSrcRegs();
i++) {
84 bool foundPsr =
false;
85 for (
unsigned i = 0;
i < numDestRegs();
i++) {
96 if (
bits(byteMask, 1, 0)) {
110 if (
bits(byteMask, 3)) {
117 if (
bits(byteMask, 2)) {
124 if (
bits(byteMask, 1)) {
127 if (
bits(byteMask, 0)) {
135 std::stringstream
ss;
144 std::stringstream
ss;
147 printIntReg(
ss, op1);
154 std::stringstream
ss;
156 printIntReg(
ss, dest);
158 printIntReg(
ss, dest2);
160 printMiscReg(
ss, op1);
167 std::stringstream
ss;
169 printMiscReg(
ss, dest);
171 printIntReg(
ss, op1);
173 printIntReg(
ss, op2);
180 std::stringstream
ss;
189 std::stringstream
ss;
191 printIntReg(
ss, dest);
199 std::stringstream
ss;
201 printIntReg(
ss, dest);
203 printIntReg(
ss, op1);
210 std::stringstream
ss;
212 printIntReg(
ss, dest);
220 std::stringstream
ss;
222 printIntReg(
ss, dest);
224 printIntReg(
ss, op1);
226 printIntReg(
ss, op2);
235 std::stringstream
ss;
237 printIntReg(
ss, dest);
239 printIntReg(
ss, op1);
241 printIntReg(
ss, op2);
243 printIntReg(
ss, op3);
251 std::stringstream
ss;
253 printIntReg(
ss, dest);
255 printIntReg(
ss, op1);
257 printIntReg(
ss, op2);
265 std::stringstream
ss;
267 printIntReg(
ss, dest);
269 printIntReg(
ss, op1);
278 std::stringstream
ss;
280 printMiscReg(
ss, dest);
282 printIntReg(
ss, op1);
290 std::stringstream
ss;
292 printIntReg(
ss, dest);
294 printMiscReg(
ss, op1);
302 std::stringstream
ss;
304 printIntReg(
ss, dest);
313 std::stringstream
ss;
315 printIntReg(
ss, dest);
317 printIntReg(
ss, op1);
326 std::stringstream
ss;
328 printIntReg(
ss, dest);
330 printIntReg(
ss, op1);
338 std::stringstream
ss;
340 printIntReg(
ss, dest);
343 printIntReg(
ss, op1);
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");
Instruction TLB Invalidate All.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
constexpr decltype(nullptr) NoFault
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
TLB Invalidate by ASID match.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
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.
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.
std::string csprintf(const char *format, const Args &...args)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
constexpr T mbits(T val, unsigned first, unsigned last)
Mask off the given bits in place like bits() but without shifting.
Bitfield< 27, 25 > encoding
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.
Data TLB Invalidate by ASID match.
Instruction TLB Invalidate by ASID match.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Instruction TLB Invalidate by VA.
void ccprintf(cp::Print &print)
Fault mcrMrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst, ThreadContext *tc, uint32_t imm)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
TLB Invalidate All, Non-Secure.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
std::shared_ptr< FaultBase > Fault
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.
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.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
TLB Invalidate by VA, All ASID.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
virtual ThreadContext * tcBase() const =0
Returns a pointer to the ThreadContext.
std::bitset< Num_Flags > flags
Flag values for this instruction.
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
TLB Invalidate by Intermediate Physical Address.
Fault execute(ExecContext *xc, trace::InstRecord *traceData) 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
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
@ MiscRegClass
Control (misc) register.
void broadcast(ThreadContext *tc)
Broadcast the TLB Invalidate operation to all TLBs in the Arm system.
McrMrcImplDefined(const char *_mnemonic, ArmISA::ExtMachInst _machInst, uint64_t _iss, ArmISA::MiscRegIndex _miscReg)
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
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.
Data TLB Invalidate by VA.
virtual BaseISA * getIsaPtr() const =0
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
const char * mnemonic
Base mnemonic (e.g., "add").
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const ArmRelease * getRelease() const
ArmISA::MiscRegIndex miscReg
Register ID: describe an architectural register with its class and index.
#define panic(...)
This implements a cprintf based panic() function.
Certain mrc/mcr instructions act as nops or flush the pipe based on what register the instruction is ...
Generated on Sun Jul 30 2023 01:56:48 for gem5 by doxygen 1.8.17