gem5  v22.1.0.0
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
gem5::o3::Rename Class Reference

Rename handles both single threaded and SMT rename. More...

#include <rename.hh>

Classes

struct  FreeEntries
 Structures whose free entries impact the amount of instructions that can be renamed. More...
 
struct  RenameHistory
 Holds the information for each destination register rename. More...
 
struct  RenameStats
 
struct  Stalls
 Source of possible stalls. More...
 

Public Types

enum  RenameStatus { Active , Inactive }
 Overall rename status. More...
 
enum  ThreadStatus {
  Running , Idle , StartSquash , Squashing ,
  Blocked , Unblocking , SerializeStall
}
 Individual thread status. More...
 
typedef std::deque< DynInstPtrInstQueue
 

Public Member Functions

 Rename (CPU *_cpu, const BaseO3CPUParams &params)
 Rename constructor. More...
 
std::string name () const
 Returns the name of rename. More...
 
void regProbePoints ()
 Registers probes. More...
 
void setTimeBuffer (TimeBuffer< TimeStruct > *tb_ptr)
 Sets the main backwards communication time buffer pointer. More...
 
void setRenameQueue (TimeBuffer< RenameStruct > *rq_ptr)
 Sets pointer to time buffer used to communicate to the next stage. More...
 
void setDecodeQueue (TimeBuffer< DecodeStruct > *dq_ptr)
 Sets pointer to time buffer coming from decode. More...
 
void setIEWStage (IEW *iew_stage)
 Sets pointer to IEW stage. More...
 
void setCommitStage (Commit *commit_stage)
 Sets pointer to commit stage. More...
 
void startupStage ()
 Initializes variables for the stage. More...
 
void clearStates (ThreadID tid)
 Clear all thread-specific states. More...
 
void setActiveThreads (std::list< ThreadID > *at_ptr)
 Sets pointer to list of active threads. More...
 
void setRenameMap (UnifiedRenameMap rm_ptr[MaxThreads])
 Sets pointer to rename maps (per-thread structures). More...
 
void setFreeList (UnifiedFreeList *fl_ptr)
 Sets pointer to the free list. More...
 
void setScoreboard (Scoreboard *_scoreboard)
 Sets pointer to the scoreboard. More...
 
void drainSanityCheck () const
 Perform sanity checks after a drain. More...
 
bool isDrained () const
 Has the stage drained? More...
 
void takeOverFrom ()
 Takes over from another CPU's thread. More...
 
void squash (const InstSeqNum &squash_seq_num, ThreadID tid)
 Squashes all instructions in a thread. More...
 
void tick ()
 Ticks rename, which processes all input signals and attempts to rename as many instructions as possible. More...
 
void dumpHistory ()
 Debugging function used to dump history buffer of renamings. More...
 

Private Types

enum  FullSource {
  ROB , IQ , LQ , SQ ,
  NONE
}
 Enum to record the source of a structure full stall. More...
 
typedef std::pair< InstSeqNum, PhysRegIdPtrSeqNumRegPair
 Probe points. More...
 

Private Member Functions

void resetStage ()
 Reset this pipeline stage. More...
 
void rename (bool &status_change, ThreadID tid)
 Determines what to do based on rename's current status. More...
 
void renameInsts (ThreadID tid)
 Renames instructions for the given thread. More...
 
void skidInsert (ThreadID tid)
 Inserts unused instructions from a given thread into the skid buffer, to be renamed once rename unblocks. More...
 
void sortInsts ()
 Separates instructions from decode into individual lists of instructions sorted by thread. More...
 
bool skidsEmpty ()
 Returns if all of the skid buffers are empty. More...
 
void updateStatus ()
 Updates overall rename status based on all of the threads' statuses. More...
 
bool block (ThreadID tid)
 Switches rename to blocking, and signals back that rename has become blocked. More...
 
bool unblock (ThreadID tid)
 Switches rename to unblocking if the skid buffer is empty, and signals back that rename has unblocked. More...
 
void doSquash (const InstSeqNum &squash_seq_num, ThreadID tid)
 Executes actual squash, removing squashed instructions. More...
 
void removeFromHistory (InstSeqNum inst_seq_num, ThreadID tid)
 Removes a committed instruction's rename history. More...
 
void renameSrcRegs (const DynInstPtr &inst, ThreadID tid)
 Renames the source registers of an instruction. More...
 
void renameDestRegs (const DynInstPtr &inst, ThreadID tid)
 Renames the destination registers of an instruction. More...
 
