41#ifndef __ARCH_ARM_MEM_HH__
42#define __ARCH_ARM_MEM_HH__
58 :
PredOp(mnem, _machInst, __opClass)
65 if (
flags[IsLastMicroop]) {
67 }
else if (
flags[IsMicroop]) {
78 if (
flags[IsLastMicroop]) {
80 }
else if (
flags[IsMicroop]) {
113 ura(int_reg::Ureg0),
urb(int_reg::Ureg1),
128 return uops[microPC];
155 uint32_t _regMode,
AddrMode _mode,
bool _wb)
170 return uops[microPC];
212 return uops[microPC];
236 :
Memory(mnem, _machInst, __opClass, _dest, _base, _add),
imm(_imm)
256 bool _add, int32_t _imm)
257 :
MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
278 RegIndex _base,
bool _add, int32_t _imm)
279 :
MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm),
299 RegIndex _base,
bool _add, int32_t _imm)
300 :
MemoryDImm(mnem, _machInst, __opClass, _dest, _dest2,
301 _base, _add, _imm),
result(_result)
323 int32_t _shiftAmt, ArmShiftType _shiftType,
325 :
Memory(mnem, _machInst, __opClass, _dest, _base, _add),
340 int32_t _shiftAmt, ArmShiftType _shiftType,
342 :
MemoryReg(mnem, _machInst, __opClass, _dest, _base, _add,
343 _shiftAmt, _shiftType, _index),
362 bool _add, int32_t _imm)
363 : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
368 bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
370 : Base(mnem, _machInst, __opClass, _dest, _base, _add,
371 _shiftAmt, _shiftType, _index)
376 RegIndex _base,
bool _add, int32_t _imm)
377 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
381 OpClass __opClass,
RegIndex _result,
383 RegIndex _base,
bool _add, int32_t _imm)
384 : Base(mnem, _machInst, __opClass, _result,
385 _dest, _dest2, _base, _add, _imm)
391 int32_t _shiftAmt, ArmShiftType _shiftType,
393 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
394 _shiftAmt, _shiftType, _index)
401 std::stringstream
ss;
413 bool _add, int32_t _imm)
414 : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
419 bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
421 : Base(mnem, _machInst, __opClass, _dest, _base, _add,
422 _shiftAmt, _shiftType, _index)
427 RegIndex _base,
bool _add, int32_t _imm)
428 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
432 OpClass __opClass,
RegIndex _result,
434 RegIndex _base,
bool _add, int32_t _imm)
435 : Base(mnem, _machInst, __opClass, _result,
436 _dest, _dest2, _base, _add, _imm)
442 int32_t _shiftAmt, ArmShiftType _shiftType,
444 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
445 _shiftAmt, _shiftType, _index)
452 std::stringstream
ss;
464 bool _add, int32_t _imm)
465 : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm)
470 bool _add, int32_t _shiftAmt, ArmShiftType _shiftType,
472 : Base(mnem, _machInst, __opClass, _dest, _base, _add,
473 _shiftAmt, _shiftType, _index)
478 RegIndex _base,
bool _add, int32_t _imm)
479 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm)
483 OpClass __opClass,
RegIndex _result,
485 RegIndex _base,
bool _add, int32_t _imm)
486 : Base(mnem, _machInst, __opClass, _result,
487 _dest, _dest2, _base, _add, _imm)
493 int32_t _shiftAmt, ArmShiftType _shiftType,
495 : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add,
496 _shiftAmt, _shiftType, _index)
503 std::stringstream
ss;
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).
MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
void printDest(std::ostream &os) const
void printDest(std::ostream &os) const
MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
void printDest(std::ostream &os) const
MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
void printDest(std::ostream &os) const
MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
void printOffset(std::ostream &os) const
MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
MemoryOffset(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
MemoryPostIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _imm)
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _result, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _imm)
MemoryPreIndex(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
void printOffset(std::ostream &os) const
MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, RegIndex _index)
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
void printInst(std::ostream &os, AddrMode addrMode) const
static const unsigned numMicroops
virtual void printDest(std::ostream &os) const
Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _base, bool _add)
virtual void printOffset(std::ostream &os) const
MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
void advancePC(ThreadContext *tc) const override
void advancePC(PCStateBase &pcState) const override
Base class for predicated integer operations.
RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _base, AddrMode _mode, bool _wb)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
static const unsigned numMicroops
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
StaticInstPtr fetchMicroop(MicroPC microPC) const override
Return the microop that goes with a particular micropc.
SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regMode, AddrMode _mode, bool _wb)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
static const unsigned numMicroops
std::bitset< Num_Flags > flags
Flag values for this instruction.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual const PCStateBase & pcState() const =0
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void ccprintf(cp::Print &print)