Fix offset in removeThread() function so that float registers start freeing up

from the right point (#32 usually) instead of restarting at 0 and double-freeing.

Commented out assert line in free_list.hh that will check for when double-free condition
goes bad.

--HG--
extra : convert_revision : 08d5f9b6a874736e487d101e85c22aaa67bf59ae
This commit is contained in:
Korey Sewell 2008-02-27 16:48:33 -05:00
parent fcfc8b8c4f
commit 34715cc691
2 changed files with 6 additions and 1 deletions

View file

@ -682,7 +682,7 @@ FullO3CPU<Impl>::removeThread(unsigned tid)
}
// Unbind Float Regs from Rename Map
for (int freg = 0; freg < TheISA::NumFloatRegs; freg++) {
for (int freg = TheISA::NumIntRegs; freg < TheISA::NumFloatRegs; freg++) {
PhysRegIndex phys_reg = renameMap[tid].lookup(freg);
scoreboard.unsetReg(phys_reg);
@ -695,8 +695,11 @@ FullO3CPU<Impl>::removeThread(unsigned tid)
decode.squash(tid);
rename.squash(squash_seq_num, tid);
iew.squash(tid);
//iew.ldstQueue.squash(squash_seq_num, tid);
commit.rob->squash(squash_seq_num, tid);
assert(iew.instQueue.getCount(tid) == 0);
assert(iew.ldstQueue.getCount(tid) == 0);
// Reset ROB/IQ/LSQ Entries

View file

@ -173,6 +173,8 @@ SimpleFreeList::addReg(PhysRegIndex freed_reg)
#endif
freeFloatRegs.push(freed_reg);
}
//assert(freeIntRegs.size() <= numPhysicalIntRegs);
}
inline void