int calcFreeROBEntries (ThreadID tid)
 Calculates the number of free ROB entries for a specific thread. More...
 
int calcFreeIQEntries (ThreadID tid)
 Calculates the number of free IQ entries for a specific thread. More...
 
int calcFreeLQEntries (ThreadID tid)
 Calculates the number of free LQ entries for a specific thread. More...
 
int calcFreeSQEntries (ThreadID tid)
 Calculates the number of free SQ entries for a specific thread. More...
 
unsigned validInsts ()
 Returns the number of valid instructions coming from decode. More...
 
void readStallSignals (ThreadID tid)
 Reads signals telling rename to block/unblock. More...
 
bool checkStall (ThreadID tid)
 Checks if any stages are telling rename to block. More...
 
void readFreeEntries (ThreadID tid)
 Gets the number of free entries for a specific thread. More...
 
bool checkSignalsAndUpdate (ThreadID tid)
 Checks the signals and updates the status. More...
 
void serializeAfter (InstQueue &inst_list, ThreadID tid)
 Either serializes on the next instruction available in the InstQueue, or records that it must serialize on the next instruction to enter rename. More...
 
void incrFullStat (const FullSource &source)
 Function used to increment the stat that corresponds to the source of the stall. More...
 

Private Attributes

RenameStatus _status
 Rename status. More...
 
ThreadStatus renameStatus [MaxThreads]
 Per-thread status. More...
 
ProbePointArg< DynInstPtr > * ppRename
 To probe when register renaming for an instruction is complete. More...
 
ProbePointArg< SeqNumRegPair > * ppSquashInRename
 To probe when an instruction is squashed and the register mapping for it needs to be undone. More...
 
IEWiew_ptr
 Pointer to IEW stage. More...
 
Commitcommit_ptr
 Pointer to commit stage. More...
 
std::list< RenameHistoryhistoryBuffer [MaxThreads]
 A per-thread list of all destination register renames, used to either undo rename mappings or free old physical registers. More...
 
CPUcpu
 Pointer to CPU. More...
 
TimeBuffer< TimeStruct > * timeBuffer
 Pointer to main time buffer used for backwards communication. More...
 
TimeBuffer< TimeStruct >::wire fromIEW
 Wire to get IEW's output from backwards time buffer. More...
 
TimeBuffer< TimeStruct >::wire fromCommit
 Wire to get commit's output from backwards time buffer. More...
 
TimeBuffer< TimeStruct >::wire toDecode
 Wire to write infromation heading to previous stages. More...
 
TimeBuffer< RenameStruct > * renameQueue
 Rename instruction queue. More...
 
TimeBuffer< RenameStruct >::wire toIEW
 Wire to write any information heading to IEW. More...
 
TimeBuffer< DecodeStruct > * decodeQueue
 Decode instruction queue interface. More...
 
TimeBuffer< DecodeStruct >::wire fromDecode
 Wire to get decode's output from decode queue. More...
 
InstQueue insts [MaxThreads]
 Queue of all instructions coming from decode this cycle. More...
 
InstQueue skidBuffer [MaxThreads]
 Skid buffer between rename and decode. More...
 
UnifiedRenameMaprenameMap [MaxThreads]
 Rename map interface. More...
 
UnifiedFreeListfreeList
 Free list interface. More...
 
std::list< ThreadID > * activeThreads
 Pointer to the list of active threads. More...
 
Scoreboardscoreboard
 Pointer to the scoreboard. More...
 
int instsInProgress [MaxThreads]
 Count of instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts. More...
 
int loadsInProgress [MaxThreads]
 Count of Load instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts. More...
 
int storesInProgress [MaxThreads]
 Count of Store instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts. More...
 
bool wroteToTimeBuffer
 Variable that tracks if decode has written to the time buffer this cycle. More...
 
FreeEntries freeEntries [MaxThreads]
 Per-thread tracking of the number of free entries of back-end structures. More...
 
bool emptyROB [MaxThreads]
 Records if the ROB is empty. More...
 
Stalls stalls [MaxThreads]
 Tracks which stages are telling decode to stall. More...
 
DynInstPtr serializeInst [MaxThreads]
 The serialize instruction that rename has stalled on. More...
 
bool serializeOnNextInst [MaxThreads]
 Records if rename needs to serialize on the next instruction for any thread. More...
 
int iewToRenameDelay
 Delay between iew and rename, in ticks. More...
 
int decodeToRenameDelay
 Delay between decode and rename, in ticks. More...
 
unsigned commitToRenameDelay
 Delay between commit and rename, in ticks. More...
 
