gem5  v20.1.0.0
Public Types | Public Member Functions | Private Types | Private Attributes | Static Private Attributes | List of all members
UnifiedRenameMap Class Reference

Unified register rename map for all classes of registers. More...

#include <rename_map.hh>

Public Types

typedef SimpleRenameMap::RenameInfo RenameInfo
 

Public Member Functions

 UnifiedRenameMap ()
 Default constructor. More...
 
 ~UnifiedRenameMap ()
 Destructor. More...
 
void init (PhysRegFile *_regFile, RegIndex _intZeroReg, RegIndex _floatZeroReg, UnifiedFreeList *freeList, VecMode _mode)
 Initializes rename map with given parameters. More...
 
RenameInfo rename (const RegId &arch_reg)
 Tell rename map to get a new free physical register to remap the specified architectural register. More...
 
PhysRegIdPtr lookup (const RegId &arch_reg) const
 Look up the physical register mapped to an architectural register. More...
 
void setEntry (const RegId &arch_reg, PhysRegIdPtr phys_reg)
 Update rename map with a specific mapping. More...
 
unsigned numFreeEntries () const
 Return the minimum number of free entries across all of the register classes. More...
 
unsigned numFreeIntEntries () const
 
unsigned numFreeFloatEntries () const
 
unsigned numFreeVecEntries () const
 
unsigned numFreePredEntries () const
 
unsigned numFreeCCEntries () const
 
bool canRename (uint32_t intRegs, uint32_t floatRegs, uint32_t vectorRegs, uint32_t vecElemRegs, uint32_t vecPredRegs, uint32_t ccRegs) const
 Return whether there are enough registers to serve the request. More...
 
void switchMode (VecMode newVecMode)
 Set vector mode to Full or Elem. More...
 
void switchFreeList (UnifiedFreeList *freeList)
 Switch freeList of registers from Full to Elem or vicevers depending on vecMode (vector renaming mode). More...
 

Private Types

using VecReg = TheISA::VecReg
 
using VecPredReg = TheISA::VecPredReg
 
using VecMode = Enums::VecRegRenameMode
 

Private Attributes

SimpleRenameMap intMap
 The integer register rename map. More...
 
SimpleRenameMap floatMap
 The floating-point register rename map. More...
 
SimpleRenameMap ccMap
 The condition-code register rename map. More...
 
SimpleRenameMap vecMap
 The vector register rename map. More...
 
SimpleRenameMap vecElemMap
 The vector element register rename map. More...
 
SimpleRenameMap predMap
 The predicate register rename map. More...
 
VecMode vecMode
 
PhysRegFileregFile
 The register file object is used only to get PhysRegIdPtr on MiscRegs, as they are stored in it. More...
 

Static Private Attributes

static constexpr uint32_t NVecElems = TheISA::NumVecElemPerVecReg
 

Detailed Description

Unified register rename map for all classes of registers.

Wraps a set of class-specific rename maps. Methods that do not specify a register class (e.g., rename()) take register ids, while methods that do specify a register class (e.g., renameInt()) take register indices.

Definition at line 169 of file rename_map.hh.

Member Typedef Documentation

◆ RenameInfo

Definition at line 205 of file rename_map.hh.

◆ VecMode

using UnifiedRenameMap::VecMode = Enums::VecRegRenameMode
private

Definition at line 194 of file rename_map.hh.

◆ VecPredReg

using UnifiedRenameMap::VecPredReg = TheISA::VecPredReg
private

Definition at line 174 of file rename_map.hh.

◆ VecReg

using UnifiedRenameMap::VecReg = TheISA::VecReg
private

Definition at line 173 of file rename_map.hh.

Constructor & Destructor Documentation

◆ UnifiedRenameMap()

UnifiedRenameMap::UnifiedRenameMap ( )
inline

Default constructor.

init() must be called prior to use.

Definition at line 208 of file rename_map.hh.

◆ ~UnifiedRenameMap()

UnifiedRenameMap::~UnifiedRenameMap ( )
inline

