Go to the documentation of this file.
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;
177 uint8_t _size,
Addr _addr, uint64_t _data);
179 virtual void print(std::ostream& outs,
181 const std::string &prefix =
"")
const override;
194 virtual void dump()
override;
196 using InstPtr = std::unique_ptr<TraceInstEntry>;
197 using MemPtr = std::unique_ptr<TraceMemEntry>;
198 using RegPtr = std::unique_ptr<TraceRegEntry>;
215 template<
typename RegEntry>
220 single_reg.update(tarmCtx);
225 template<
typename RegEntry>
230 auto it = std::remove_if(
231 queue.begin(), queue.end(),
232 [] (
RegPtr&
reg) ->bool { return (reg->regClass == CCRegClass); }
235 if (it != queue.end()) {
237 queue.erase(it, queue.end());
246 auto cpsr_it = std::find_if(
247 queue.begin(), queue.end(), is_cpsr
251 if (cpsr_it == queue.end()) {
254 std::make_unique<RegEntry>(
255 genRegister<RegEntry>(tarmCtx,
reg))
262 template<
typename Queue>
264 template<
typename Queue,
typename... Args>
275 #endif // __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
std::unique_ptr< TraceInstEntry > InstPtr
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
RegClassType regClass
Register class.
bool regValid
True if register entry is valid.
void mergeCCEntry(std::vector< RegPtr > &queue, const TarmacContext &tarmCtx)
TraceInstEntry(const TarmacContext &tarmCtx, bool predicate)
virtual void updateCC(const TarmacContext &tarmCtx, RegIndex regRelIdx)
bool secureMode
True if instruction is executed in secure mode.
std::string regName
Register name to be printed.
bool loadAccess
True if memory access is a load.
Tarmac Tracer: this tracer generates a new Tarmac Record for every instruction being executed in gem5...
virtual void updateMisc(const TarmacContext &tarmCtx, RegIndex regRelIdx)
Register update functions.
Abstract base class for objects which support being printed to a stream for debugging.
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
ISetState
ARM instruction set state.
TarmacTracer & tracer
Reference to tracer.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
TARMAC instruction trace record.
TraceRegEntry(const TarmacContext &tarmCtx, const RegId ®)
TarmacTracer Record: Record generated by the TarmacTracer for every executed instruction.
virtual void dump() override
uint64_t Tick
Tick count type.
virtual void updatePred(const TarmacContext &tarmCtx, RegIndex regRelIdx)
RegIndex regRel
Register arch number.
TARMAC register trace record.
virtual void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.
RegEntry genRegister(const TarmacContext &tarmCtx, const RegId ®)
Generate and update a register entry.
A high-level queue interface, to be used by both the MSHR queue and the write buffer.
virtual void addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every triggered memory access.
virtual void updateInt(const TarmacContext &tarmCtx, RegIndex regRelIdx)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
TraceMemEntry(const TarmacContext &tarmCtx, uint8_t _size, Addr _addr, uint64_t _data)
virtual void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate an Entry for every register being written.
RegClassType
Enumerate the classes of registers.
@ MiscRegClass
Control (misc) register.
bool predicate
is the predicate for execution this inst true or false (not execed)?
static uint64_t instCount
Number of instructions being traced.
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
virtual void updateVec(const TarmacContext &tarmCtx, RegIndex regRelIdx)
TARMAC memory access trace record (stores only).
std::unique_ptr< TraceMemEntry > MemPtr
void flushQueues(Queue &queue)
Flush queues to the trace output.
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
TarmacTracerRecord(Tick _when, ThreadContext *_thread, const StaticInstPtr _staticInst, const PCStateBase &_pc, TarmacTracer &_tracer, const StaticInstPtr _macroStaticInst=NULL)
virtual void updateFloat(const TarmacContext &tarmCtx, RegIndex regRelIdx)
void update(const TarmacContext &tarmCtx)
This updates the register entry using the update table.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
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
Register ID: describe an architectural register with its class and index.
Generated on Tue Dec 21 2021 11:34:22 for gem5 by doxygen 1.8.17