unsigned renameWidth
 Rename width, in instructions. More...
 
unsigned toIEWIndex
 The index of the instruction in the time buffer to IEW that rename is currently using. More...
 
bool blockThisCycle
 Whether or not rename needs to block this cycle. More...
 
bool resumeSerialize
 Whether or not rename needs to resume a serialize instruction after squashing. More...
 
bool resumeUnblocking
 Whether or not rename needs to resume clearing out the skidbuffer after squashing. More...
 
ThreadID numThreads
 The number of threads active in rename. More...
 
unsigned skidBufferMax
 The maximum skid buffer size. More...
 
gem5::o3::Rename::RenameStats stats
 

Detailed Description

Rename handles both single threaded and SMT rename.

Its width is specified by the parameters; each cycle it tries to rename that many instructions. It holds onto the rename history of all instructions with destination registers, storing the arch. register, the new physical register, and the old physical register, to allow for undoing of mappings if squashing happens, or freeing up registers upon commit. Rename handles blocking if the ROB, IQ, or LSQ is going to be full. Rename also handles barriers, and does so by stalling on the instruction until the ROB is empty and there are no instructions in flight to the ROB.

Definition at line 78 of file rename.hh.

Member Typedef Documentation

◆ InstQueue

Definition at line 85 of file rename.hh.

◆ SeqNumRegPair

Probe points.

Definition at line 117 of file rename.hh.

Member Enumeration Documentation

◆ FullSource

Enum to record the source of a structure full stall.

Can come from either ROB, IQ, LSQ, and it is priortized in that order.

Enumerator
ROB 
IQ 
LQ 
SQ 
NONE 

Definition at line 465 of file rename.hh.

◆ RenameStatus

Overall rename status.

Used to determine if the CPU can deschedule itself due to a lack of activity.

Enumerator
Active 
Inactive 

Definition at line 91 of file rename.hh.

◆ ThreadStatus

Individual thread status.

Enumerator
Running 
Idle 
StartSquash 
Squashing 
Blocked 
Unblocking 
SerializeStall 

Definition at line 98 of file rename.hh.

Constructor & Destructor Documentation

◆ Rename()

gem5::o3::Rename::Rename ( CPU _cpu,
const BaseO3CPUParams &  params 
)

Member Function Documentation

◆ block()

bool gem5::o3::Rename::block ( ThreadID  tid)
private

Switches rename to blocking, and signals back that rename has become blocked.

Returns
Returns true if there is a status change.

Definition at line 859 of file rename.cc.

References Blocked, DPRINTF, renameStatus, resumeUnblocking, SerializeStall, skidInsert(), toDecode, Unblocking, and wroteToTimeBuffer.

Referenced by checkSignalsAndUpdate(), rename(), and renameInsts().

◆ calcFreeIQEntries()

int gem5::o3::Rename::calcFreeIQEntries ( ThreadID  tid)
private

Calculates the number of free IQ entries for a specific thread.

Definition at line 1141 of file rename.cc.

References freeEntries, fromIEW, instsInProgress, and gem5::o3::Rename::FreeEntries::iqEntries.

Referenced by checkStall(), and renameInsts().

◆ calcFreeLQEntries()

int gem5::o3::Rename::calcFreeLQEntries ( ThreadID  tid)
private

Calculates the number of free LQ entries for a specific thread.

Definition at line 1152 of file rename.cc.

References DPRINTF, freeEntries, fromIEW, loadsInProgress, and gem5::o3::Rename::FreeEntries::lqEntries.

Referenced by checkStall(), and renameInsts().

◆ calcFreeROBEntries()

int gem5::o3::Rename::calcFreeROBEntries ( ThreadID  tid)
private

Calculates the number of free ROB entries for a specific thread.

Definition at line 1130 of file rename.cc.

References freeEntries, fromIEW, instsInProgress, and gem5::o3::Rename::FreeEntries::robEntries.

Referenced by checkStall(), and renameInsts().

◆ calcFreeSQEntries()

int gem5::o3::Rename::calcFreeSQEntries ( ThreadID  tid)
private

Calculates the number of free SQ entries for a specific thread.

Definition at line 1165 of file rename.cc.

References DPRINTF, freeEntries, fromIEW, gem5::o3::Rename::FreeEntries::sqEntries, and storesInProgress.

Referenced by checkStall(), and renameInsts().

◆ checkSignalsAndUpdate()

bool gem5::o3::Rename::checkSignalsAndUpdate ( ThreadID  tid)
private

◆ checkStall()

