free_list.hh (13598:39220222740c) | free_list.hh (13610:5d5404ac6288) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2016 ARM Limited | 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 | 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 |
|
141 /** The list of free condition-code registers. */ 142 SimpleFreeList ccList; 143 144 /** 145 * The register file object is used only to distinguish integer 146 * from floating-point physical register indices. 147 */ 148 PhysRegFile *regFile; --- 29 unchanged lines hidden (view full) --- 178 PhysRegIdPtr getFloatReg() { return floatList.getReg(); } 179 180 /** Gets a free vector register. */ 181 PhysRegIdPtr getVecReg() { return vecList.getReg(); } 182 183 /** Gets a free vector elemenet register. */ 184 PhysRegIdPtr getVecElem() { return vecElemList.getReg(); } 185 | 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 |
|
186 /** Gets a free cc register. */ 187 PhysRegIdPtr getCCReg() { return ccList.getReg(); } 188 189 /** Adds a register back to the free list. */ 190 void addReg(PhysRegIdPtr freed_reg); 191 192 /** Adds a register back to the free list. */ 193 template<class InputIt> --- 8 unchanged lines hidden (view full) --- 202 /** Adds a vector register back to the free list. */ 203 void addVecReg(PhysRegIdPtr freed_reg) { vecList.addReg(freed_reg); } 204 205 /** Adds a vector element register back to the free list. */ 206 void addVecElem(PhysRegIdPtr freed_reg) { 207 vecElemList.addReg(freed_reg); 208 } 209 | 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 |
|
210 /** Adds a cc register back to the free list. */ 211 void addCCReg(PhysRegIdPtr freed_reg) { ccList.addReg(freed_reg); } 212 213 /** Checks if there are any free integer registers. */ 214 bool hasFreeIntRegs() const { return intList.hasFreeRegs(); } 215 216 /** Checks if there are any free fp registers. */ 217 bool hasFreeFloatRegs() const { return floatList.hasFreeRegs(); } 218 219 /** Checks if there are any free vector registers. */ 220 bool hasFreeVecRegs() const { return vecList.hasFreeRegs(); } 221 222 /** Checks if there are any free vector registers. */ 223 bool hasFreeVecElems() const { return vecElemList.hasFreeRegs(); } 224 | 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 |
|
225 /** Checks if there are any free cc registers. */ 226 bool hasFreeCCRegs() const { return ccList.hasFreeRegs(); } 227 228 /** Returns the number of free integer registers. */ 229 unsigned numFreeIntRegs() const { return intList.numFreeRegs(); } 230 231 /** Returns the number of free fp registers. */ 232 unsigned numFreeFloatRegs() const { return floatList.numFreeRegs(); } 233 234 /** Returns the number of free vector registers. */ 235 unsigned numFreeVecRegs() const { return vecList.numFreeRegs(); } 236 237 /** Returns the number of free vector registers. */ 238 unsigned numFreeVecElems() const { return vecElemList.numFreeRegs(); } 239 | 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 |
|
240 /** Returns the number of free cc registers. */ 241 unsigned numFreeCCRegs() const { return ccList.numFreeRegs(); } 242}; 243 244template<class InputIt> 245inline void 246UnifiedFreeList::addRegs(InputIt first, InputIt last) 247{ --- 14 unchanged lines hidden (view full) --- 262 floatList.addRegs(first, last); 263 break; 264 case VecRegClass: 265 vecList.addRegs(first, last); 266 break; 267 case VecElemClass: 268 vecElemList.addRegs(first, last); 269 break; | 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; |
|
270 case CCRegClass: 271 ccList.addRegs(first, last); 272 break; 273 default: 274 panic("Unexpected RegClass (%s)", 275 first->className()); 276 } 277 --- 14 unchanged lines hidden (view full) --- 292 floatList.addReg(freed_reg); 293 break; 294 case VecRegClass: 295 vecList.addReg(freed_reg); 296 break; 297 case VecElemClass: 298 vecElemList.addReg(freed_reg); 299 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; |
|
300 case CCRegClass: 301 ccList.addReg(freed_reg); 302 break; 303 default: 304 panic("Unexpected RegClass (%s)", 305 freed_reg->className()); 306 } 307 --- 15 unchanged lines hidden --- | 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 --- |