Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/51233 )

Change subject: arch-arm,cpu: Remove all uses of flattenRegId.
......................................................................

arch-arm,cpu: Remove all uses of flattenRegId.

RegIds can now be flattened directly.

Change-Id: I2a603c12bbc586720082363996f303cd3b43ac9c
---
M src/cpu/simple_thread.hh
M src/arch/arm/isa/insts/fp.isa
M src/cpu/o3/rename.cc
M src/arch/arm/isa/insts/misc.isa
M src/arch/arm/isa/insts/data64.isa
M src/cpu/minor/scoreboard.cc
6 files changed, 54 insertions(+), 48 deletions(-)



diff --git a/src/arch/arm/isa/insts/data64.isa b/src/arch/arm/isa/insts/data64.isa
index 6e0847f..456979a 100644
--- a/src/arch/arm/isa/insts/data64.isa
+++ b/src/arch/arm/isa/insts/data64.isa
@@ -323,8 +323,8 @@

     msr_check_code = '''
         auto pre_flat = (MiscRegIndex)snsBankedIndex64(dest, xc->tcBase());
-        MiscRegIndex flat_idx = (MiscRegIndex) xc->tcBase()->
-            flattenRegId(miscRegClass[pre_flat]).index();
+        auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+        auto flat_idx = (MiscRegIndex)isa->flattenMiscIndex(pre_flat);
         CPSR cpsr = Cpsr;
         ExceptionLevel el = (ExceptionLevel) (uint8_t) cpsr.el;
         %s
@@ -332,8 +332,8 @@

     mrs_check_code = '''
         auto pre_flat = (MiscRegIndex)snsBankedIndex64(op1, xc->tcBase());
-        MiscRegIndex flat_idx = (MiscRegIndex) xc->tcBase()->
-            flattenRegId(miscRegClass[pre_flat]).index();
+        auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+        auto flat_idx = (MiscRegIndex)isa->flattenMiscIndex(pre_flat);
         CPSR cpsr = Cpsr;
         ExceptionLevel el = (ExceptionLevel) (uint8_t) cpsr.el;
         %s
@@ -516,8 +516,8 @@
         msrImmPermission = '''
             auto pre_flat =
                 (MiscRegIndex)snsBankedIndex64(dest, xc->tcBase());
-            MiscRegIndex misc_index = (MiscRegIndex) xc->tcBase()->
-                flattenRegId(miscRegClass[pre_flat]).index();
+ auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr()); + auto misc_index = (MiscRegIndex)isa->flattenMiscIndex(pre_flat);

             if (!miscRegInfo[misc_index][MISCREG_IMPLEMENTED]) {
                     return std::make_shared<UndefinedInstruction>(
diff --git a/src/arch/arm/isa/insts/fp.isa b/src/arch/arm/isa/insts/fp.isa
index 43a3214..47af309 100644
--- a/src/arch/arm/isa/insts/fp.isa
+++ b/src/arch/arm/isa/insts/fp.isa
@@ -213,7 +213,7 @@
     if (!isSecure(xc->tcBase()) && (cpsr.mode != MODE_HYP)) {
         HCR hcr = Hcr;
         bool hypTrap = false;
-        switch (xc->tcBase()->flattenRegId(miscRegClass[op1]).index()) {
+        switch (miscRegClass[op1].flatten(*xc->tcBase()->getIsaPtr())) {
           case MISCREG_FPSID:
             hypTrap = hcr.tid0;
             break;
diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa
index f59d714..4f99675 100644
--- a/src/arch/arm/isa/insts/misc.isa
+++ b/src/arch/arm/isa/insts/misc.isa
@@ -889,8 +889,8 @@
     exec_output += PredOpExecute.subst(bfiIop)

     mrc14code = '''
