43 #ifndef __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__ 44 #define __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__ 48 #include "config/the_isa.hh" 97 virtual void print(std::ostream& outs,
99 const std::string &prefix =
"")
const override;
132 virtual void print(std::ostream& outs,
134 const std::string &prefix =
"")
const override;
172 uint8_t _size,
Addr _addr, uint64_t _data);
174 virtual void print(std::ostream& outs,
176 const std::string &prefix =
"")
const override;
189 virtual void dump()
override;
191 using InstPtr = std::unique_ptr<TraceInstEntry>;
192 using MemPtr = std::unique_ptr<TraceMemEntry>;
193 using RegPtr = std::unique_ptr<TraceRegEntry>;
210 template<
typename RegEntry>
215 single_reg.update(tarmCtx);
220 template<
typename RegEntry>
225 auto it = std::remove_if(
226 queue.begin(), queue.end(),
230 if (it != queue.end()) {
232 queue.erase(it, queue.end());
241 auto cpsr_it = std::find_if(
242 queue.begin(), queue.end(), is_cpsr
246 if (cpsr_it == queue.end()) {
249 m5::make_unique<RegEntry>(
250 genRegister<RegEntry>(tarmCtx, reg))
257 template<
typename Queue>
259 template<
typename Queue,
typename... Args>
269 #endif // __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
TarmacTracer & tracer
Reference to tracer.
TraceInstEntry(const TarmacContext &tarmCtx, bool predicate)
std::string regName
Register name to be printed.
ISetState
ARM instruction set state.
Tarmac Tracer: this tracer generates a new Tarmac Record for every instruction being executed in gem5...
bool predicate
is the predicate for execution this inst true or false (not execed)?
std::string opModeToStr(OperatingMode opMode)
Returns the string representation of the ARM Operating Mode (CPSR.M[3:0] field) according to the Tarm...
std::unique_ptr< TraceRegEntry > RegPtr
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
RegClass
Enumerate the classes of registers.
bool loadAccess
True if memory access is a load.
TarmacTracerRecord(Tick _when, ThreadContext *_thread, const StaticInstPtr _staticInst, ArmISA::PCState _pc, TarmacTracer &_tracer, const StaticInstPtr _macroStaticInst=NULL)
bool secureMode
True if instruction is executed in secure mode.
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 addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every triggered memory access.
void flushQueues(Queue &queue)
Flush queues to the trace output.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
A high-level queue interface, to be used by both the MSHR queue and the write buffer.
RegClass regClass
Register class.
RegIndex regRel
Register arch number.
virtual void updateVec(const TarmacContext &tarmCtx, RegIndex regRelIdx)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
std::unique_ptr< TraceMemEntry > MemPtr
uint64_t Tick
Tick count type.
bool regValid(Addr daddr)
virtual void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate an Entry for every register being written.
RegEntry genRegister(const TarmacContext &tarmCtx, const RegId ®)
Generate and update a register entry.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Abstract base class for objects which support being printed to a stream for debugging.
TarmacTracer Record: Record generated by the TarmacTracer for every executed instruction.
std::unique_ptr< TraceInstEntry > InstPtr
void mergeCCEntry(std::vector< RegPtr > &queue, const TarmacContext &tarmCtx)
TARMAC register trace record.
TARMAC memory access trace record (stores only).
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
Register ID: describe an architectural register with its class and index.
virtual void updatePred(const TarmacContext &tarmCtx, RegIndex regRelIdx)
virtual void dump() override
virtual void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.
GenericISA::DelaySlotPCState< MachInst > PCState