65 uint8_t _size,
Addr _addr, uint64_t _data)
108 regWidth = (arm_inst->getIntWidth());
136 RegId(regClass, regRelIdx));
140 auto num_elements = regWidth / (
sizeof(
VecElem) * 8);
143 values.resize(num_elements);
145 for (
auto i = 0;
i < num_elements;
i++) {
161 RegId(regClass, regRelIdx));
169 values.resize(num_elements);
172 auto vv = pred_container.as<uint16_t>();
173 for (
auto i = 0;
i < num_elements;
i++) {
188 m5::make_unique<TraceInstEntryV8>(tarmCtx,
predicate)
201 m5::make_unique<TraceMemEntryV8>(tarmCtx,
202 static_cast<uint8_t>(
getSize()),
219 auto single_reg = genRegister<TraceRegEntryV8>(tarmCtx, reg_id);
224 m5::make_unique<TraceRegEntryV8>(single_reg)
231 mergeCCEntry<TraceRegEntryV8>(queue, tarmCtx);
238 const std::string &prefix)
const 242 std::string paddr_str = paddrValid?
csprintf(
":%012x",paddr) :
250 ccprintf(outs,
"%s clk %s %s (%u) %08x%s %s %s %s_%s : %s\n",
260 secureMode?
"s" :
"ns",
268 const std::string &prefix)
const 272 ccprintf(outs,
"%s clk %s M%s%d %08x:%012x %0*x\n",
275 loadAccess?
"R" :
"W",
287 const std::string &prefix)
const 292 ccprintf(outs,
"%s clk %s R %s %s\n",
312 for (
auto it = values.rbegin(); it != values.rend(); it++) {
314 static_cast<int>(
sizeof(
VecElem) * 2), *it);
void ccprintf(cp::Print &print)
void updateVec(const TarmacContext &tarmCtx, RegIndex regRelIdx) override
bool predicate
is the predicate for execution this inst true or false (not execed)?
uint64_t getIntData() const
VecRegT< VecElem, NumElems, true > as() const
View interposers.
virtual BaseTLB * getDTBPtr()=0
TraceInstEntryV8(const TarmacContext &tarmCtx, bool predicate)
std::string opModeToStr(OperatingMode opMode)
Returns the string representation of the ARM Operating Mode (CPSR.M[3:0] field) according to the Tarm...
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
virtual void updateMisc(const TarmacContext &tarmCtx, RegIndex regRelIdx)
Register update functions.
int8_t numDestRegs() const
Number of destination registers.
Addr size
The size of the memory request.
void updateInt(const TarmacContext &tarmCtx, RegIndex regRelIdx) override
std::string formatReg() const
Returning a string which contains the formatted register value: transformed in hex, 0 padded or/and split in chunks separated by underscores in case of vector register.
virtual const VecRegContainer & readVecReg(const RegId ®) const =0
const RegIndex ReturnAddressReg
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
TraceRegEntryV8(const TarmacContext &tarmCtx, const RegId ®)
virtual const VecPredRegContainer & readVecPredReg(const RegId ®) const =0
Tick curTick()
The current simulated tick.
std::string csprintf(const char *format, const Args &...args)
bool regValid(Addr daddr)
const RegIndex StackPointerReg
union Trace::InstRecord::@120 data
bool translateFunctional(ThreadContext *tc, Addr vaddr, Addr &paddr)
Do a functional lookup on the TLB (for debugging) and don't modify any internal state.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void updatePred(const TarmacContext &tarmCtx, RegIndex regRelIdx) override
const StaticInstPtr staticInst
General data shared by all v8 entries.
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
Bitfield< 24, 21 > opcode
void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.
virtual void updateInt(const TarmacContext &tarmCtx, RegIndex regRelIdx)
uint16_t regWidth
Size in bits of arch register.
const RegIndex FramePointerReg
const RegId & destRegIdx(int i) const
Return logical index (architectural reg num) of i'th destination reg.
TraceMemEntryV8(const TarmacContext &tarmCtx, uint8_t _size, Addr _addr, uint64_t _data)
Register ID: describe an architectural register with its class and index.
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
void updateMisc(const TarmacContext &tarmCtx, RegIndex regRelIdx) override
T * get() const
Directly access the pointer itself without taking a reference.
Addr addr
The address that was accessed.
const std::string to_string(sc_enc enc)
void addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every memory access triggered.
void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate a Record for every register being written.