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:
parent
fcfc8b8c4f
commit
34715cc691
2 changed files with 6 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -173,6 +173,8 @@ SimpleFreeList::addReg(PhysRegIndex freed_reg)
|
|||
#endif
|
||||
freeFloatRegs.push(freed_reg);
|
||||
}
|
||||
|
||||
//assert(freeIntRegs.size() <= numPhysicalIntRegs);
|
||||
}
|
||||
|
||||
inline void
|
||||
|
|
Loading…
Reference in a new issue