Destructor.

Definition at line 211 of file rename_map.hh.

Member Function Documentation

◆ canRename()

bool UnifiedRenameMap::canRename ( uint32_t  intRegs,
uint32_t  floatRegs,
uint32_t  vectorRegs,
uint32_t  vecElemRegs,
uint32_t  vecPredRegs,
uint32_t  ccRegs 
) const
inline

Return whether there are enough registers to serve the request.

Definition at line 386 of file rename_map.hh.

References ccMap, floatMap, intMap, SimpleRenameMap::numFreeEntries(), predMap, vecElemMap, and vecMap.

◆ init()

void UnifiedRenameMap::init ( PhysRegFile _regFile,
RegIndex  _intZeroReg,
RegIndex  _floatZeroReg,
UnifiedFreeList freeList,
VecMode  _mode 
)

◆ lookup()

PhysRegIdPtr UnifiedRenameMap::lookup ( const RegId arch_reg) const
inline

Look up the physical register mapped to an architectural register.

This version takes a flattened architectural register id and calls the appropriate class-specific rename table.

Parameters
arch_regThe architectural register to look up.
Returns
The physical register it is currently mapped to.

Definition at line 268 of file rename_map.hh.

References ccMap, CCRegClass, RegId::className(), RegId::classValue(), RegId::flatIndex(), floatMap, FloatRegClass, PhysRegFile::getMiscRegId(), intMap, IntRegClass, SimpleRenameMap::lookup(), MiscRegClass, panic, predMap, regFile, VecElemClass, vecElemMap, vecMap, vecMode, VecPredRegClass, and VecRegClass.

Referenced by rename(), and setEntry().

◆ numFreeCCEntries()

unsigned UnifiedRenameMap::numFreeCCEntries ( ) const
inline

Definition at line 380 of file rename_map.hh.

References ccMap, and SimpleRenameMap::numFreeEntries().

◆ numFreeEntries()

unsigned UnifiedRenameMap::numFreeEntries ( ) const
inline

Return the minimum number of free entries across all of the register classes.

The minimum is used so we guarantee that this number of entries is available regardless of which class of registers is requested.

Definition at line 361 of file rename_map.hh.

References floatMap, intMap, SimpleRenameMap::numFreeEntries(), predMap, vecElemMap, vecMap, and vecMode.

◆ numFreeFloatEntries()

unsigned UnifiedRenameMap::numFreeFloatEntries ( ) const
inline

Definition at line 371 of file rename_map.hh.

References floatMap, and SimpleRenameMap::numFreeEntries().

◆ numFreeIntEntries()

unsigned UnifiedRenameMap::numFreeIntEntries ( ) const
inline

Definition at line 370 of file rename_map.hh.

References intMap, and SimpleRenameMap::numFreeEntries().

◆ numFreePredEntries()

unsigned UnifiedRenameMap::numFreePredEntries ( ) const
inline

Definition at line 379 of file rename_map.hh.

References SimpleRenameMap::numFreeEntries(), and predMap.

◆ numFreeVecEntries()

unsigned UnifiedRenameMap::numFreeVecEntries ( ) const
inline

Definition at line 373 of file rename_map.hh.

References SimpleRenameMap::numFreeEntries(), vecElemMap, vecMap, and vecMode.

◆ rename()

RenameInfo UnifiedRenameMap::rename ( const RegId arch_reg)
inline

Tell rename map to get a new free physical register to remap the specified architectural register.

This version takes a RegId and reads the appropriate class-specific rename table.

Parameters
arch_regThe architectural register id to remap.
Returns
A RenameInfo pair indicating both the new and previous physical registers.

Definition at line 228 of file rename_map.hh.

References ccMap, CCRegClass, RegId::className(), RegId::classValue(), floatMap, FloatRegClass, intMap, IntRegClass, lookup(), MiscRegClass, panic, predMap, SimpleRenameMap::rename(), VecElemClass, vecElemMap, vecMap, vecMode, VecPredRegClass, and VecRegClass.

