File tree Expand file tree Collapse file tree 3 files changed +23
-6
lines changed
Expand file tree Collapse file tree 3 files changed +23
-6
lines changed Original file line number Diff line number Diff line change @@ -94,14 +94,17 @@ def setKmhV3Params(args, system):
9494 cpu .branchPred .ftq_size = 256
9595 cpu .branchPred .fsq_size = 256
9696
97+ cpu .branchPred .mbtb .resolvedUpdate = True
98+ cpu .branchPred .tage .resolvedUpdate = True
99+
97100 cpu .branchPred .ubtb .enabled = True
98- cpu .branchPred .abtb .enabled = True
101+ cpu .branchPred .abtb .enabled = False
99102 cpu .branchPred .microtage .enabled = False
100103 cpu .branchPred .mbtb .enabled = True
101104 cpu .branchPred .tage .enabled = True
102- cpu .branchPred .ittage .enabled = True
103- cpu .branchPred .mgsc .enabled = True
104- cpu .branchPred .ras .enabled = True
105+ cpu .branchPred .ittage .enabled = False
106+ cpu .branchPred .mgsc .enabled = False
107+ cpu .branchPred .ras .enabled = False
105108
106109 # l1 cache per core
107110 if args .caches :
Original file line number Diff line number Diff line change @@ -1566,7 +1566,7 @@ IEW::SquashCheckAfterExe(DynInstPtr inst)
15661566 uint64_t fsqId = inst->getFsqId ();
15671567 uint64_t pc = inst->getPC ();
15681568 bool found = false ;
1569- for (auto &entry : toFetch-> iewInfo [tid]. resolveQueue ) {
1569+ for (auto &entry : resolveQueue) {
15701570 if (entry.resolvedFSQId == fsqId) {
15711571 entry.resolvedInstPC .push_back (pc);
15721572 found = true ;
@@ -1577,7 +1577,7 @@ IEW::SquashCheckAfterExe(DynInstPtr inst)
15771577 ResolveQueueEntry newEntry;
15781578 newEntry.resolvedFSQId = fsqId;
15791579 newEntry.resolvedInstPC .push_back (pc);
1580- toFetch-> iewInfo [tid]. resolveQueue .push_back (newEntry);
1580+ resolveQueue.push_back (newEntry);
15811581 }
15821582
15831583 if (!fetchRedirect[tid] ||
@@ -1793,6 +1793,13 @@ IEW::executeInsts()
17931793 }
17941794 }
17951795
1796+ sortResolveQueue ();
1797+ if (!resolveQueue.empty ()) {
1798+ ResolveQueueEntry entry = resolveQueue.back ();
1799+ resolveQueue.pop_back ();
1800+ toFetch->iewInfo [tid].resolveQueue .push_back (entry);
1801+ }
1802+
17961803 ldstQueue.executePipeSx ();
17971804
17981805 // Update and record activity if we processed any instructions.
Original file line number Diff line number Diff line change @@ -494,6 +494,13 @@ class IEW
494494 /* * Maximum size of the skid buffer. */
495495 unsigned skidBufferMax;
496496
497+ std::vector<ResolveQueueEntry> resolveQueue;
498+ static inline bool resolveQueueEntryCompare (const ResolveQueueEntry &a, const ResolveQueueEntry &b)
499+ {
500+ return a.resolvedFSQId > b.resolvedFSQId ;
501+ };
502+ inline void sortResolveQueue () { std::sort (resolveQueue.begin (), resolveQueue.end (), resolveQueueEntryCompare); };
503+
497504
498505 struct IEWStats : public statistics ::Group
499506 {
You can’t perform that action at this time.
0 commit comments