gem5
[DEVELOP-FOR-23.0]
|
#include <op_encodings.hh>
Public Member Functions | |
Inst_MUBUF (InFmt_MUBUF *, const std::string &opcode) | |
~Inst_MUBUF () | |
int | instSize () const override |
void | generateDisassembly () override |
void | initOperandInfo () override |
![]() | |
GCN3GPUStaticInst (const std::string &opcode) | |
~GCN3GPUStaticInst () | |
bool | isFlatScratchRegister (int opIdx) override |
bool | isExecMaskRegister (int opIdx) override |
int | getOperandSize (int opIdx) override |
int | coalescerTokenCount () const override |
Return the number of tokens needed by the coalescer. More... | |
ScalarRegU32 | srcLiteral () const override |
![]() | |
GPUStaticInst (const std::string &opcode) | |
virtual | ~GPUStaticInst () |
void | instAddr (int inst_addr) |
int | instAddr () const |
int | nextInstAddr () const |
void | instNum (int num) |
int | instNum () |
void | ipdInstNum (int num) |
int | ipdInstNum () const |
void | initDynOperandInfo (Wavefront *wf, ComputeUnit *cu) |
virtual void | execute (GPUDynInstPtr gpuDynInst)=0 |
const std::string & | disassemble () |
virtual int | getNumOperands ()=0 |
virtual int | numDstRegOperands ()=0 |
virtual int | numSrcRegOperands ()=0 |
int | numSrcVecOperands () |
int | numDstVecOperands () |
int | numSrcVecDWords () |
int | numDstVecDWords () |
int | numSrcScalarOperands () |
int | numDstScalarOperands () |
int | numSrcScalarDWords () |
int | numDstScalarDWords () |
int | maxOperandSize () |
bool | isALU () const |
bool | isBranch () const |
bool | isCondBranch () const |
bool | isNop () const |
bool | isReturn () const |
bool | isEndOfKernel () const |
bool | isKernelLaunch () const |
bool | isSDWAInst () const |
bool | isDPPInst () const |
bool | isUnconditionalJump () const |
bool | isSpecialOp () const |
bool | isWaitcnt () const |
bool | isSleep () const |
bool | isBarrier () const |
bool | isMemSync () const |
bool | isMemRef () const |
bool | isFlat () const |
bool | isFlatGlobal () const |
bool | isLoad () const |
bool | isStore () const |
bool | isAtomic () const |
bool | isAtomicNoRet () const |
bool | isAtomicRet () const |
bool | isScalar () const |
bool | readsSCC () const |
bool | writesSCC () const |
bool | readsVCC () const |
bool | writesVCC () const |
bool | readsEXEC () const |
bool | writesEXEC () const |
bool | readsMode () const |
bool | writesMode () const |
bool | ignoreExec () const |
bool | isAtomicAnd () const |
bool | isAtomicOr () const |
bool | isAtomicXor () const |
bool | isAtomicCAS () const |
bool | isAtomicExch () const |
bool | isAtomicAdd () const |
bool | isAtomicSub () const |
bool | isAtomicInc () const |
bool | isAtomicDec () const |
bool | isAtomicMax () const |
bool | isAtomicMin () const |
bool | isArgLoad () const |
bool | isGlobalMem () const |
bool | isLocalMem () const |
bool | isArgSeg () const |
bool | isGlobalSeg () const |
bool | isGroupSeg () const |
bool | isKernArgSeg () const |
bool | isPrivateSeg () const |
bool | isReadOnlySeg () const |
bool | isSpillSeg () const |
bool | isGloballyCoherent () const |
Coherence domain of a memory instruction. More... | |
bool | isSystemCoherent () const |
bool | isF16 () const |
bool | isF32 () const |
bool | isF64 () const |
bool | isFMA () const |
bool | isMAC () const |
bool | isMAD () const |
virtual void | initiateAcc (GPUDynInstPtr gpuDynInst) |
virtual void | completeAcc (GPUDynInstPtr gpuDynInst) |
virtual uint32_t | getTargetPc () |
void | setFlag (Flags flag) |
const std::string & | opcode () const |
const std::vector< OperandInfo > & | srcOperands () const |
const std::vector< OperandInfo > & | dstOperands () const |
const std::vector< OperandInfo > & | srcVecRegOperands () const |
const std::vector< OperandInfo > & | dstVecRegOperands () const |
const std::vector< OperandInfo > & | srcScalarRegOperands () const |
const std::vector< OperandInfo > & | dstScalarRegOperands () const |
Protected Member Functions | |
template<typename T > | |
void | initMemRead (GPUDynInstPtr gpuDynInst) |
template<int N> | |
void | initMemRead (GPUDynInstPtr gpuDynInst) |
template<typename T > | |
void | initMemWrite (GPUDynInstPtr gpuDynInst) |
template<int N> | |
void | initMemWrite (GPUDynInstPtr gpuDynInst) |
void | injectGlobalMemFence (GPUDynInstPtr gpuDynInst) |
template<typename VOFF , typename VIDX , typename SRSRC , typename SOFF > | |
void | calcAddr (GPUDynInstPtr gpuDynInst, VOFF v_off, VIDX v_idx, SRSRC s_rsrc_desc, SOFF s_offset, int inst_offset) |
MUBUF insructions calculate their addresses as follows: More... | |
![]() | |
void | panicUnimplemented () const |
Protected Attributes | |
InFmt_MUBUF | instData |
InFmt_MUBUF_1 | extData |
VectorMask | oobMask |
![]() | |
ScalarRegU32 | _srcLiteral |
if the instruction has a src literal - an immediate value that is part of the instruction stream - we store that here More... | |
![]() | |
const std::string | _opcode |
std::string | disassembly |
int | _instNum |
int | _instAddr |
std::vector< OperandInfo > | srcOps |
std::vector< OperandInfo > | dstOps |
Additional Inherited Members | |
![]() | |
enum | OpType { SRC_VEC, SRC_SCALAR, DST_VEC, DST_SCALAR } |
typedef int(RegisterManager::* | MapRegFn) (Wavefront *, int) |
![]() | |
enums::StorageClassType | executed_as |
![]() | |
static uint64_t | dynamic_id_count |
Definition at line 525 of file op_encodings.hh.
gem5::Gcn3ISA::Inst_MUBUF::Inst_MUBUF | ( | InFmt_MUBUF * | iFmt, |
const std::string & | opcode | ||
) |
Definition at line 1231 of file op_encodings.cc.
References gem5::Gcn3ISA::GCN3GPUStaticInst::_srcLiteral, extData, gem5::Gcn3ISA::InFmt_MUBUF::GLC, instData, gem5::GPUStaticInst::setFlag(), and gem5::Gcn3ISA::InFmt_MUBUF::SLC.
gem5::Gcn3ISA::Inst_MUBUF::~Inst_MUBUF | ( | ) |
Definition at line 1247 of file op_encodings.cc.
|
inlineprotected |
MUBUF insructions calculate their addresses as follows:
index = (IDXEN ? vgpr_idx : 0) + (const_add_tid_en ? TID : 0) offset = (OFFEN ? vgpr_off : 0) + inst_off
/ ====================== LINEAR ADDRESSING ====================== / VADDR = base + sgpr_off + offset + stride * index
/ ===================== SWIZZLED ADDRESSING ===================== / index_msb = index / const_index_stride index_lsb = index % const_index_stride offset_msb = offset / const_element_size offset_lsb = offset % const_element_size buffer_offset = ((index_msb * stride + offset_msb * const_element_size) * const_index_stride + index_lsb * const_element_size + offset_lsb)
VADDR = base + sgpr_off + buffer_offset
first we calculate the buffer's index and offset. these will be used for either linear or swizzled buffers.
Range check behavior causes out of range accesses to to be treated differently. Out of range accesses return 0 for loads and are ignored for stores. For non-formatted accesses, this is done on a per-lane basis.
Definition at line 627 of file op_encodings.hh.
References DPRINTF, gem5::Gcn3ISA::NumVecElemPerVecReg(), oobMask, gem5::ArmISA::stride, and gem5::MipsISA::vaddr.
Referenced by gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), and gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute().
|
overridevirtual |
Reimplemented from gem5::Gcn3ISA::GCN3GPUStaticInst.
Definition at line 1305 of file op_encodings.cc.
References gem5::GPUStaticInst::_opcode, gem5::GPUStaticInst::disassembly, extData, instData, gem5::Gcn3ISA::InFmt_MUBUF::OFFSET, gem5::Gcn3ISA::InFmt_MUBUF_1::SOFFSET, gem5::Gcn3ISA::InFmt_MUBUF_1::SRSRC, gem5::Gcn3ISA::InFmt_MUBUF_1::VADDR, and gem5::Gcn3ISA::InFmt_MUBUF_1::VDATA.
|
inlineprotected |
Definition at line 539 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::ReadReq.
|
inlineprotected |
Definition at line 553 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::ReadReq.
|
inlineprotected |
Definition at line 566 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::WriteReq.
|
inlineprotected |
Definition at line 579 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::WriteReq.
|
overridevirtual |
Reimplemented from gem5::Gcn3ISA::GCN3GPUStaticInst.
Definition at line 1252 of file op_encodings.cc.
References gem5::GPUStaticInst::dstOps, extData, gem5::GPUStaticInst::getNumOperands(), gem5::Gcn3ISA::GCN3GPUStaticInst::getOperandSize(), gem5::Gcn3ISA::isScalarReg(), gem5::GPUStaticInst::numDstRegOperands(), gem5::GPUStaticInst::numSrcRegOperands(), gem5::X86ISA::reg, gem5::Gcn3ISA::InFmt_MUBUF_1::SOFFSET, gem5::GPUStaticInst::srcOps, gem5::Gcn3ISA::InFmt_MUBUF_1::SRSRC, gem5::Gcn3ISA::InFmt_MUBUF_1::VADDR, and gem5::Gcn3ISA::InFmt_MUBUF_1::VDATA.
|
inlineprotected |
Definition at line 591 of file op_encodings.hh.
Referenced by gem5::Gcn3ISA::Inst_MUBUF__BUFFER_WBINVL1::initiateAcc(), and gem5::Gcn3ISA::Inst_MUBUF__BUFFER_WBINVL1_VOL::initiateAcc().
|
overridevirtual |
Implements gem5::GPUStaticInst.
Definition at line 1299 of file op_encodings.cc.
|
protected |
Definition at line 729 of file op_encodings.hh.
Referenced by gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_USHORT::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORD::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute(), generateDisassembly(), initOperandInfo(), and Inst_MUBUF().
|
protected |
Definition at line 727 of file op_encodings.hh.
Referenced by gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute(), generateDisassembly(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::getOperandSize(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_BYTE::getOperandSize(), Inst_MUBUF(), and gem5::Gcn3ISA::Inst_MUBUF__BUFFER_STORE_DWORD::Inst_MUBUF__BUFFER_STORE_DWORD().
|
protected |
Definition at line 733 of file op_encodings.hh.
Referenced by calcAddr(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_USHORT::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORD::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::completeAcc(), gem5::Gcn3ISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::completeAcc(), initMemRead(), and initMemWrite().