29#ifndef __ARCH_RISCV_INSTS_VECTOR_HH__
30#define __ARCH_RISCV_INSTS_VECTOR_HH__
75 uint32_t _elen, uint32_t _vlen, OpClass __opClass)
84 this->
flags[IsVector] =
true;
95 const uint8_t
vsew =
bits(vtype, 5, 3);
110 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
117 this->
flags[IsVector] =
true;
133 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
140 this->
flags[IsVector] =
true;
154 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
162 this->
flags[IsVector] =
true;
182 std::stringstream
ss;
192 OpClass __opClass, uint32_t _microVl,
193 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
206 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
209 this->
flags[IsVector] =
true;
219 OpClass __opClass, uint32_t _microVl,
220 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
233 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
236 this->
flags[IsVector] =
true;
247 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
250 this->
flags[IsVector] =
true;
263 OpClass __opClass, uint32_t _microVl,
264 uint32_t _microIdx, uint32_t _vdIdx, uint32_t _vs2Idx,
265 uint32_t _elen, uint32_t _vlen)
282 OpClass __opClass, uint32_t _microVl,
283 uint32_t _microIdx, uint32_t _offset, uint32_t _elen,
296 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
305 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
317 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
335 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
341 this->
flags[IsLoad] =
true;
354 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
359 this->
flags[IsStore] =
true;
370 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
384 OpClass __opClass, uint32_t _microVl, uint32_t _microIdx,
385 uint32_t _elen, uint32_t _vlen)
398 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
412 OpClass __opClass, uint32_t _microVl,
413 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
415 _microIdx, _elen, _vlen)
426 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
439 OpClass __opClass, uint32_t _regIdx,
440 uint32_t _microIdx, uint32_t _microVl, uint32_t _elen,
443 _microIdx, 0, _elen, _vlen)
455 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
468 OpClass __opClass, uint32_t _regIdx,
469 uint32_t _microIdx, uint32_t _microVl, uint32_t _elen,
472 _microIdx, 0, _elen, _vlen)
484 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
500 OpClass __opClass, uint32_t _vdRegIdx, uint32_t _vdElemIdx,
501 uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen,
517 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
533 OpClass __opClass, uint32_t _vs3RegIdx,
534 uint32_t _vs3ElemIdx, uint32_t _vs2RegIdx,
535 uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
550 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
562 OpClass __opClass, uint32_t _microVl,
563 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
582 uint8_t _numSrcs, uint32_t _elen, uint32_t _vlen,
615 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen,
628 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
643 OpClass __opClass, uint32_t _microVl,
644 uint32_t _microIdx, uint32_t _numMicroops,
645 uint32_t _field, uint32_t _numFields,
646 uint32_t _elen, uint32_t _vlen)
648 _microIdx, _elen, _vlen)
650 this->
flags[IsLoad] =
true;
670 uint32_t _dstReg, uint32_t _numSrcs,
671 uint32_t _microIdx, uint32_t _numMicroops,
672 uint32_t _field, uint32_t _elen, uint32_t _vlen,
673 uint32_t _sizeOfElement);
685 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
700 OpClass __opClass, uint32_t _microVl,
701 uint32_t _microIdx, uint32_t _numMicroops,
702 uint32_t _field, uint32_t _numFields,
703 uint32_t _elen, uint32_t _vlen)
705 _microIdx, _elen, _vlen)
707 this->
flags[IsStore] =
true;
727 uint32_t _dstReg, uint32_t _numSrcs,
728 uint32_t _microIdx, uint32_t _numMicroops,
729 uint32_t _field, uint32_t _elen, uint32_t _vlen,
730 uint32_t _sizeOfElement);
746 uint8_t _vsRegIdx, uint32_t _elen, uint32_t _vlen);
761 uint32_t _numVdPins, uint32_t _elen, uint32_t _vlen,
762 bool _hasVdOffset=
false);
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.
Base class for all RISC-V Macroops.
Base class for all RISC-V Microops.
Base class for all RISC-V static instructions.
Base class for Vector Config operations.
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
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.
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
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.
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.
VectorNopMicroInst(ExtMachInst _machInst)
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 _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)
Fault execute(ExecContext *, trace::InstRecord *) const override
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
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.
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)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
VlStrideMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
VlStrideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _elen, uint32_t _vlen)
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
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)
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)
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.
VsStrideMacroInst(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.
VsStrideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _elen, uint32_t _vlen)
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)
Bitfield< 19, 15 > uimm_vsetivli
Bitfield< 30, 20 > zimm_vsetvli
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