-    MiscRegIndex miscReg = (MiscRegIndex) xc->tcBase()->flattenRegId(
-                               miscRegClass[op1]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(op1);
     auto [can_read, undefined] = canReadCoprocReg(miscReg, Scr, Cpsr,
                                                   xc->tcBase());
     if (!can_read || undefined) {
@@ -914,8 +914,8 @@


     mcr14code = '''
-    MiscRegIndex miscReg = (MiscRegIndex) xc->tcBase()->flattenRegId(
-                               miscRegClass[dest]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(dest);
     auto [can_write, undefined] = canWriteCoprocReg(miscReg, Scr, Cpsr,
                                                     xc->tcBase());
     if (undefined || !can_write) {
@@ -939,9 +939,8 @@

     mrc15code = '''
     int preFlatOp1 = snsBankedIndex(op1, xc->tcBase());
-    MiscRegIndex miscReg = (MiscRegIndex)
-                           xc->tcBase()->flattenRegId(miscRegClass[
-                                                      preFlatOp1]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(preFlatOp1);

     Fault fault = mcrMrc15Trap(miscReg, machInst, xc->tcBase(), imm);

@@ -971,9 +970,8 @@

     mcr15code = '''
     int preFlatDest = snsBankedIndex(dest, xc->tcBase());
-    MiscRegIndex miscReg = (MiscRegIndex)
-                       xc->tcBase()->flattenRegId(miscRegClass[
-                                                  preFlatDest]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(preFlatDest);

     Fault fault = mcrMrc15Trap(miscReg, machInst, xc->tcBase(), imm);

@@ -1004,9 +1002,8 @@

     mrrc15code = '''
     int preFlatOp1 = snsBankedIndex(op1, xc->tcBase());
-    MiscRegIndex miscReg = (MiscRegIndex)
-                           xc->tcBase()->flattenRegId(miscRegClass[
-                                                      preFlatOp1]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(preFlatOp1);

     Fault fault = mcrrMrrc15Trap(miscReg, machInst, xc->tcBase(), imm);

@@ -1036,9 +1033,8 @@

     mcrr15code = '''
     int preFlatDest = snsBankedIndex(dest, xc->tcBase());
-    MiscRegIndex miscReg = (MiscRegIndex)
-                           xc->tcBase()->flattenRegId(miscRegClass[
- preFlatDest]).index();
+    auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+    auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(preFlatDest);

     Fault fault = mcrrMrrc15Trap(miscReg, machInst, xc->tcBase(), imm);

@@ -1114,8 +1110,8 @@

     McrDcCheckCode = '''
         int preFlatDest = snsBankedIndex(dest, xc->tcBase());
-        MiscRegIndex miscReg = (MiscRegIndex) xc->tcBase()->flattenRegId(
-            miscRegClass[preFlatDest]).index();
+        auto *isa = static_cast<ArmISA::ISA *>(xc->tcBase()->getIsaPtr());
+        auto miscReg = (MiscRegIndex)isa->flattenMiscIndex(preFlatDest);

         bool hypTrap = mcrMrc15TrapToHyp(miscReg, xc->tcBase(), imm);

diff --git a/src/cpu/minor/scoreboard.cc b/src/cpu/minor/scoreboard.cc
index 926d01d..2bb6966 100644
--- a/src/cpu/minor/scoreboard.cc
+++ b/src/cpu/minor/scoreboard.cc
@@ -89,13 +89,6 @@
     return ret;
 }

-/** Flatten a RegId, irrespective of what reg type it's pointing to */
-static RegId
-flattenRegIndex(const RegId& reg, ThreadContext *thread_context)
-{
-    return thread_context->flattenRegId(reg);
-}
-
 void
 Scoreboard::markupInstDests(MinorDynInstPtr inst, Cycles retire_time,
     ThreadContext *thread_context, bool mark_unpredictable)
@@ -106,12 +99,13 @@
     StaticInstPtr staticInst = inst->staticInst;
     unsigned int num_dests = staticInst->numDestRegs();

+    auto *isa = thread_context->getIsaPtr();
+
     /** Mark each destination register */
     for (unsigned int dest_index = 0; dest_index < num_dests;
         dest_index++)
     {
-        RegId reg = flattenRegIndex(
-                staticInst->destRegIdx(dest_index), thread_context);
+        RegId reg = staticInst->destRegIdx(dest_index).flatten(*isa);
         Index index;

         if (findIndex(reg, index)) {
@@ -151,9 +145,10 @@
     StaticInstPtr staticInst = inst->staticInst;
     unsigned int num_srcs = staticInst->numSrcRegs();

+    auto *isa = thread_context->getIsaPtr();
+
     for (unsigned int src_index = 0; src_index < num_srcs; src_index++) {
-        RegId reg = flattenRegIndex(staticInst->srcRegIdx(src_index),
-            thread_context);
+        RegId reg = staticInst->srcRegIdx(src_index).flatten(*isa);
         unsigned short int index;

         if (findIndex(reg, index)) {
@@ -233,13 +228,14 @@
             [num_relative_latencies-1];
     }

+    auto *isa = thread_context->getIsaPtr();
+
     /* For each source register, find the latest result */
     unsigned int src_index = 0;
     while (src_index < num_srcs && /* More registers */
         ret /* Still possible */)
     {
-        RegId reg = flattenRegIndex(staticInst->srcRegIdx(src_index),
-            thread_context);
+        RegId reg = staticInst->srcRegIdx(src_index).flatten(*isa);
         unsigned short int index;

         if (findIndex(reg, index)) {
diff --git a/src/cpu/o3/rename.cc b/src/cpu/o3/rename.cc
index 3f3afec..80e73dd 100644
--- a/src/cpu/o3/rename.cc
+++ b/src/cpu/o3/rename.cc
@@ -1007,15 +1007,17 @@
     gem5::ThreadContext *tc = inst->tcBase();
     UnifiedRenameMap *map = renameMap[tid];
     unsigned num_src_regs = inst->numSrcRegs();
+    auto *isa = tc->getIsaPtr();

     // Get the architectual register numbers from the source and
     // operands, and redirect them to the right physical register.
     for (int src_idx = 0; src_idx < num_src_regs; src_idx++) {
         const RegId& src_reg = inst->srcRegIdx(src_idx);
+        const RegId flat_reg = src_reg.flatten(*isa);
         PhysRegIdPtr renamed_reg;

-        renamed_reg = map->lookup(tc->flattenRegId(src_reg));
-        switch (src_reg.classValue()) {
+        renamed_reg = map->lookup(flat_reg);
+        switch (flat_reg.classValue()) {
           case InvalidRegClass:
             break;
           case IntRegClass:
@@ -1036,13 +1038,13 @@
             break;

           default:
-            panic("Invalid register class: %d.", src_reg.classValue());
+            panic("Invalid register class: %d.", flat_reg.classValue());
         }

         DPRINTF(Rename,
                 "[tid:%i] "
                 "Looking up %s arch reg %i, got phys reg %i (%s)\n",
-                tid, src_reg.className(),
+                tid, flat_reg.className(),
                 src_reg.index(), renamed_reg->index(),
                 renamed_reg->className());

@@ -1075,13 +1077,14 @@
     gem5::ThreadContext *tc = inst->tcBase();
     UnifiedRenameMap *map = renameMap[tid];
     unsigned num_dest_regs = inst->numDestRegs();
+    auto *isa = tc->getIsaPtr();

     // Rename the destination registers.
     for (int dest_idx = 0; dest_idx < num_dest_regs; dest_idx++) {
         const RegId& dest_reg = inst->destRegIdx(dest_idx);
         UnifiedRenameMap::RenameInfo rename_result;

-        RegId flat_dest_regid = tc->flattenRegId(dest_reg);
+        RegId flat_dest_regid = dest_reg.flatten(*isa);
         flat_dest_regid.setNumPinnedWrites(dest_reg.getNumPinnedWrites());

         rename_result = map->rename(flat_dest_regid);
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 3ce225b..d996088 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -384,7 +384,7 @@
     RegVal
     getReg(const RegId &arch_reg) const override
     {
-        const RegId reg = flattenRegId(arch_reg);
+        const RegId reg = arch_reg.flatten(*isa);

         const RegIndex idx = reg.index();

@@ -401,7 +401,7 @@
     void
     getReg(const RegId &arch_reg, void *val) const override
     {
-        const RegId reg = flattenRegId(arch_reg);
+        const RegId reg = arch_reg.flatten(*isa);

         const RegIndex idx = reg.index();

@@ -417,7 +417,7 @@
     void *
     getWritableReg(const RegId &arch_reg) override
     {
-        const RegId reg = flattenRegId(arch_reg);
+        const RegId reg = arch_reg.flatten(*isa);
         const RegIndex idx = reg.index();
         auto &reg_file = regFiles[reg.classValue()];

@@ -427,7 +427,7 @@
     void
     setReg(const RegId &arch_reg, RegVal val) override
     {
-        const RegId reg = flattenRegId(arch_reg);
+        const RegId reg = arch_reg.flatten(*isa);

         const RegIndex idx = reg.index();

@@ -445,7 +445,7 @@
     void
     setReg(const RegId &arch_reg, const void *val) override
     {
-        const RegId reg = flattenRegId(arch_reg);
+        const RegId reg = arch_reg.flatten(*isa);

         const RegIndex idx = reg.index();


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/51233
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: I2a603c12bbc586720082363996f303cd3b43ac9c
Gerrit-Change-Number: 51233
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
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