1/* |
2 * Copyright (c) 2016-2017 ARM Limited |
3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 122 unchanged lines hidden (view full) --- 133 /** @{ */ 134 /** The list of free vector registers. */ 135 SimpleFreeList vecList; 136 137 /** The list of free vector element registers. */ 138 SimpleFreeList vecElemList; 139 /** @} */ 140 |
141 /** The list of free predicate registers. */ 142 SimpleFreeList predList; 143 |
144 /** The list of free condition-code registers. */ 145 SimpleFreeList ccList; 146 147 /** 148 * The register file object is used only to distinguish integer 149 * from floating-point physical register indices. 150 */ 151 PhysRegFile *regFile; --- 29 unchanged lines hidden (view full) --- 181 PhysRegIdPtr getFloatReg() { return floatList.getReg(); } 182 183 /** Gets a free vector register. */ 184 PhysRegIdPtr getVecReg() { return vecList.getReg(); } 185 186 /** Gets a free vector elemenet register. */ 187 PhysRegIdPtr getVecElem() { return vecElemList.getReg(); } 188 |
189 /** Gets a free predicate register. */ 190 PhysRegIdPtr getVecPredReg() { return predList.getReg(); } 191 |
192 /** Gets a free cc register. */ 193 PhysRegIdPtr getCCReg() { return ccList.getReg(); } 194 195 /** Adds a register back to the free list. */ 196 void addReg(PhysRegIdPtr freed_reg); 197 198 /** Adds a register back to the free list. */ 199 template<class InputIt> --- 8 unchanged lines hidden (view full) --- 208 /** Adds a vector register back to the free list. */ 209 void addVecReg(PhysRegIdPtr freed_reg) { vecList.addReg(freed_reg); } 210 211 /** Adds a vector element register back to the free list. */ 212 void addVecElem(PhysRegIdPtr freed_reg) { 213 vecElemList.addReg(freed_reg); 214 } 215 |
216 /** Adds a predicate register back to the free list. */ 217 void addVecPredReg(PhysRegIdPtr freed_reg) { predList.addReg(freed_reg); } 218 |
219 /** Adds a cc register back to the free list. */ 220 void addCCReg(PhysRegIdPtr freed_reg) { ccList.addReg(freed_reg); } 221 222 /** Checks if there are any free integer registers. */ 223 bool hasFreeIntRegs() const { return intList.hasFreeRegs(); } 224 225 /** Checks if there are any free fp registers. */ 226 bool hasFreeFloatRegs() const { return floatList.hasFreeRegs(); } 227 228 /** Checks if there are any free vector registers. */ 229 bool hasFreeVecRegs() const { return vecList.hasFreeRegs(); } 230 231 /** Checks if there are any free vector registers. */ 232 bool hasFreeVecElems() const { return vecElemList.hasFreeRegs(); } 233 |
234 /** Checks if there are any free predicate registers. */ 235 bool hasFreeVecPredRegs() const { return predList.hasFreeRegs(); } 236 |
237 /** Checks if there are any free cc registers. */ 238 bool hasFreeCCRegs() const { return ccList.hasFreeRegs(); } 239 240 /** Returns the number of free integer registers. */ 241 unsigned numFreeIntRegs() const { return intList.numFreeRegs(); } 242 243 /** Returns the number of free fp registers. */ 244 unsigned numFreeFloatRegs() const { return floatList.numFreeRegs(); } 245 246 /** Returns the number of free vector registers. */ 247 unsigned numFreeVecRegs() const { return vecList.numFreeRegs(); } 248 249 /** Returns the number of free vector registers. */ 250 unsigned numFreeVecElems() const { return vecElemList.numFreeRegs(); } 251 |
252 /** Returns the number of free predicate registers. */ 253 unsigned numFreeVecPredRegs() const { return predList.numFreeRegs(); } 254 |
255 /** Returns the number of free cc registers. */ 256 unsigned numFreeCCRegs() const { return ccList.numFreeRegs(); } 257}; 258 259template<class InputIt> 260inline void 261UnifiedFreeList::addRegs(InputIt first, InputIt last) 262{ --- 14 unchanged lines hidden (view full) --- 277 floatList.addRegs(first, last); 278 break; 279 case VecRegClass: 280 vecList.addRegs(first, last); 281 break; 282 case VecElemClass: 283 vecElemList.addRegs(first, last); 284 break; |
285 case VecPredRegClass: 286 predList.addRegs(first, last); 287 break; |
288 case CCRegClass: 289 ccList.addRegs(first, last); 290 break; 291 default: 292 panic("Unexpected RegClass (%s)", 293 first->className()); 294 } 295 --- 14 unchanged lines hidden (view full) --- 310 floatList.addReg(freed_reg); 311 break; 312 case VecRegClass: 313 vecList.addReg(freed_reg); 314 break; 315 case VecElemClass: 316 vecElemList.addReg(freed_reg); 317 break; |
318 case VecPredRegClass: 319 predList.addReg(freed_reg); 320 break; |
321 case CCRegClass: 322 ccList.addReg(freed_reg); 323 break; 324 default: 325 panic("Unexpected RegClass (%s)", 326 freed_reg->className()); 327 } 328 --- 15 unchanged lines hidden --- |