35 #include "debug/GPUVRF.hh"
57 uint32_t reservedEntries = 0;
67 reservedEntries += it_free->first;
72 if (reservedEntries == 0)
73 _cout =
"VRF is empty\n";
75 _cout =
"VRF reserves " +
std::to_string(reservedEntries) +
" VGPRs\n";
96 DPRINTF(GPUVRF,
"Can Allocate %d\n",actualSize);
102 uint32_t *reservedPoolSize)
104 uint32_t startIdx = (unsigned)-1;
108 if (it->second >= actualSize) {
110 startIdx = it->first;
112 *reservedPoolSize = actualSize;
118 if (it->second == actualSize) {
124 it->first += actualSize;
125 it->second -= actualSize;
131 DPRINTF(GPUVRF,
"totRegSpace %d allocating Register at %d and"
141 DPRINTF(GPUVRF,
"freeing Region at %d %d, size %d\n",
142 firstIdx,lastIdx,lastIdx-firstIdx);
145 assert(firstIdx < lastIdx);
155 bool wrapAround = (region.first > region.second);
157 return region.second - region.first + 1;
159 return region.second +
poolSize() - region.first + 1;