56a57
> #include "enums/VecRegRenameMode.hh"
70a72,75
> public:
> using iterator = Arch2PhysMap::iterator;
> using const_iterator = Arch2PhysMap::const_iterator;
> private:
141a147,160
>
> /** Forward begin/cbegin to the map. */
> /** @{ */
> iterator begin() { return map.begin(); }
> const_iterator begin() const { return map.begin(); }
> const_iterator cbegin() const { return map.cbegin(); }
> /** @} */
>
> /** Forward end/cend to the map. */
> /** @{ */
> iterator end() { return map.end(); }
> const_iterator end() const { return map.end(); }
> const_iterator cend() const { return map.cend(); }
> /** @} */
154a174,175
> static constexpr uint32_t NVecElems = TheISA::NumVecElemPerVecReg;
> using VecReg = TheISA::VecReg;
164a186,194
> /** The vector register rename map */
> SimpleRenameMap vecMap;
>
> /** The vector element register rename map */
> SimpleRenameMap vecElemMap;
>
> using VecMode = Enums::VecRegRenameMode;
> VecMode vecMode;
>
185c215,216
< UnifiedFreeList *freeList);
---
> UnifiedFreeList *freeList,
> VecMode _mode);
201a233,238
> case VecRegClass:
> assert(vecMode == Enums::Full);
> return vecMap.rename(arch_reg);
> case VecElemClass:
> assert(vecMode == Enums::Elem);
> return vecElemMap.rename(arch_reg);
234a272,279
> case VecRegClass:
> assert(vecMode == Enums::Full);
> return vecMap.lookup(arch_reg);
>
> case VecElemClass:
> assert(vecMode == Enums::Elem);
> return vecElemMap.lookup(arch_reg);
>
267a313,322
> case VecRegClass:
> assert(phys_reg->isVectorPhysReg());
> assert(vecMode == Enums::Full);
> return vecMap.setEntry(arch_reg, phys_reg);
>
> case VecElemClass:
> assert(phys_reg->isVectorPhysElem());
> assert(vecMode == Enums::Elem);
> return vecElemMap.setEntry(arch_reg, phys_reg);
>
294c349,352
< return std::min(intMap.numFreeEntries(), floatMap.numFreeEntries());
---
> return std::min(
> std::min(intMap.numFreeEntries(), floatMap.numFreeEntries()),
> vecMode == Enums::Full ? vecMap.numFreeEntries()
> : vecElemMap.numFreeEntries());
296a355,364
> unsigned numFreeIntEntries() const { return intMap.numFreeEntries(); }
> unsigned numFreeFloatEntries() const { return floatMap.numFreeEntries(); }
> unsigned numFreeVecEntries() const
> {
> return vecMode == Enums::Full
> ? vecMap.numFreeEntries()
> : vecElemMap.numFreeEntries();
> }
> unsigned numFreeCCEntries() const { return ccMap.numFreeEntries(); }
>
300c368,369
< bool canRename(uint32_t intRegs, uint32_t floatRegs, uint32_t ccRegs) const
---
> bool canRename(uint32_t intRegs, uint32_t floatRegs, uint32_t vectorRegs,
> uint32_t vecElemRegs, uint32_t ccRegs) const
303a373,374
> vectorRegs <= vecMap.numFreeEntries() &&
> vecElemRegs <= vecElemMap.numFreeEntries() &&
305a377,381
> /**
> * Set vector mode to Full or Elem.
> * Ignore 'silent' modifications.
> */
> void switchMode(VecMode newVecMode, UnifiedFreeList* freeList);