bool gem5::o3::Rename::checkStall ( ThreadID  tid)
private

Checks if any stages are telling rename to block.

Definition at line 1203 of file rename.cc.

References calcFreeIQEntries(), calcFreeLQEntries(), calcFreeROBEntries(), calcFreeSQEntries(), DPRINTF, emptyROB, instsInProgress, renameMap, renameStatus, SerializeStall, and stalls.

Referenced by checkSignalsAndUpdate().

◆ clearStates()

void gem5::o3::Rename::clearStates ( ThreadID  tid)

◆ doSquash()

void gem5::o3::Rename::doSquash ( const InstSeqNum squash_seq_num,
ThreadID  tid 
)
private

Executes actual squash, removing squashed instructions.

Definition at line 912 of file rename.cc.

References gem5::o3::UnifiedFreeList::addReg(), DPRINTF, freeList, historyBuffer, ppSquashInRename, renameMap, gem5::o3::UnifiedRenameMap::setEntry(), stats, and gem5::o3::Rename::RenameStats::undoneMaps.

Referenced by squash().

◆ drainSanityCheck()

void gem5::o3::Rename::drainSanityCheck ( ) const

Perform sanity checks after a drain.

Definition at line 325 of file rename.cc.

References historyBuffer, insts, instsInProgress, numThreads, and skidBuffer.

Referenced by gem5::o3::CPU::drainSanityCheck().

◆ dumpHistory()

void gem5::o3::Rename::dumpHistory ( )

Debugging function used to dump history buffer of renamings.

Definition at line 1404 of file rename.cc.

References gem5::cprintf(), historyBuffer, and numThreads.

◆ incrFullStat()

void gem5::o3::Rename::incrFullStat ( const FullSource source)
private

Function used to increment the stat that corresponds to the source of the stall.

Definition at line 1382 of file rename.cc.

References IQ, gem5::o3::Rename::RenameStats::IQFullEvents, LQ, gem5::o3::Rename::RenameStats::LQFullEvents, panic, ROB, gem5::o3::Rename::RenameStats::ROBFullEvents, SQ, gem5::o3::Rename::RenameStats::SQFullEvents, and stats.

Referenced by renameInsts().

◆ isDrained()

bool gem5::o3::Rename::isDrained ( ) const

Has the stage drained?

Definition at line 305 of file rename.cc.

References historyBuffer, Idle, insts, instsInProgress, numThreads, renameStatus, Running, and skidBuffer.

Referenced by gem5::o3::CPU::isCpuDrained().

◆ name()

std::string gem5::o3::Rename::name ( ) const

Returns the name of rename.

Definition at line 92 of file rename.cc.

References cpu, and gem5::Named::name().

◆ readFreeEntries()

void gem5::o3::Rename::readFreeEntries ( ThreadID  tid)
private

◆ readStallSignals()

void gem5::o3::Rename::readStallSignals ( ThreadID  tid)
private

Reads signals telling rename to block/unblock.

Definition at line 1190 of file rename.cc.

References fromIEW, gem5::o3::Rename::Stalls::iew, and stalls.

Referenced by checkSignalsAndUpdate().

◆ regProbePoints()

void gem5::o3::Rename::regProbePoints ( )

Registers probes.

Definition at line 179 of file rename.cc.

References cpu, gem5::SimObject::getProbeManager(), ppRename, and ppSquashInRename.

Referenced by gem5::o3::CPU::regProbePoints().

◆ removeFromHistory()

void gem5::o3::Rename::removeFromHistory ( InstSeqNum  inst_seq_num,
ThreadID  tid 
)
private

Removes a committed instruction's rename history.

Definition at line 957 of file rename.cc.

References gem5::o3::UnifiedFreeList::addReg(), gem5::o3::Rename::RenameStats::committedMaps, DPRINTF, freeList, historyBuffer, and stats.

Referenced by tick().

◆ rename()

void gem5::o3::Rename::rename ( bool &  status_change,
ThreadID  tid 
)
private

Determines what to do based on rename's current status.

Parameters
status_changerename() sets this variable if there was a status change (ie switching from blocking to unblocking).
tidThread id to rename instructions from.

Definition at line 452 of file rename.cc.

References block(), gem5::o3::Rename::RenameStats::blockCycles, Blocked, blockThisCycle, DPRINTF, Idle, renameInsts(), renameStatus, resumeSerialize, resumeUnblocking, Running, SerializeStall, gem5::o3::Rename::RenameStats::serializeStallCycles, skidInsert(), gem5::o3::Rename::RenameStats::squashCycles, Squashing, stats, toDecode, unblock(), Unblocking, and validInsts().

