42 #ifndef __ARCH_ARM_MACROMEM_HH__ 43 #define __ARCH_ARM_MACROMEM_HH__ 51 static inline unsigned int 55 for (
int i = 0;
i < 32;
i++ )
70 :
PredOp(mnem, machInst, __opClass)
78 if (
flags[IsLastMicroop]) {
80 }
else if (
flags[IsMicroop]) {
99 if (
flags[IsLastMicroop]) {
101 }
else if (
flags[IsMicroop]) {
121 :
MicroOp(mnem, machInst, __opClass),
122 dest(_dest), ura(_ura), imm(_imm),
123 memAccessFlags(
TLB::MustBeOne)
139 :
MicroOp(mnem, machInst, __opClass),
140 dest(_dest), op1(_op1), step(_step)
152 uint32_t _step,
unsigned _lane)
166 uint8_t eSize, dataSize, numStructElems, numRegs,
step;
170 uint8_t _dataSize, uint8_t _numStructElems,
171 uint8_t _numRegs, uint8_t _step)
172 :
MicroOp(mnem, machInst, __opClass), dest(_dest), op1(_op1),
173 eSize(_eSize), dataSize(_dataSize), numStructElems(_numStructElems),
174 numRegs(_numRegs), step(_step)
183 uint8_t eSize, dataSize, numStructElems, lane,
step;
188 uint8_t _eSize, uint8_t _dataSize,
189 uint8_t _numStructElems, uint8_t _lane, uint8_t _step,
190 bool _replicate =
false)
191 :
MicroOp(mnem, machInst, __opClass), dest(_dest), op1(_op1),
192 eSize(_eSize), dataSize(_dataSize), numStructElems(_numStructElems),
193 lane(_lane), step(_step), replicate(_replicate)
209 uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs,
221 uint8_t dataSize, uint8_t numStructElems, uint8_t numRegs,
233 uint8_t dataSize, uint8_t numStructElems, uint8_t index,
234 bool wb,
bool replicate =
false);
245 uint8_t dataSize, uint8_t numStructElems, uint8_t index,
246 bool wb,
bool replicate =
false);
261 :
MicroOp(mnem, machInst, __opClass),
262 ura(_ura), urb(_urb), urc(_urc)
280 :
MicroOp(mnem, machInst, __opClass),
300 :
MicroOp(mnem, machInst, __opClass),
301 ura(_ura), urb(_urb), imm(_imm)
317 :
MicroOpX(mnem, machInst, __opClass),
318 ura(_ura), urb(_urb), imm(_imm)
336 :
MicroOp(mnem, machInst, __opClass),
337 ura(_ura), urb(_urb), urc(_urc)
355 :
MicroOp(mnem, machInst, __opClass),
356 ura(_ura), urb(_urb), urc(_urc),
357 type(_type), shiftAmt(_shiftAmt)
378 :
MicroOp(mnem, machInst, __opClass),
379 ura(_ura), urb(_urb), urc(_urc),
380 shiftAmt(_shiftAmt), shiftType(_shiftType)
396 :
MicroIntImmOp(mnem, machInst, __opClass, _ura, _urb, _imm),
397 up(_up), memAccessFlags(
TLB::MustBeOne |
TLB::AlignWord)
415 bool _up, uint8_t _imm)
416 :
MicroOp(mnem, machInst, __opClass),
417 dest(_dreg1), dest2(_dreg2), urb(_base), up(_up), imm(_imm),
418 memAccessFlags(
TLB::MustBeOne |
TLB::AlignWord)
434 bool writeback,
bool load, uint32_t reglist);
451 uint32_t size,
bool fp,
bool load,
bool noAlloc,
bool signExt,
508 unsigned regs,
unsigned inc, uint32_t size,
528 unsigned regs,
unsigned inc, uint32_t size,
545 #endif //__ARCH_ARM_INSTS_MACROMEM_HH__ MicroOpX(const char *mnem, ExtMachInst machInst, OpClass __opClass)
MicroNeonMixLaneOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint8_t _eSize, uint8_t _dataSize, uint8_t _numStructElems, uint8_t _lane, uint8_t _step, bool _replicate=false)
MicroIntRegOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc, int32_t _shiftAmt, ArmShiftType _shiftType)
Base class for predicated integer operations.
Base class for microcoded integer memory instructions.
MicroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, bool _up, uint8_t _imm)
Microops for Neon load/store (de)interleaving.
static unsigned int number_of_ones(int32_t val)
MicroNeonMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _ura, uint32_t _imm)
void advancePC(PCState &pcState) const override
MicroIntImmXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, int64_t _imm)
const ExtMachInst machInst
The binary machine instruction.
std::bitset< Num_Flags > flags
Flag values for this instruction.
void inc(scfx_mant &mant)
void align(const scfx_rep &lhs, const scfx_rep &rhs, int &new_wp, int &len_mant, scfx_mant_ref &lhs_mant, scfx_mant_ref &rhs_mant)
MicroSetPCCPSR(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _ura, IntRegIndex _urb, IntRegIndex _urc)
Microops of the form IntRegA = IntRegB op Imm.
MicroIntMov(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb)
void advancePC(PCState &pcState) const override
Base class for microcoded floating point memory instructions.
Microops for Neon loads/stores.
Base class for microcoded integer memory instructions.
Microops of the form PC = IntRegA CPSR = IntRegB.
MicroOp(const char *mnem, ExtMachInst machInst, OpClass __opClass)
Memory microops which use IntReg + Imm addressing.
Base class for pair load/store instructions.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Microops of the form IntRegA = IntRegB op shifted IntRegC.
MicroNeonMixOp64(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint8_t _eSize, uint8_t _dataSize, uint8_t _numStructElems, uint8_t _numRegs, uint8_t _step)
Base classes for microcoded AArch64 NEON memory instructions.
Microops of the form IntRegA = IntRegB.
MicroMemPairOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dreg1, RegIndex _dreg2, RegIndex _base, bool _up, uint8_t _imm)
Base class for predicated macro-operations.
Base class for Memory microops.
GenericISA::SimplePCState< MachInst > PCState
Microops of the form IntRegA = IntRegB op IntRegC.
MicroNeonMixOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint32_t _step)
MicroIntOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc)
MicroNeonMixLaneOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint32_t _step, unsigned _lane)
Base classes for microcoded integer memory instructions.
std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const override
Internal function to generate disassembly string.
TheISA::ExtMachInst ExtMachInst
Binary extended machine instruction type.
MicroIntImmOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, int32_t _imm)
Microops for AArch64 NEON load/store (de)interleaving.
MicroIntRegXOp(const char *mnem, ExtMachInst machInst, OpClass __opClass, RegIndex _ura, RegIndex _urb, RegIndex _urc, ArmExtendType _type, uint32_t _shiftAmt)