38#ifndef __ARCH_ARM_INSTS_MISC_HH__
39#define __ARCH_ARM_INSTS_MISC_HH__
51 MrsOp(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
53 ArmISA::
PredOp(mnem, _machInst, __opClass),
dest(_dest)
65 MsrBase(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
78 MsrImmOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
79 OpClass __opClass, uint32_t _imm, uint8_t _byteMask) :
80 MsrBase(mnem, _machInst, __opClass, _byteMask),
imm(_imm)
92 MsrRegOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
93 OpClass __opClass,
RegIndex _op1, uint8_t _byteMask) :
94 MsrBase(mnem, _machInst, __opClass, _byteMask),
op1(_op1)
109 MrrcOp(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
112 ArmISA::
PredOp(mnem, _machInst, __opClass),
op1(_op1),
dest(_dest),
128 McrrOp(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
131 ArmISA::
PredOp(mnem, _machInst, __opClass),
op1(_op1),
op2(_op2),
144 ImmOp(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
146 ArmISA::
PredOp(mnem, _machInst, __opClass),
imm(_imm)
159 RegImmOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
160 OpClass __opClass,
RegIndex _dest, uint64_t _imm) :
161 ArmISA::
PredOp(mnem, _machInst, __opClass),
dest(_dest),
imm(_imm)
174 RegRegOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
177 ArmISA::
PredOp(mnem, _machInst, __opClass),
dest(_dest),
op1(_op1)
189 RegOp(
const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass,
191 ArmISA::
PredOp(mnem, _machInst, __opClass),
dest(_dest)
206 OpClass __opClass,
RegIndex _dest, uint64_t _imm,
208 ArmISA::
PredOp(mnem, _machInst, __opClass),
228 ArmISA::
PredOp(mnem, _machInst, __opClass),
248 ArmISA::
PredOp(mnem, _machInst, __opClass),
266 ArmISA::
PredOp(mnem, _machInst, __opClass),
284 ArmISA::
PredOp(mnem, _machInst, __opClass),
302 ArmISA::
PredOp(mnem, _machInst, __opClass),
320 ArmISA::
PredOp(mnem, _machInst, __opClass),
337 uint64_t _imm1, uint64_t _imm2) :
338 ArmISA::
PredOp(mnem, _machInst, __opClass),
356 RegIndex _op1, uint64_t _imm1, uint64_t _imm2) :
357 ArmISA::
PredOp(mnem, _machInst, __opClass),
377 int32_t _shiftAmt, ArmISA::ArmShiftType _shiftType) :
378 ArmISA::
PredOp(mnem, _machInst, __opClass),
391 UnknownOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
393 ArmISA::
PredOp(mnem, _machInst, __opClass)
413 McrMrcMiscInst(
const char *_mnemonic, ArmISA::ExtMachInst _machInst,
445 TlbiOp(
const char *mnem, ArmISA::ExtMachInst _machInst,
Base class for predicated integer operations.
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
ImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, uint64_t _imm)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
This class is also used for IMPLEMENTATION DEFINED registers, whose mcr/mrc behaviour is trappable ev...
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
McrrOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _op1, RegIndex _op2, ArmISA::MiscRegIndex _dest, uint32_t _imm)
MiscRegRegImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1, uint64_t _imm)
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.
MrrcOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _op1, RegIndex _dest, RegIndex _dest2, uint32_t _imm)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
MrsOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest)
MsrBase(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, uint8_t _byteMask)
void printMsrBase(std::ostream &os) const
MsrImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, uint32_t _imm, uint8_t _byteMask)
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.
MsrRegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _op1, uint8_t _byteMask)
RegImmImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm1, uint64_t _imm2)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
RegImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm)
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.
RegImmRegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm, RegIndex _op1)
RegImmRegShiftOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm, RegIndex _op1, int32_t _shiftAmt, ArmISA::ArmShiftType _shiftType)
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.
RegMiscRegImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, ArmISA::MiscRegIndex _op1, uint64_t _imm)
RegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
RegRegImmImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm1, uint64_t _imm2)
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.
RegRegImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
RegRegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1)
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.
RegRegRegImmOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
RegRegRegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
RegRegRegRegOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _op3)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
TlbiOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1, uint64_t _imm)
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.
UnknownOp(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass)
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
std::shared_ptr< FaultBase > Fault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.