Referenced by tick().

◆ renameDestRegs()

void gem5::o3::Rename::renameDestRegs ( const DynInstPtr inst,
ThreadID  tid 
)
private

◆ renameInsts()

void gem5::o3::Rename::renameInsts ( ThreadID  tid)
private

◆ renameSrcRegs()

void gem5::o3::Rename::renameSrcRegs ( const DynInstPtr inst,
ThreadID  tid 
)
private

◆ resetStage()

void gem5::o3::Rename::resetStage ( )
private

◆ serializeAfter()

void gem5::o3::Rename::serializeAfter ( InstQueue inst_list,
ThreadID  tid 
)
private

Either serializes on the next instruction available in the InstQueue, or records that it must serialize on the next instruction to enter rename.

Parameters
inst_listThe list of younger, unprocessed instructions for the thread that has the serializeAfter instruction.
tidThe thread id.

Definition at line 1369 of file rename.cc.

References serializeOnNextInst.

Referenced by renameInsts().

◆ setActiveThreads()

void gem5::o3::Rename::setActiveThreads ( std::list< ThreadID > *  at_ptr)

Sets pointer to list of active threads.

Definition at line 279 of file rename.cc.

References activeThreads.

◆ setCommitStage()

void gem5::o3::Rename::setCommitStage ( Commit commit_stage)
inline

Sets pointer to commit stage.

Used only for initialization.

Definition at line 150 of file rename.hh.

References commit_ptr.

◆ setDecodeQueue()

void gem5::o3::Rename::setDecodeQueue ( TimeBuffer< DecodeStruct > *  dq_ptr)

Sets pointer to time buffer coming from decode.

Definition at line 212 of file rename.cc.

References decodeQueue, decodeToRenameDelay, and fromDecode.

◆ setFreeList()

void gem5::o3::Rename::setFreeList ( UnifiedFreeList fl_ptr)

Sets pointer to the free list.

Definition at line 293 of file rename.cc.

References freeList.

◆ setIEWStage()

void gem5::o3::Rename::setIEWStage ( IEW iew_stage)
inline

Sets pointer to IEW stage.

Used only for initialization.

Definition at line 146 of file rename.hh.

References iew_ptr.

◆ setRenameMap()

void gem5::o3::Rename::setRenameMap ( UnifiedRenameMap  rm_ptr[MaxThreads])

Sets pointer to rename maps (per-thread structures).

Definition at line 286 of file rename.cc.

References numThreads, and renameMap.

◆ setRenameQueue()

void gem5::o3::Rename::setRenameQueue ( TimeBuffer< RenameStruct > *  rq_ptr)

Sets pointer to time buffer used to communicate to the next stage.

Definition at line 203 of file rename.cc.

References renameQueue, and toIEW.

◆ setScoreboard()

void gem5::o3::Rename::setScoreboard ( Scoreboard _scoreboard)

Sets pointer to the scoreboard.

Definition at line 299 of file rename.cc.

References scoreboard.

◆ setTimeBuffer()

void gem5::o3::Rename::setTimeBuffer ( TimeBuffer< TimeStruct > *  tb_ptr)

Sets the main backwards communication time buffer pointer.

Definition at line 188 of file rename.cc.

References commitToRenameDelay, fromCommit, fromIEW, iewToRenameDelay, timeBuffer, and toDecode.

◆ skidInsert()

void gem5::o3::Rename::skidInsert ( ThreadID  tid)
private

Inserts unused instructions from a given thread into the skid buffer, to be renamed once rename unblocks.

Definition at line 757 of file rename.cc.

References DPRINTF, insts, panic, skidBuffer, skidBufferMax, gem5::o3::Rename::RenameStats::skidInsts, stats, and warn.

Referenced by block(), and rename().

◆ skidsEmpty()

bool gem5::o3::Rename::skidsEmpty ( )
private

Returns if all of the skid buffers are empty.

Definition at line 805 of file rename.cc.

References activeThreads, and skidBuffer.

◆ sortInsts()

void gem5::o3::Rename::sortInsts ( )
private

Separates instructions from decode into individual lists of instructions sorted by thread.

Definition at line 790 of file rename.cc.

References gem5::curTick(), fromDecode, gem5::ArmISA::i, and insts.

Referenced by tick().

◆ squash()

void gem5::o3::Rename::squash ( const InstSeqNum squash_seq_num,
ThreadID  tid 
)

◆ startupStage()

void gem5::o3::Rename::startupStage ( )

