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 |
![]() | |
VEGAGPUStaticInst (const std::string &opcode) | |
~VEGAGPUStaticInst () | |
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 639 of file op_encodings.hh.
gem5::VegaISA::Inst_MUBUF::Inst_MUBUF | ( | InFmt_MUBUF * | iFmt, |
const std::string & | opcode | ||
) |
Definition at line 1263 of file op_encodings.cc.
References gem5::VegaISA::VEGAGPUStaticInst::_srcLiteral, extData, gem5::VegaISA::InFmt_MUBUF::GLC, instData, gem5::GPUStaticInst::setFlag(), and gem5::VegaISA::InFmt_MUBUF::SLC.
gem5::VegaISA::Inst_MUBUF::~Inst_MUBUF | ( | ) |
Definition at line 1279 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 741 of file op_encodings.hh.
References DPRINTF, gem5::VegaISA::NumVecElemPerVecReg(), oobMask, gem5::ArmISA::stride, and gem5::MipsISA::vaddr.
Referenced by gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), and gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute().
|
overridevirtual |
Reimplemented from gem5::VegaISA::VEGAGPUStaticInst.
Definition at line 1337 of file op_encodings.cc.
References gem5::GPUStaticInst::_opcode, gem5::GPUStaticInst::disassembly, extData, instData, gem5::VegaISA::InFmt_MUBUF::OFFSET, gem5::VegaISA::InFmt_MUBUF_1::SOFFSET, gem5::VegaISA::InFmt_MUBUF_1::SRSRC, gem5::VegaISA::InFmt_MUBUF_1::VADDR, and gem5::VegaISA::InFmt_MUBUF_1::VDATA.
|
inlineprotected |
Definition at line 653 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::ReadReq.
|
inlineprotected |
Definition at line 667 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::ReadReq.
|
inlineprotected |
Definition at line 680 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::WriteReq.
|
inlineprotected |
Definition at line 693 of file op_encodings.hh.
References oobMask, and gem5::MemCmd::WriteReq.
|
overridevirtual |
Reimplemented from gem5::VegaISA::VEGAGPUStaticInst.
Definition at line 1284 of file op_encodings.cc.
References gem5::GPUStaticInst::dstOps, extData, gem5::GPUStaticInst::getNumOperands(), gem5::VegaISA::VEGAGPUStaticInst::getOperandSize(), gem5::VegaISA::isScalarReg(), gem5::GPUStaticInst::numDstRegOperands(), gem5::GPUStaticInst::numSrcRegOperands(), gem5::X86ISA::reg, gem5::VegaISA::InFmt_MUBUF_1::SOFFSET, gem5::GPUStaticInst::srcOps, gem5::VegaISA::InFmt_MUBUF_1::SRSRC, gem5::VegaISA::InFmt_MUBUF_1::VADDR, and gem5::VegaISA::InFmt_MUBUF_1::VDATA.
|
inlineprotected |
Definition at line 705 of file op_encodings.hh.
Referenced by gem5::VegaISA::Inst_MUBUF__BUFFER_WBINVL1::initiateAcc(), and gem5::VegaISA::Inst_MUBUF__BUFFER_WBINVL1_VOL::initiateAcc().
|
overridevirtual |
Implements gem5::GPUStaticInst.
Definition at line 1331 of file op_encodings.cc.
|
protected |
Definition at line 843 of file op_encodings.hh.
Referenced by gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_USHORT::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORD::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute(), generateDisassembly(), initOperandInfo(), and Inst_MUBUF().
|
protected |
Definition at line 841 of file op_encodings.hh.
Referenced by gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_USHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_BYTE::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_SHORT::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORD::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX2::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX3::execute(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORDX4::execute(), generateDisassembly(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::getOperandSize(), gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_BYTE::getOperandSize(), Inst_MUBUF(), and gem5::VegaISA::Inst_MUBUF__BUFFER_STORE_DWORD::Inst_MUBUF__BUFFER_STORE_DWORD().
|
protected |
Definition at line 847 of file op_encodings.hh.
Referenced by calcAddr(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_UBYTE::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_USHORT::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORD::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX2::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX3::completeAcc(), gem5::VegaISA::Inst_MUBUF__BUFFER_LOAD_DWORDX4::completeAcc(), initMemRead(), and initMemWrite().