43#ifndef __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
44#define __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
102 virtual void print(std::ostream& outs,
104 const std::string &prefix =
"")
const override;
137 virtual void print(std::ostream& outs,
139 const std::string &prefix =
"")
const override;
164 uint8_t _size,
Addr _addr, uint64_t _data);
166 virtual void print(std::ostream& outs,
168 const std::string &prefix =
"")
const override;
181 virtual void dump()
override;
183 using InstPtr = std::unique_ptr<TraceInstEntry>;
184 using MemPtr = std::unique_ptr<TraceMemEntry>;
185 using RegPtr = std::unique_ptr<TraceRegEntry>;
202 template<
typename RegEntry>
207 single_reg.update(tarmCtx);
212 template<
typename RegEntry>
217 auto it = std::remove_if(
218 queue.begin(), queue.end(),
220 return (reg->regId.classValue() == CCRegClass);
224 if (it != queue.end()) {
226 queue.erase(it, queue.end());
235 auto cpsr_it = std::find_if(
236 queue.begin(), queue.end(), is_cpsr
240 if (cpsr_it == queue.end()) {
243 std::make_unique<RegEntry>(
244 genRegister<RegEntry>(tarmCtx,
reg))
251 template<
typename Queue>
253 template<
typename Queue,
typename... Args>
Abstract base class for objects which support being printed to a stream for debugging.
A high-level queue interface, to be used by both the MSHR queue and the write buffer.
Register ID: describe an architectural register with its class and index.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
bool predicate
is the predicate for execution this inst true or false (not execed)?
ISetState
ARM instruction set state.
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
TarmacTracer Record: Record generated by the TarmacTracer for every executed instruction.
std::unique_ptr< TraceRegEntry > RegPtr
virtual void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.
void mergeCCEntry(std::vector< RegPtr > &queue, const TarmacContext &tarmCtx)
RegEntry genRegister(const TarmacContext &tarmCtx, const RegId ®)
Generate and update a register entry.
std::unique_ptr< TraceMemEntry > MemPtr
virtual void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate an Entry for every register being written.
virtual void dump() override
void flushQueues(Queue &queue)
Flush queues to the trace output.
virtual void addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every triggered memory access.
TarmacTracer & tracer
Reference to tracer.
std::unique_ptr< TraceInstEntry > InstPtr
Tarmac Tracer: this tracer generates a new Tarmac Record for every instruction being executed in gem5...
constexpr RegClass miscRegClass
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
std::string opModeToStr(OperatingMode opMode)
Returns the string representation of the ARM Operating Mode (CPSR.M[3:0] field) according to the Tarm...
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.
@ MiscRegClass
Control (misc) register.
TARMAC instruction trace record.
TARMAC memory access trace record (stores only).
TARMAC register trace record.
bool secureMode
True if instruction is executed in secure mode.
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
static uint64_t instCount
Number of instructions being traced.
uint8_t instSize
Instruction size: 16 for 16-bit Thumb Instruction 32 otherwise (ARM and BigThumb)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
bool loadAccess
True if memory access is a load.
void update(const TarmacContext &tarmCtx)
This updates the register entry using the update table.
bool regValid
True if register entry is valid.
virtual void updateCC(const TarmacContext &tarmCtx)
virtual void updatePred(const TarmacContext &tarmCtx)
virtual void updateFloat(const TarmacContext &tarmCtx)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
virtual void updateMisc(const TarmacContext &tarmCtx)
Register update functions.
virtual void updateVec(const TarmacContext &tarmCtx)
std::string regName
Register name to be printed.
virtual void updateInt(const TarmacContext &tarmCtx)