Initializes variables for the stage.

Definition at line 221 of file rename.cc.

References resetStage().

Referenced by gem5::o3::CPU::startup().

◆ takeOverFrom()

void gem5::o3::Rename::takeOverFrom ( )

Takes over from another CPU's thread.

Definition at line 319 of file rename.cc.

References resetStage().

Referenced by gem5::o3::CPU::takeOverFrom().

◆ tick()

void gem5::o3::Rename::tick ( )

Ticks rename, which processes all input signals and attempts to rename as many instructions as possible.

Definition at line 389 of file rename.cc.

References activeThreads, gem5::o3::CPU::activityThisCycle(), blockThisCycle, checkSignalsAndUpdate(), cpu, DPRINTF, fromCommit, fromIEW, instsInProgress, loadsInProgress, numThreads, removeFromHistory(), rename(), renameStatus, sortInsts(), Squashing, storesInProgress, toIEWIndex, updateStatus(), and wroteToTimeBuffer.

Referenced by gem5::o3::CPU::tick().

◆ unblock()

bool gem5::o3::Rename::unblock ( ThreadID  tid)
private

Switches rename to unblocking if the skid buffer is empty, and signals back that rename has unblocked.

Returns
Returns true if there is a status change.

Definition at line 892 of file rename.cc.

References DPRINTF, renameStatus, Running, SerializeStall, skidBuffer, toDecode, and wroteToTimeBuffer.

Referenced by checkSignalsAndUpdate(), and rename().

◆ updateStatus()

void gem5::o3::Rename::updateStatus ( )
private

Updates overall rename status based on all of the threads' statuses.

Definition at line 821 of file rename.cc.

References _status, gem5::o3::CPU::activateStage(), Active, activeThreads, cpu, gem5::o3::CPU::deactivateStage(), DPRINTF, Inactive, gem5::o3::CPU::RenameIdx, renameStatus, and Unblocking.

Referenced by tick().

◆ validInsts()

unsigned gem5::o3::Rename::validInsts ( )
private

Returns the number of valid instructions coming from decode.

Definition at line 1177 of file rename.cc.

References fromDecode, and gem5::ArmISA::i.

Referenced by rename().

Member Data Documentation

◆ _status

RenameStatus gem5::o3::Rename::_status
private

Rename status.

Definition at line 111 of file rename.hh.

Referenced by resetStage(), and updateStatus().

◆ activeThreads

std::list<ThreadID>* gem5::o3::Rename::activeThreads
private

Pointer to the list of active threads.

Definition at line 363 of file rename.hh.

Referenced by setActiveThreads(), skidsEmpty(), tick(), and updateStatus().

◆ blockThisCycle

bool gem5::o3::Rename::blockThisCycle
private

Whether or not rename needs to block this cycle.

Definition at line 446 of file rename.hh.

Referenced by rename(), renameInsts(), and tick().

◆ commit_ptr

Commit* gem5::o3::Rename::commit_ptr
private

Pointer to commit stage.

Used only for initialization.

Definition at line 160 of file rename.hh.

Referenced by clearStates(), resetStage(), and setCommitStage().

◆ commitToRenameDelay

unsigned gem5::o3::Rename::commitToRenameDelay
private

Delay between commit and rename, in ticks.

Definition at line 435 of file rename.hh.

Referenced by setTimeBuffer().

◆ cpu

CPU* gem5::o3::Rename::cpu
private

Pointer to CPU.

Definition at line 324 of file rename.hh.

Referenced by name(), regProbePoints(), tick(), and updateStatus().

◆ decodeQueue

TimeBuffer<DecodeStruct>* gem5::o3::Rename::decodeQueue
private

Decode instruction queue interface.

Definition at line 345 of file rename.hh.

Referenced by setDecodeQueue().

◆ decodeToRenameDelay

int gem5::o3::Rename::decodeToRenameDelay
private

Delay between decode and rename, in ticks.

Definition at line 432 of file rename.hh.

Referenced by Rename(), and setDecodeQueue().

◆ emptyROB

bool gem5::o3::Rename::emptyROB[MaxThreads]
private

Records if the ROB is empty.

In SMT mode the ROB may be dynamically partitioned between threads, so the ROB must tell rename when it is empty.

Definition at line 408 of file rename.hh.

Referenced by checkStall(), clearStates(), readFreeEntries(), Rename(), renameInsts(), and resetStage().

◆ freeEntries

FreeEntries gem5::o3::Rename::freeEntries[MaxThreads]
private

Per-thread tracking of the number of free entries of back-end structures.

