summaryrefslogtreecommitdiff
path: root/src/cpu/o3/rename_map.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/rename_map.hh')
-rw-r--r--src/cpu/o3/rename_map.hh25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/cpu/o3/rename_map.hh b/src/cpu/o3/rename_map.hh
index d30668027..5424633e5 100644
--- a/src/cpu/o3/rename_map.hh
+++ b/src/cpu/o3/rename_map.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2016 ARM Limited
+ * Copyright (c) 2015-2017 ARM Limited
* All rights reserved.
*
* The license below extends only to copyright in the software and shall
@@ -172,6 +172,7 @@ class UnifiedRenameMap
private:
static constexpr uint32_t NVecElems = TheISA::NumVecElemPerVecReg;
using VecReg = TheISA::VecReg;
+ using VecPredReg = TheISA::VecPredReg;
/** The integer register rename map */
SimpleRenameMap intMap;
@@ -188,6 +189,9 @@ class UnifiedRenameMap
/** The vector element register rename map */
SimpleRenameMap vecElemMap;
+ /** The predicate register rename map */
+ SimpleRenameMap predMap;
+
using VecMode = Enums::VecRegRenameMode;
VecMode vecMode;
@@ -235,6 +239,8 @@ class UnifiedRenameMap
case VecElemClass:
assert(vecMode == Enums::Elem);
return vecElemMap.rename(arch_reg);
+ case VecPredRegClass:
+ return predMap.rename(arch_reg);
case CCRegClass:
return ccMap.rename(arch_reg);
case MiscRegClass:
@@ -276,6 +282,9 @@ class UnifiedRenameMap
assert(vecMode == Enums::Elem);
return vecElemMap.lookup(arch_reg);
+ case VecPredRegClass:
+ return predMap.lookup(arch_reg);
+
case CCRegClass:
return ccMap.lookup(arch_reg);
@@ -319,6 +328,10 @@ class UnifiedRenameMap
assert(vecMode == Enums::Elem);
return vecElemMap.setEntry(arch_reg, phys_reg);
+ case VecPredRegClass:
+ assert(phys_reg->isVecPredPhysReg());
+ return predMap.setEntry(arch_reg, phys_reg);
+
case CCRegClass:
assert(phys_reg->isCCPhysReg());
return ccMap.setEntry(arch_reg, phys_reg);
@@ -345,10 +358,11 @@ class UnifiedRenameMap
*/
unsigned numFreeEntries() const
{
- return std::min(
+ return std::min(std::min(
std::min(intMap.numFreeEntries(), floatMap.numFreeEntries()),
vecMode == Enums::Full ? vecMap.numFreeEntries()
- : vecElemMap.numFreeEntries());
+ : vecElemMap.numFreeEntries()),
+ predMap.numFreeEntries());
}
unsigned numFreeIntEntries() const { return intMap.numFreeEntries(); }
@@ -359,18 +373,21 @@ class UnifiedRenameMap
? vecMap.numFreeEntries()
: vecElemMap.numFreeEntries();
}
+ unsigned numFreePredEntries() const { return predMap.numFreeEntries(); }
unsigned numFreeCCEntries() const { return ccMap.numFreeEntries(); }
/**
* Return whether there are enough registers to serve the request.
*/
bool canRename(uint32_t intRegs, uint32_t floatRegs, uint32_t vectorRegs,
- uint32_t vecElemRegs, uint32_t ccRegs) const
+ uint32_t vecElemRegs, uint32_t vecPredRegs,
+ uint32_t ccRegs) const
{
return intRegs <= intMap.numFreeEntries() &&
floatRegs <= floatMap.numFreeEntries() &&
vectorRegs <= vecMap.numFreeEntries() &&
vecElemRegs <= vecElemMap.numFreeEntries() &&
+ vecPredRegs <= predMap.numFreeEntries() &&
ccRegs <= ccMap.numFreeEntries();
}
/**