29#ifndef __ARCH_RISCV_INSTS_VECTOR_HH__
30#define __ARCH_RISCV_INSTS_VECTOR_HH__
62get_emul(uint32_t eew, uint32_t sew,
float vflmul,
bool is_mask_ldst)
64 eew = is_mask_ldst ? 1 : eew;
65 float vemul = is_mask_ldst ? 1 : (float)eew / sew * vflmul;
66 uint32_t emul = vemul < 1 ? 1 : vemul;
84 uint32_t _elen, uint32_t _vlen, OpClass __opClass)
93 this->
flags[IsVector] =
true;
104 const uint8_t
vsew =
bits(vtype, 5, 3);
119 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
126 this->
flags[IsVector] =
true;
148 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
159 this->
flags[IsVector] =
true;
179 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
191 this->
flags[IsVector] =
true;
214 std::stringstream
ss;
224 OpClass __opClass, uint32_t _microVl,
225 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
238 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
241 this->
flags[IsVector] =
true;
251 OpClass __opClass, uint32_t _microVl,
252 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
265 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
268 this->
flags[IsVector] =
true;
279 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
282 this->
flags[IsVector] =
true;
296 OpClass __opClass, uint32_t _microVl,
297 uint32_t _microIdx, uint32_t _vdIdx, uint32_t _vs2Idx,
298 uint32_t _vs3Idx, uint32_t _elen, uint32_t _vlen)
317 OpClass __opClass, uint32_t _microVl,
318 uint32_t _microIdx, uint32_t _offset, uint32_t _elen,
335 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
346 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
358 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
376 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
382 this->
flags[IsLoad] =
true;
395 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
400 this->
flags[IsStore] =
true;
411 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
425 OpClass __opClass, uint32_t _microVl, uint32_t _microIdx,
426 uint32_t _elen, uint32_t _vlen)
439 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
453 OpClass __opClass, uint32_t _microVl,
454 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
456 _microIdx, _elen, _vlen)
468 OpClass __opClass,
bool _has_rs2, uint32_t _elen,
484 OpClass __opClass, uint32_t _regIdx,
485 uint32_t _microIdx, uint32_t _microVl,
486 uint32_t _offset,
bool _has_rs2, uint32_t _elen,
489 _microIdx, _offset, _elen, _vlen)
503 OpClass __opClass,
bool _has_rs2, uint32_t _elen,
519 OpClass __opClass, uint32_t _regIdx,
520 uint32_t _microIdx, uint32_t _microVl,
521 uint32_t _offset,
bool _has_rs2, uint32_t _elen,
524 _microIdx, _offset, _elen, _vlen)
537 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
553 OpClass __opClass, uint32_t _vdRegIdx, uint32_t _vdElemIdx,
554 uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen,
570 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
586 OpClass __opClass, uint32_t _vs3RegIdx,
587 uint32_t _vs3ElemIdx, uint32_t _vs2RegIdx,
588 uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
603 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
615 OpClass __opClass, uint32_t _microVl,
616 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
635 uint8_t _numSrcs, uint32_t _elen, uint32_t _vlen,
668 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen,
681 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
698 OpClass __opClass, uint32_t _microVl,
699 uint32_t _microIdx, uint32_t _numMicroops,
700 uint32_t _field, uint32_t _numFields,
701 uint32_t _elen, uint32_t _vlen)
703 _microIdx, _elen, _vlen)
706 this->
flags[IsLoad] =
true;
726 uint32_t _dstReg, uint32_t _numSrcs,
727 uint32_t _microIdx, uint32_t _numMicroops,
728 uint32_t _field, uint32_t _elen, uint32_t _vlen,
729 uint32_t _sizeOfElement);
741 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
756 OpClass __opClass, uint32_t _microVl,
757 uint32_t _microIdx, uint32_t _numMicroops,
758 uint32_t _field, uint32_t _numFields,
759 uint32_t _elen, uint32_t _vlen)
761 _microIdx, _elen, _vlen)
763 this->
flags[IsStore] =
true;
783 uint32_t _dstReg, uint32_t _numSrcs,
784 uint32_t _microIdx, uint32_t _numMicroops,
785 uint32_t _field, uint32_t _elen, uint32_t _vlen,
786 uint32_t _sizeOfElement);
802 uint8_t _vsRegIdx, uint32_t _elen, uint32_t _vlen);
818 uint32_t _numVdPins, uint32_t _elen, uint32_t _vlen,
819 bool _hasVdOffset=
false,
bool _copyVs =
false,
820 uint32_t _vsIdx = 0);
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Register ID: describe an architectural register with its class and index.
gem5::Flags< FlagsType > Flags
RiscvMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
RiscvMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
RiscvStaticInst(const char *_mnemonic, ExtMachInst _machInst, OpClass __opClass)
VConfOp(const char *mnem, ExtMachInst _extMachInst, uint32_t _elen, uint32_t _vlen, OpClass __opClass)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
std::string generateZimmDisassembly() const
VCpyVsMicroInst(ExtMachInst _machInst, uint32_t _microIdx, uint8_t _vsRegIdx, uint32_t _elen, uint32_t _vlen)
Fault execute(ExecContext *, trace::InstRecord *) const override
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
VMaskMergeMicroInst(ExtMachInst extMachInst, uint8_t _dstReg, uint8_t _numSrcs, uint32_t _elen, uint32_t _vlen, size_t _elemSize)
Fault execute(ExecContext *, trace::InstRecord *) const override
RegId srcRegIdxArr[NumVecInternalRegs]
VMvWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
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.
VMvWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Fault execute(ExecContext *, trace::InstRecord *) const override
VPinVdMicroInst(ExtMachInst _machInst, uint32_t _microIdx, uint32_t _numVdPins, uint32_t _elen, uint32_t _vlen, bool _hasVdOffset=false, bool _copyVs=false, uint32_t _vsIdx=0)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorArithMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorArithMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
VectorMemMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
VectorMemMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _offset, uint32_t _elen, uint32_t _vlen)
Request::Flags memAccessFlags
VectorMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
VectorNonSplitInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorNopMicroInst(ExtMachInst _machInst, const Fault &fault=NoFault)
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
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.
VectorSlideMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorSlideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _vdIdx, uint32_t _vs2Idx, uint32_t _vs3Idx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorVMUNARY0MacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VectorVMUNARY0MicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VlElementMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, bool _has_rs2, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VlElementMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _offset, bool _has_rs2, uint32_t _elen, uint32_t _vlen)
Fault execute(ExecContext *, trace::InstRecord *) const override
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
VlFFTrimVlMicroOp(ExtMachInst _machInst, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen, std::vector< StaticInstPtr > &_microops)
std::unique_ptr< PCStateBase > branchTarget(ThreadContext *) const override
Return the target address for an indirect branch (jump).
std::vector< StaticInstPtr > & microops
VlIndexMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VlIndexMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _vdRegIdx, uint32_t _vdElemIdx, uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Fault execute(ExecContext *, trace::InstRecord *) const override
RegId srcRegIdxArr[NumVecInternalRegs]
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
VlSegDeIntrlvMicroInst(ExtMachInst extMachInst, uint32_t _micro_vl, uint32_t _dstReg, uint32_t _numSrcs, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _elen, uint32_t _vlen, uint32_t _sizeOfElement)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VlSegMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Request::Flags memAccessFlags
VlSegMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _numFields, uint32_t _elen, uint32_t _vlen)
VlWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Request::Flags memAccessFlags
VlWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VleMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Request::Flags memAccessFlags
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VleMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
VsElementMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, bool _has_rs2, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VsElementMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _offset, bool _has_rs2, uint32_t _elen, uint32_t _vlen)
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.
VsIndexMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VsIndexMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _vs3RegIdx, uint32_t _vs3ElemIdx, uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
VsSegIntrlvMicroInst(ExtMachInst extMachInst, uint32_t _micro_vl, uint32_t _dstReg, uint32_t _numSrcs, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _elen, uint32_t _vlen, uint32_t _sizeOfElement)
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
RegId srcRegIdxArr[NumVecInternalRegs]
Fault execute(ExecContext *, trace::InstRecord *) const override
VsSegMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
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.
VsSegMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _numFields, uint32_t _elen, uint32_t _vlen)
Request::Flags memAccessFlags
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VsWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Request::Flags memAccessFlags
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VsWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VseMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
VseMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Request::Flags memAccessFlags
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Fault execute(ExecContext *, trace::InstRecord *) const override
VxsatMicroInst(bool *Vxsat, ExtMachInst extMachInst, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
const char * mnemonic
Base mnemonic (e.g., "add").
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.
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
float getVflmul(uint32_t vlmul_encoding)
This function translates the 3-bit value of vlmul bits to the corresponding lmul value as specified i...
const int NumVecInternalRegs
uint8_t checked_vtype(bool vill, uint8_t vtype)
Bitfield< 29, 20 > zimm_vsetivli
uint32_t getVlmax(VTYPE vtype, uint32_t vlen)
uint32_t get_emul(uint32_t eew, uint32_t sew, float vflmul, bool is_mask_ldst)
Bitfield< 19, 15 > uimm_vsetivli
Bitfield< 30, 20 > zimm_vsetvli
int64_t vtype_vlmul(const uint64_t vtype)
uint64_t width_EEW(uint64_t width)
uint32_t getSew(uint32_t vsew)
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< FaultBase > Fault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
static const OpClass SimdMiscOp
constexpr decltype(nullptr) NoFault