Definition at line 402 of file rename.hh.

Referenced by calcFreeIQEntries(), calcFreeLQEntries(), calcFreeROBEntries(), calcFreeSQEntries(), clearStates(), readFreeEntries(), Rename(), and resetStage().

◆ freeList

UnifiedFreeList* gem5::o3::Rename::freeList
private

Free list interface.

Definition at line 360 of file rename.hh.

Referenced by doSquash(), removeFromHistory(), and setFreeList().

◆ fromCommit

TimeBuffer<TimeStruct>::wire gem5::o3::Rename::fromCommit
private

Wire to get commit's output from backwards time buffer.

Definition at line 333 of file rename.hh.

Referenced by checkSignalsAndUpdate(), readFreeEntries(), setTimeBuffer(), and tick().

◆ fromDecode

TimeBuffer<DecodeStruct>::wire gem5::o3::Rename::fromDecode
private

Wire to get decode's output from decode queue.

Definition at line 348 of file rename.hh.

Referenced by setDecodeQueue(), sortInsts(), squash(), and validInsts().

◆ fromIEW

TimeBuffer<TimeStruct>::wire gem5::o3::Rename::fromIEW
private

Wire to get IEW's output from backwards time buffer.

Definition at line 330 of file rename.hh.

Referenced by calcFreeIQEntries(), calcFreeLQEntries(), calcFreeROBEntries(), calcFreeSQEntries(), readFreeEntries(), readStallSignals(), renameInsts(), setTimeBuffer(), and tick().

◆ historyBuffer

std::list<RenameHistory> gem5::o3::Rename::historyBuffer[MaxThreads]
private

A per-thread list of all destination register renames, used to either undo rename mappings or free old physical registers.

Definition at line 321 of file rename.hh.

Referenced by doSquash(), drainSanityCheck(), dumpHistory(), isDrained(), removeFromHistory(), and renameDestRegs().

◆ iew_ptr

IEW* gem5::o3::Rename::iew_ptr
private

Pointer to IEW stage.

Used only for initialization.

Definition at line 157 of file rename.hh.

Referenced by clearStates(), resetStage(), and setIEWStage().

◆ iewToRenameDelay

int gem5::o3::Rename::iewToRenameDelay
private

Delay between iew and rename, in ticks.

Definition at line 429 of file rename.hh.

Referenced by setTimeBuffer().

◆ insts

InstQueue gem5::o3::Rename::insts[MaxThreads]
private

Queue of all instructions coming from decode this cycle.

Definition at line 351 of file rename.hh.

Referenced by checkSignalsAndUpdate(), drainSanityCheck(), isDrained(), renameInsts(), skidInsert(), sortInsts(), and squash().

◆ instsInProgress

int gem5::o3::Rename::instsInProgress[MaxThreads]
private

Count of instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts.

Definition at line 371 of file rename.hh.

Referenced by calcFreeIQEntries(), calcFreeROBEntries(), checkStall(), clearStates(), drainSanityCheck(), isDrained(), readFreeEntries(), Rename(), renameInsts(), resetStage(), and tick().

◆ loadsInProgress

int gem5::o3::Rename::loadsInProgress[MaxThreads]
private

Count of Load instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts.

Definition at line 376 of file rename.hh.

Referenced by calcFreeLQEntries(), clearStates(), Rename(), renameInsts(), resetStage(), and tick().

◆ numThreads

ThreadID gem5::o3::Rename::numThreads
private

The number of threads active in rename.

Definition at line 457 of file rename.hh.

Referenced by drainSanityCheck(), dumpHistory(), isDrained(), resetStage(), setRenameMap(), and tick().

◆ ppRename

ProbePointArg<DynInstPtr>* gem5::o3::Rename::ppRename
private

To probe when register renaming for an instruction is complete.

Definition at line 119 of file rename.hh.

Referenced by regProbePoints(), and renameInsts().

◆ ppSquashInRename

ProbePointArg<SeqNumRegPair>* gem5::o3::Rename::ppSquashInRename
private

To probe when an instruction is squashed and the register mapping for it needs to be undone.

Definition at line 124 of file rename.hh.

Referenced by doSquash(), and regProbePoints().

◆ renameMap

UnifiedRenameMap* gem5::o3::Rename::renameMap[MaxThreads]
private

◆ renameQueue

TimeBuffer<RenameStruct>* gem5::o3::Rename::renameQueue
private

Rename instruction queue.

Definition at line 339 of file rename.hh.

Referenced by setRenameQueue().

