@@ -92,6 +92,7 @@ IEW::IEW(CPU *_cpu, const BaseO3CPUParams ¶ms)
9292 wbWidth(params.wbWidth),
9393 enableStoreSetTrain(params.enable_storeSet_train),
9494 numThreads(params.numThreads),
95+ resolveQueueSize(params.resolveQueueSize),
9596 iewStats(cpu)
9697{
9798 if (wbWidth > MaxWidth)
@@ -179,6 +180,13 @@ IEW::IEWStats::IEWStats(CPU *cpu)
179180 "Number of branches that were predicted taken incorrectly"),
180181 ADD_STAT(predictedNotTakenIncorrect, statistics::units::Count::get(),
181182 "Number of branches that were predicted not taken incorrectly"),
183+ ADD_STAT(resolveQueueFullCycles, statistics::units::Count::get(),
184+ "Number of cycles the resolve queue is full"),
185+ ADD_STAT(resolveQueueFullEvents, statistics::units::Count::get(),
186+ "Number of events the resolve queue becomes full"),
187+ ADD_STAT(resolveEnqueueFailEvent, statistics::units::Count::get(),
188+ "Number of times an instruction could not be enqueued to the "
189+ "resolve queue"),
182190 ADD_STAT(branchMispredicts, statistics::units::Count::get(),
183191 "Number of branch mispredicts detected at execute",
184192 predictedTakenIncorrect + predictedNotTakenIncorrect),
@@ -1573,11 +1581,21 @@ IEW::SquashCheckAfterExe(DynInstPtr inst)
15731581 }
15741582 }
15751583
1576- if (!found) {
1584+ if (!found && resolveQueue. size () < resolveQueueSize ) {
15771585 ResolveQueueEntry newEntry;
15781586 newEntry.resolvedFSQId = fsqId;
15791587 newEntry.resolvedInstPC .push_back (pc);
15801588 resolveQueue.push_back (newEntry);
1589+ if (resolveQueue.size () == resolveQueueSize) {
1590+ iewStats.resolveQueueFullEvents ++;
1591+ }
1592+ }
1593+
1594+ if (resolveQueue.size () >= resolveQueueSize) {
1595+ if (!found) {
1596+ iewStats.resolveEnqueueFailEvent ++;
1597+ }
1598+ iewStats.resolveQueueFullCycles ++;
15811599 }
15821600
15831601 if (!fetchRedirect[tid] ||
@@ -1793,10 +1811,9 @@ IEW::executeInsts()
17931811 }
17941812 }
17951813
1796- sortResolveQueue ();
17971814 if (!resolveQueue.empty ()) {
1798- ResolveQueueEntry entry = resolveQueue.back ();
1799- resolveQueue.pop_back ( );
1815+ ResolveQueueEntry entry = resolveQueue.front ();
1816+ resolveQueue.erase (resolveQueue. begin () );
18001817 toFetch->iewInfo [tid].resolveQueue .push_back (entry);
18011818 }
18021819
0 commit comments