diff --git a/src/cpu/o3/fetch_impl.hh b/src/cpu/o3/fetch_impl.hh index 2c49067607..a2f2b4f8a1 100644 --- a/src/cpu/o3/fetch_impl.hh +++ b/src/cpu/o3/fetch_impl.hh @@ -1404,19 +1404,22 @@ template ThreadID DefaultFetch::iqCount() { - std::priority_queue PQ; + std::priority_queue PQ; + std::map threadMap; list::iterator threads = activeThreads->begin(); list::iterator end = activeThreads->end(); while (threads != end) { ThreadID tid = *threads++; + unsigned iqCount = fromIEW->iewInfo[tid].iqCount; - PQ.push(fromIEW->iewInfo[tid].iqCount); + PQ.push(iqCount); + threadMap[iqCount] = tid; } while (!PQ.empty()) { - ThreadID high_pri = PQ.top(); + ThreadID high_pri = threadMap[PQ.top()]; if (fetchStatus[high_pri] == Running || fetchStatus[high_pri] == IcacheAccessComplete || @@ -1434,19 +1437,22 @@ template ThreadID DefaultFetch::lsqCount() { - std::priority_queue PQ; + std::priority_queue PQ; + std::map threadMap; list::iterator threads = activeThreads->begin(); list::iterator end = activeThreads->end(); while (threads != end) { ThreadID tid = *threads++; + unsigned ldstqCount = fromIEW->iewInfo[tid].ldstqCount; - PQ.push(fromIEW->iewInfo[tid].ldstqCount); + PQ.push(ldstqCount); + threadMap[ldstqCount] = tid; } while (!PQ.empty()) { - ThreadID high_pri = PQ.top(); + ThreadID high_pri = threadMap[PQ.top()]; if (fetchStatus[high_pri] == Running || fetchStatus[high_pri] == IcacheAccessComplete ||