◆ renameStatus

ThreadStatus gem5::o3::Rename::renameStatus[MaxThreads]
private

◆ renameWidth

unsigned gem5::o3::Rename::renameWidth
private

Rename width, in instructions.

Definition at line 438 of file rename.hh.

Referenced by Rename(), and renameInsts().

◆ resumeSerialize

bool gem5::o3::Rename::resumeSerialize
private

Whether or not rename needs to resume a serialize instruction after squashing.

Definition at line 450 of file rename.hh.

Referenced by checkSignalsAndUpdate(), rename(), resetStage(), and squash().

◆ resumeUnblocking

bool gem5::o3::Rename::resumeUnblocking
private

Whether or not rename needs to resume clearing out the skidbuffer after squashing.

Definition at line 454 of file rename.hh.

Referenced by block(), checkSignalsAndUpdate(), rename(), and resetStage().

◆ scoreboard

Scoreboard* gem5::o3::Rename::scoreboard
private

Pointer to the scoreboard.

Definition at line 366 of file rename.hh.

Referenced by renameDestRegs(), renameSrcRegs(), and setScoreboard().

◆ serializeInst

DynInstPtr gem5::o3::Rename::serializeInst[MaxThreads]
private

The serialize instruction that rename has stalled on.

Definition at line 421 of file rename.hh.

Referenced by checkSignalsAndUpdate(), clearStates(), Rename(), renameInsts(), resetStage(), and squash().

◆ serializeOnNextInst

bool gem5::o3::Rename::serializeOnNextInst[MaxThreads]
private

Records if rename needs to serialize on the next instruction for any thread.

Definition at line 426 of file rename.hh.

Referenced by clearStates(), Rename(), renameInsts(), resetStage(), and serializeAfter().

◆ skidBuffer

InstQueue gem5::o3::Rename::skidBuffer[MaxThreads]
private

Skid buffer between rename and decode.

Definition at line 354 of file rename.hh.

Referenced by checkSignalsAndUpdate(), drainSanityCheck(), isDrained(), renameInsts(), skidInsert(), skidsEmpty(), squash(), and unblock().

◆ skidBufferMax

unsigned gem5::o3::Rename::skidBufferMax
private

The maximum skid buffer size.

Definition at line 460 of file rename.hh.

Referenced by Rename(), and skidInsert().

◆ stalls

Stalls gem5::o3::Rename::stalls[MaxThreads]
private

Tracks which stages are telling decode to stall.

Definition at line 418 of file rename.hh.

Referenced by checkStall(), clearStates(), readStallSignals(), Rename(), and resetStage().

◆ stats

gem5::o3::Rename::RenameStats gem5::o3::Rename::stats
private

◆ storesInProgress

int gem5::o3::Rename::storesInProgress[MaxThreads]
private

Count of Store instructions in progress that have been sent off to the IQ and ROB, but are not yet included in their occupancy counts.

Definition at line 381 of file rename.hh.

Referenced by calcFreeSQEntries(), clearStates(), Rename(), renameInsts(), resetStage(), and tick().

◆ timeBuffer

TimeBuffer<TimeStruct>* gem5::o3::Rename::timeBuffer
private

Pointer to main time buffer used for backwards communication.

Definition at line 327 of file rename.hh.

Referenced by setTimeBuffer().

◆ toDecode

TimeBuffer<TimeStruct>::wire gem5::o3::Rename::toDecode
private

Wire to write infromation heading to previous stages.

Definition at line 336 of file rename.hh.

Referenced by block(), rename(), renameInsts(), setTimeBuffer(), squash(), and unblock().

◆ toIEW

TimeBuffer<RenameStruct>::wire gem5::o3::Rename::toIEW
private

Wire to write any information heading to IEW.

Definition at line 342 of file rename.hh.

Referenced by renameInsts(), and setRenameQueue().

◆ toIEWIndex

unsigned gem5::o3::Rename::toIEWIndex
private

The index of the instruction in the time buffer to IEW that rename is currently using.

Definition at line 443 of file rename.hh.

Referenced by renameInsts(), and tick().

◆ wroteToTimeBuffer

bool gem5::o3::Rename::wroteToTimeBuffer
private

Variable that tracks if decode has written to the time buffer this cycle.

Used to tell CPU if there is activity this cycle.

Definition at line 386 of file rename.hh.

Referenced by block(), renameInsts(), squash(), tick(), and unblock().


The documentation for this class was generated from the following files:

Generated on Wed Dec 21 2022 10:24:18 for gem5 by doxygen 1.9.1