29,30c29,30
< #ifndef __CPU_O3_CPU_FREE_LIST_HH__
< #define __CPU_O3_CPU_FREE_LIST_HH__
---
> #ifndef __CPU_O3_FREE_LIST_HH__
> #define __CPU_O3_FREE_LIST_HH__
48,51c48,50
< * Note that
< * while this most likely should be called FreeList, the name "FreeList"
< * is used in a typedef within the CPU Policy, and therefore no class
< * can be named simply "FreeList".
---
> * Note that while this most likely should be called FreeList, the name
> * "FreeList" is used in a typedef within the CPU Policy, and therefore no
> * class can be named simply "FreeList".
78,82d76
< /** DEBUG stuff below. */
< std::vector<int> freeIntRegsScoreboard;
<
< std::vector<bool> freeFloatRegsScoreboard;
<
84c78,86
< SimpleFreeList(unsigned _numLogicalIntRegs,
---
> /** Constructs a free list.
> * @param activeThreads Number of active threads.
> * @param _numLogicalIntRegs Number of logical integer registers.
> * @param _numPhysicalIntRegs Number of physical integer registers.
> * @param _numLogicalFloatRegs Number of logical fp registers.
> * @param _numPhysicalFloatRegs Number of physical fp registers.
> */
> SimpleFreeList(unsigned activeThreads,
> unsigned _numLogicalIntRegs,
88a91,94
> /** Gives the name of the freelist. */
> std::string name() const;
>
> /** Gets a free integer register. */
90a97
> /** Gets a free fp register. */
92a100
> /** Adds a register back to the free list. */
94a103
> /** Adds an integer register back to the free list. */
96a106
> /** Adds a fp register back to the free list. */
98a109
> /** Checks if there are any free integer registers. */
101a113
> /** Checks if there are any free fp registers. */
104a117
> /** Returns the number of free integer registers. */
107a121
> /** Returns the number of free fp registers. */
115c129,130
< DPRINTF(Rename, "FreeList: Trying to get free integer register.\n");
---
> DPRINTF(FreeList, "Trying to get free integer register.\n");
>
124,127d138
< // DEBUG
< assert(freeIntRegsScoreboard[free_reg]);
< freeIntRegsScoreboard[free_reg] = 0;
<
134c145,146
< DPRINTF(Rename, "FreeList: Trying to get free float register.\n");
---
> DPRINTF(FreeList, "Trying to get free float register.\n");
>
143,146d154
< // DEBUG
< assert(freeFloatRegsScoreboard[free_reg]);
< freeFloatRegsScoreboard[free_reg] = 0;
<
153c161
< DPRINTF(Rename, "Freelist: Freeing register %i.\n", freed_reg);
---
> DPRINTF(FreeList,"Freeing register %i.\n", freed_reg);
157,161c165,166
< freeIntRegs.push(freed_reg);
<
< // DEBUG
< assert(freeIntRegsScoreboard[freed_reg] == false);
< freeIntRegsScoreboard[freed_reg] = 1;
---
> if (freed_reg != TheISA::ZeroReg)
> freeIntRegs.push(freed_reg);
163,167c168,169
< freeFloatRegs.push(freed_reg);
<
< // DEBUG
< assert(freeFloatRegsScoreboard[freed_reg] == false);
< freeFloatRegsScoreboard[freed_reg] = 1;
---
> if (freed_reg != (TheISA::ZeroReg + numPhysicalIntRegs))
> freeFloatRegs.push(freed_reg);
174c176
< DPRINTF(Rename, "Freelist: Freeing int register %i.\n", freed_reg);
---
> DPRINTF(FreeList,"Freeing int register %i.\n", freed_reg);
176,179d177
< // DEBUG
< assert(!freeIntRegsScoreboard[freed_reg]);
< freeIntRegsScoreboard[freed_reg] = 1;
<
186c184
< DPRINTF(Rename, "Freelist: Freeing float register %i.\n", freed_reg);
---
> DPRINTF(FreeList,"Freeing float register %i.\n", freed_reg);
188,191d185
< // DEBUG
< assert(!freeFloatRegsScoreboard[freed_reg]);
< freeFloatRegsScoreboard[freed_reg] = 1;
<
195c189
< #endif // __CPU_O3_CPU_FREE_LIST_HH__
---
> #endif // __CPU_O3_FREE_LIST_HH__