Pau Cabre has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/14035

Change subject: cpu: Fixed PC shifting on LTAGE branch predictor
......................................................................

cpu: Fixed PC shifting on LTAGE branch predictor

The PC needs to be shifted according to the instShiftAmt parameter

Change-Id: I272619c093695b56cf7f8ff7163e3b5d23205d16
Signed-off-by: Pau Cabre <pau.ca...@metempsy.com>
---
M src/cpu/pred/ltage.cc
1 file changed, 10 insertions(+), 7 deletions(-)



diff --git a/src/cpu/pred/ltage.cc b/src/cpu/pred/ltage.cc
index 251fb2e..86b9e99 100644
--- a/src/cpu/pred/ltage.cc
+++ b/src/cpu/pred/ltage.cc
@@ -138,13 +138,14 @@
 int
 LTAGE::bindex(Addr pc_in) const
 {
-    return ((pc_in) & ((ULL(1) << (logSizeBiMP)) - 1));
+    return ((pc_in >> instShiftAmt) & ((ULL(1) << (logSizeBiMP)) - 1));
 }

 int
 LTAGE::lindex(Addr pc_in) const
 {
-    return (((pc_in) & ((ULL(1) << (logSizeLoopPred - 2)) - 1)) << 2);
+    return (((pc_in >> instShiftAmt) &
+             ((ULL(1) << (logSizeLoopPred - 2)) - 1)) << 2);
 }

 int
@@ -171,7 +172,8 @@
     int index;
     int hlen = (histLengths[bank] > 16) ? 16 : histLengths[bank];
     index =
-        (pc) ^ ((pc) >> ((int) abs(tagTableSizes[bank] - bank) + 1)) ^
+        (pc >> instShiftAmt) ^
+ ((pc >> instShiftAmt) >> ((int) abs(tagTableSizes[bank] - bank) + 1)) ^
         threadHistory[tid].computeIndices[bank].comp ^
         F(threadHistory[tid].pathHist, hlen, bank);

@@ -183,8 +185,9 @@
 uint16_t
 LTAGE::gtag(ThreadID tid, Addr pc, int bank) const
 {
-    int tag = (pc) ^ threadHistory[tid].computeTags[0][bank].comp
-                   ^ (threadHistory[tid].computeTags[1][bank].comp << 1);
+    int tag = (pc >> instShiftAmt) ^
+              threadHistory[tid].computeTags[0][bank].comp ^
+              (threadHistory[tid].computeTags[1][bank].comp << 1);

     return (tag & ((ULL(1) << tagWidths[bank]) - 1));
 }
@@ -239,7 +242,7 @@
     bi->loopHit = -1;
     bi->loopPredValid = false;
     bi->loopIndex = lindex(pc);
-    bi->loopTag = ((pc) >> (logSizeLoopPred - 2));
+    bi->loopTag = ((pc) >> (instShiftAmt + logSizeLoopPred - 2));

     for (int i = 0; i < 4; i++) {
         if (ltable[bi->loopIndex + i].tag == bi->loopTag) {
@@ -630,7 +633,7 @@
     BranchInfo* bi = (BranchInfo*)(b);
     ThreadHistory& tHist = threadHistory[tid];
     //  UPDATE HISTORIES
-    bool pathbit = ((branch_pc) & 1);
+    bool pathbit = ((branch_pc >> instShiftAmt) & 1);
     //on a squash, return pointers to this and recompute indices.
     //update user history
     updateGHist(tHist.gHist, taken, tHist.globalHistory, tHist.ptGhist);

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/14035
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I272619c093695b56cf7f8ff7163e3b5d23205d16
Gerrit-Change-Number: 14035
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Cabre <pau.ca...@metempsy.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to