Go to the documentation of this file.
38 #ifndef __ARCH_ARM_SVE_MACROMEM_HH__
39 #define __ARCH_ARM_SVE_MACROMEM_HH__
41 #include "arch/arm/generated/decoder.hh"
46 template <
typename Element,
47 template <
typename>
class MicroopLdMemType,
48 template <
typename>
class MicroopDeIntrlvType>
70 microOps[
i] =
new MicroopLdMemType<Element>(
72 _gp, _base, _offset, _numregs,
i);
84 (*uop)->setDelayedCommit();
91 panic(
"Execute method called when it shouldn't!");
118 template <
typename Element,
119 template <
typename>
class MicroopStMemType,
120 template <
typename>
class MicroopIntrlvType>
142 microOps[
i] =
new MicroopIntrlvType<Element>(
144 _dest, _numregs,
i,
this);
150 _gp, _base, _offset, _numregs,
i);
157 (*uop)->setDelayedCommit();
164 panic(
"Execute method called when it shouldn't!");
172 std::stringstream
ss;
192 template <
typename Element,
193 template <
typename>
class MicroopLdMemType,
194 template <
typename>
class MicroopDeIntrlvType>
207 int64_t _imm, uint8_t _numregs)
216 microOps[
i] =
new MicroopLdMemType<Element>(
218 _gp, _base, _imm, _numregs,
i);
230 (*uop)->setDelayedCommit();
237 panic(
"Execute method called when it shouldn't!");
245 std::stringstream
ss;
265 template <
typename Element,
266 template <
typename>
class MicroopStMemType,
267 template <
typename>
class MicroopIntrlvType>
280 int64_t _imm, uint8_t _numregs)
289 microOps[
i] =
new MicroopIntrlvType<Element>(
291 _dest, _numregs,
i,
this);
297 _gp, _base, _imm, _numregs,
i);
304 (*uop)->setDelayedCommit();
311 panic(
"Execute method called when it shouldn't!");
319 std::stringstream
ss;
339 template <
typename RegElemType,
typename MemElemType,
340 template <
typename,
typename>
class MicroopType,
341 template <
typename>
class FirstFaultWritebackMicroopType>
353 uint64_t _imm,
bool firstFault)
358 assert(!firstFault ||
isLoad);
360 int num_elems = ((
machInst.sveLen + 1) * 16) /
sizeof(RegElemType);
381 *uop =
new ArmISAInst::SveGatherLoadCpySrcVecMicroop(
386 for (
int i = 0;
i < num_elems;
i++, uop++) {
387 *uop =
new MicroopType<RegElemType, MemElemType>(
388 mnem,
machInst, __opClass, _dest, _gp,
390 num_elems, firstFault);
394 *uop =
new FirstFaultWritebackMicroopType<RegElemType>(
395 mnem,
machInst, __opClass, num_elems,
this);
404 (*uop)->setDelayedCommit();
411 panic(
"Execute method called when it shouldn't!");
420 std::stringstream
ss;
436 template <
typename RegElemType,
typename MemElemType,
437 template <
typename,
typename>
class MicroopType,
438 template <
typename>
class FirstFaultWritebackMicroopType>
455 bool _offsetIsSigned,
bool _offsetIsScaled,
463 assert(!firstFault ||
isLoad);
465 int num_elems = ((
machInst.sveLen + 1) * 16) /
sizeof(RegElemType);
486 *uop =
new ArmISAInst::SveGatherLoadCpySrcVecMicroop(
491 for (
int i = 0;
i < num_elems;
i++, uop++) {
492 *uop =
new MicroopType<RegElemType, MemElemType>(
493 mnem,
machInst, __opClass, _dest, _gp, _base,
495 _offsetIsSigned, _offsetIsScaled,
i, num_elems, firstFault);
499 *uop =
new FirstFaultWritebackMicroopType<RegElemType>(
500 mnem,
machInst, __opClass, num_elems,
this);
509 (*uop)->setDelayedCommit();
516 panic(
"Execute method called when it shouldn't!");
525 std::stringstream
ss;
542 #endif // __ARCH_ARM_SVE_MACROMEM_HH__
Fault execute(ExecContext *, Trace::InstRecord *) const override
SveLdStructSS(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, IntRegIndex _offset, uint8_t _numregs)
static const OpClass MemReadOp
SveStStructSS(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, IntRegIndex _offset, uint8_t _numregs)
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Fault execute(ExecContext *, Trace::InstRecord *) const override
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).
Fault execute(ExecContext *, Trace::InstRecord *) const override
SveStStructSI(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, int64_t _imm, uint8_t _numregs)
SveIndexedMemVI(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, uint64_t _imm, bool firstFault)
std::shared_ptr< FaultBase > Fault
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
SveLdStructSI(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, int64_t _imm, uint8_t _numregs)
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Base class for predicated macro-operations.
TheISA::ExtMachInst ExtMachInst
Binary extended machine instruction type.
Fault execute(ExecContext *, Trace::InstRecord *) const override
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
constexpr decltype(nullptr) NoFault
SveIndexedMemSV(const char *mnem, ExtMachInst machInst, OpClass __opClass, IntRegIndex _dest, IntRegIndex _gp, IntRegIndex _base, IntRegIndex _offset, bool _offsetIs32, bool _offsetIsSigned, bool _offsetIsScaled, bool firstFault)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void printVecPredReg(std::ostream &os, RegIndex reg_idx) const
void printVecReg(std::ostream &os, RegIndex reg_idx, bool isSveVecReg=false) const
bool isLastMicroop() const
const ExtMachInst machInst
The binary machine instruction.
Fault execute(ExecContext *, Trace::InstRecord *) const override
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
void printMnemonic(std::ostream &os, const std::string &suffix="", bool withPred=true, bool withCond64=false, ConditionCode cond64=COND_UC) const
void ccprintf(cp::Print &print)
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Fault execute(ExecContext *, Trace::InstRecord *) const override
std::string generateDisassembly(Addr pc, const Loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
#define panic(...)
This implements a cprintf based panic() function.
Generated on Wed Sep 30 2020 14:02:00 for gem5 by doxygen 1.8.17