Gabe Black has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/49717 )

Change subject: cpu-o3: Initialize register maps and free lists with loops.
......................................................................

cpu-o3: Initialize register maps and free lists with loops.

Now that these can be referenced by index instead of by a fixed name, we
can manage them more generically using loops.

Change-Id: I7bb7a6b712ee66f22fa809feef4abfcd1851f237
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49717
Reviewed-by: Giacomo Travaglini <[email protected]>
Maintainer: Giacomo Travaglini <[email protected]>
Tested-by: kokoro <[email protected]>
---
M src/cpu/o3/cpu.cc
1 file changed, 34 insertions(+), 66 deletions(-)

Approvals:
  Giacomo Travaglini: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index bc117b9..43a8c55 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -225,53 +225,17 @@
     // Initialize rename map to assign physical registers to the
     // architectural registers for active threads only.
     for (ThreadID tid = 0; tid < active_threads; tid++) {
- for (RegIndex ridx = 0; ridx < regClasses.at(IntRegClass).numRegs();
-                ++ridx) {
-            // Note that we can't use the rename() method because we don't
-            // want special treatment for the zero register at this point
-            PhysRegIdPtr phys_reg = freeList.getReg(IntRegClass);
-            renameMap[tid].setEntry(RegId(IntRegClass, ridx), phys_reg);
- commitRenameMap[tid].setEntry(RegId(IntRegClass, ridx), phys_reg);
-        }
-
- for (RegIndex ridx = 0; ridx < regClasses.at(FloatRegClass).numRegs();
-                ++ridx) {
-            PhysRegIdPtr phys_reg = freeList.getReg(FloatRegClass);
-            renameMap[tid].setEntry(RegId(FloatRegClass, ridx), phys_reg);
-            commitRenameMap[tid].setEntry(
-                    RegId(FloatRegClass, ridx), phys_reg);
-        }
-
-        const size_t numVecs = regClasses.at(VecRegClass).numRegs();
-        /* Initialize the full-vector interface */
-        for (RegIndex ridx = 0; ridx < numVecs; ++ridx) {
-            RegId rid = RegId(VecRegClass, ridx);
-            PhysRegIdPtr phys_reg = freeList.getReg(VecRegClass);
-            renameMap[tid].setEntry(rid, phys_reg);
-            commitRenameMap[tid].setEntry(rid, phys_reg);
-        }
-        /* Initialize the vector-element interface */
-        const size_t numElems = regClasses.at(VecElemClass).numRegs();
-        for (RegIndex ridx = 0; ridx < numElems; ++ridx) {
-            RegId lrid = RegId(VecElemClass, ridx);
-            PhysRegIdPtr phys_elem = freeList.getReg(VecElemClass);
-            renameMap[tid].setEntry(lrid, phys_elem);
-            commitRenameMap[tid].setEntry(lrid, phys_elem);
-        }
-
-        for (RegIndex ridx = 0;
-                ridx < regClasses.at(VecPredRegClass).numRegs(); ++ridx) {
-            PhysRegIdPtr phys_reg = freeList.getReg(VecPredRegClass);
- renameMap[tid].setEntry(RegId(VecPredRegClass, ridx), phys_reg);
-            commitRenameMap[tid].setEntry(
-                    RegId(VecPredRegClass, ridx), phys_reg);
-        }
-
-        for (RegIndex ridx = 0; ridx < regClasses.at(CCRegClass).numRegs();
-                ++ridx) {
-            PhysRegIdPtr phys_reg = freeList.getReg(CCRegClass);
-            renameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg);
- commitRenameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg);
+        for (auto type = (RegClassType)0; type <= CCRegClass;
+                type = (RegClassType)(type + 1)) {
+            for (RegIndex ridx = 0; ridx < regClasses.at(type).numRegs();
+                    ++ridx) {
+ // Note that we can't use the rename() method because we don't + // want special treatment for the zero register at this point
+                RegId rid = RegId(type, ridx);
+                PhysRegIdPtr phys_reg = freeList.getReg(type);
+                renameMap[tid].setEntry(rid, phys_reg);
+                commitRenameMap[tid].setEntry(rid, phys_reg);
+            }
         }
     }

@@ -729,25 +693,13 @@
     //Bind Int Regs to Rename Map
     const auto &regClasses = isa[tid]->regClasses();

- for (RegIndex idx = 0; idx < regClasses.at(IntRegClass).numRegs(); idx++) {
-        PhysRegIdPtr phys_reg = freeList.getReg(IntRegClass);
-        renameMap[tid].setEntry(RegId(IntRegClass, idx), phys_reg);
-        scoreboard.setReg(phys_reg);
-    }
-
-    //Bind Float Regs to Rename Map
-    for (RegIndex idx = 0; idx < regClasses.at(FloatRegClass).numRegs();
-            idx++) {
-        PhysRegIdPtr phys_reg = freeList.getReg(FloatRegClass);
-        renameMap[tid].setEntry(RegId(FloatRegClass, idx), phys_reg);
-        scoreboard.setReg(phys_reg);
-    }
-
-    //Bind condition-code Regs to Rename Map
- for (RegIndex idx = 0; idx < regClasses.at(CCRegClass).numRegs(); idx++) {
-        PhysRegIdPtr phys_reg = freeList.getReg(CCRegClass);
-        renameMap[tid].setEntry(RegId(CCRegClass, idx), phys_reg);
-        scoreboard.setReg(phys_reg);
+    for (auto type = (RegClassType)0; type <= CCRegClass;
+            type = (RegClassType)(type + 1)) {
+ for (RegIndex idx = 0; idx < regClasses.at(type).numRegs(); idx++) {
+            PhysRegIdPtr phys_reg = freeList.getReg(type);
+            renameMap[tid].setEntry(RegId(type, idx), phys_reg);
+            scoreboard.setReg(phys_reg);
+        }
     }

     //Copy Thread Data Into RegFile

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

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I7bb7a6b712ee66f22fa809feef4abfcd1851f237
Gerrit-Change-Number: 49717
Gerrit-PatchSet: 57
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to