◆ setEntry()

void UnifiedRenameMap::setEntry ( const RegId arch_reg,
PhysRegIdPtr  phys_reg 
)
inline

Update rename map with a specific mapping.

Generally used to roll back to old mappings on a squash. This version takes a flattened architectural register id and calls the appropriate class-specific rename table.

Parameters
arch_regThe architectural register to remap.
phys_regThe physical register to remap it to.

Definition at line 311 of file rename_map.hh.

References ccMap, CCRegClass, RegId::className(), RegId::classValue(), floatMap, FloatRegClass, intMap, IntRegClass, PhysRegId::isCCPhysReg(), PhysRegId::isFloatPhysReg(), PhysRegId::isIntPhysReg(), PhysRegId::isVecPredPhysReg(), PhysRegId::isVectorPhysElem(), PhysRegId::isVectorPhysReg(), lookup(), MiscRegClass, panic, predMap, SimpleRenameMap::setEntry(), VecElemClass, vecElemMap, vecMap, vecMode, VecPredRegClass, and VecRegClass.

Referenced by switchMode().

◆ switchFreeList()

void UnifiedRenameMap::switchFreeList ( UnifiedFreeList freeList)

◆ switchMode()

void UnifiedRenameMap::switchMode ( VecMode  newVecMode)

Set vector mode to Full or Elem.

Ignore 'silent' modifications.

Parameters
newVecModenew vector renaming mode

Definition at line 173 of file rename_map.cc.

References PhysRegFile::getRegElemIds(), PhysRegFile::getRegIds(), PhysRegFile::getTrueId(), ArmISA::i, MipsISA::l, SimpleRenameMap::lookup(), ArmISA::NumVecRegs, NVecElems, PhysRegFile::readVecElem(), regFile, setEntry(), PhysRegFile::setVecReg(), VecElemClass, vecElemMap, vecMap, vecMode, and VecRegClass.

Member Data Documentation

◆ ccMap

SimpleRenameMap UnifiedRenameMap::ccMap
private

The condition-code register rename map.

Definition at line 183 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeCCEntries(), rename(), and setEntry().

◆ floatMap

SimpleRenameMap UnifiedRenameMap::floatMap
private

The floating-point register rename map.

Definition at line 180 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeEntries(), numFreeFloatEntries(), rename(), and setEntry().

◆ intMap

SimpleRenameMap UnifiedRenameMap::intMap
private

The integer register rename map.

Definition at line 177 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeEntries(), numFreeIntEntries(), rename(), and setEntry().

◆ NVecElems

constexpr uint32_t UnifiedRenameMap::NVecElems = TheISA::NumVecElemPerVecReg
staticconstexprprivate

Definition at line 172 of file rename_map.hh.

Referenced by init(), and switchMode().

◆ predMap

SimpleRenameMap UnifiedRenameMap::predMap
private

The predicate register rename map.

Definition at line 192 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeEntries(), numFreePredEntries(), rename(), and setEntry().

◆ regFile

PhysRegFile* UnifiedRenameMap::regFile
private

The register file object is used only to get PhysRegIdPtr on MiscRegs, as they are stored in it.

Definition at line 201 of file rename_map.hh.

Referenced by init(), lookup(), switchFreeList(), and switchMode().

◆ vecElemMap

SimpleRenameMap UnifiedRenameMap::vecElemMap
private

The vector element register rename map.

Definition at line 189 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeEntries(), numFreeVecEntries(), rename(), setEntry(), and switchMode().

◆ vecMap

SimpleRenameMap UnifiedRenameMap::vecMap
private

The vector register rename map.

Definition at line 186 of file rename_map.hh.

Referenced by canRename(), init(), lookup(), numFreeEntries(), numFreeVecEntries(), rename(), setEntry(), and switchMode().

◆ vecMode

VecMode UnifiedRenameMap::vecMode
private

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

Generated on Wed Sep 30 2020 14:02:33 for gem5 by doxygen 1.8.17