diff --git a/src/cpu/o3/rename.cc b/src/cpu/o3/rename.cc index d6c4efe10a..e2b2d1445b 100644 --- a/src/cpu/o3/rename.cc +++ b/src/cpu/o3/rename.cc @@ -656,12 +656,7 @@ Rename::renameInsts(ThreadID tid) // Check here to make sure there are enough destination registers // to rename to. Otherwise block. - if (!renameMap[tid]->canRename(inst->numDestRegs(IntRegClass), - inst->numDestRegs(FloatRegClass), - inst->numDestRegs(VecRegClass), - inst->numDestRegs(VecElemClass), - inst->numDestRegs(VecPredRegClass), - inst->numDestRegs(CCRegClass))) { + if (!renameMap[tid]->canRename(inst)) { DPRINTF(Rename, "Blocking due to " " lack of free physical registers to rename to.\n"); diff --git a/src/cpu/o3/rename_map.cc b/src/cpu/o3/rename_map.cc index 30e4684058..7a18ab56d0 100644 --- a/src/cpu/o3/rename_map.cc +++ b/src/cpu/o3/rename_map.cc @@ -44,6 +44,7 @@ #include #include "arch/vecregs.hh" +#include "cpu/o3/dyn_inst.hh" #include "cpu/reg_class.hh" #include "debug/Rename.hh" @@ -122,5 +123,16 @@ UnifiedRenameMap::init(const BaseISA::RegClasses ®Classes, ccMap.init(regClasses.at(CCRegClass), &(freeList->ccList)); } +bool +UnifiedRenameMap::canRename(DynInstPtr inst) const +{ + return inst->numDestRegs(IntRegClass) <= intMap.numFreeEntries() && + inst->numDestRegs(FloatRegClass) <= floatMap.numFreeEntries() && + inst->numDestRegs(VecRegClass) <= vecMap.numFreeEntries() && + inst->numDestRegs(VecElemClass) <= vecElemMap.numFreeEntries() && + inst->numDestRegs(VecPredRegClass) <= predMap.numFreeEntries() && + inst->numDestRegs(CCRegClass) <= ccMap.numFreeEntries(); +} + } // namespace o3 } // namespace gem5 diff --git a/src/cpu/o3/rename_map.hh b/src/cpu/o3/rename_map.hh index 0e1a6f5030..e5886f133b 100644 --- a/src/cpu/o3/rename_map.hh +++ b/src/cpu/o3/rename_map.hh @@ -47,6 +47,7 @@ #include #include "arch/generic/isa.hh" +#include "cpu/o3/dyn_inst_ptr.hh" #include "cpu/o3/free_list.hh" #include "cpu/o3/regfile.hh" #include "cpu/reg_class.hh" @@ -365,18 +366,7 @@ class UnifiedRenameMap /** * 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 vecPredRegs, - uint32_t ccRegs) const - { - return intRegs <= intMap.numFreeEntries() && - floatRegs <= floatMap.numFreeEntries() && - vectorRegs <= vecMap.numFreeEntries() && - vecElemRegs <= vecElemMap.numFreeEntries() && - vecPredRegs <= predMap.numFreeEntries() && - ccRegs <= ccMap.numFreeEntries(); - } + bool canRename(DynInstPtr inst) const; }; } // namespace o3