Sandipan Das has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/40929 )

Change subject: arch-power: Refactor rotate instructions
......................................................................

arch-power: Refactor rotate instructions

This renames the mask span fields and the rotate helper
of the base class.

Change-Id: I120006a0c052fcc34eb154a68d4b7f70a464df65
Signed-off-by: Sandipan Das <[email protected]>
---
M src/arch/power/insts/integer.cc
M src/arch/power/insts/integer.hh
M src/arch/power/isa/decoder.isa
M src/arch/power/isa/formats/integer.isa
4 files changed, 22 insertions(+), 18 deletions(-)



diff --git a/src/arch/power/insts/integer.cc b/src/arch/power/insts/integer.cc
index fc42911..d921b5d 100644
--- a/src/arch/power/insts/integer.cc
+++ b/src/arch/power/insts/integer.cc
@@ -729,7 +729,7 @@
     }

     // Print the shift, mask begin and mask end
-    ss << ", " << sh << ", " << mb << ", " << me;
+    ss << ", " << sh << ", " << maskBeg << ", " << maskEnd;

     return ss.str();
 }
diff --git a/src/arch/power/insts/integer.hh b/src/arch/power/insts/integer.hh
index aab6910..d969362 100644
--- a/src/arch/power/insts/integer.hh
+++ b/src/arch/power/insts/integer.hh
@@ -643,31 +643,33 @@


 /**
- * Class for integer rotate operations.
+ * Class for integer rotate operations with a shift amount obtained
+ * from a register or an immediate and the first and last bits of a
+ * mask obtained from immediates.
  */
 class IntRotateOp : public IntShiftOp
 {
   protected:

-    uint32_t mb;
-    uint32_t me;
     uint32_t fullMask;
+    uint32_t maskBeg;
+    uint32_t maskEnd;

     /// Constructor
     IntRotateOp(const char *mnem, MachInst _machInst, OpClass __opClass)
       : IntShiftOp(mnem, _machInst, __opClass),
-        mb(machInst.mb),
-        me(machInst.me)
+        maskBeg(machInst.mb),
+        maskEnd(machInst.me)
     {
-        if (me >= mb) {
-            fullMask = mask(31 - mb, 31 - me);
+        if (maskEnd >= maskBeg) {
+            fullMask = mask(31 - maskBeg, 31 - maskEnd);
         } else {
-            fullMask = ~mask(31 - (me + 1), 31 - (mb - 1));
+            fullMask = ~mask(31 - (maskEnd + 1), 31 - (maskBeg - 1));
         }
     }

-    uint32_t
-    rotateValue(uint32_t rs, uint32_t shift) const
+    inline uint32_t
+    rotate(uint32_t rs, uint32_t sh) const
     {
         uint32_t n = shift & 31;
         return (rs << n) | (rs >> (32 - n));
diff --git a/src/arch/power/isa/decoder.isa b/src/arch/power/isa/decoder.isa
index e997699..ef66ac9 100644
--- a/src/arch/power/isa/decoder.isa
+++ b/src/arch/power/isa/decoder.isa
@@ -266,9 +266,9 @@
     }

     format IntRotateOp {
-        21: rlwinm({{ Ra = rotateValue(Rs, sh) & fullMask; }});
-        23: rlwnm({{ Ra = rotateValue(Rs, Rb) & fullMask; }});
-        20: rlwimi({{ Ra = (rotateValue(Rs, sh) & fullMask) |
+        21: rlwinm({{ Ra = rotate(Rs, sh) & fullMask; }});
+        23: rlwnm({{ Ra = rotate(Rs, Rb) & fullMask; }});
+        20: rlwimi({{ Ra = (rotate(Rs, sh) & fullMask) |
                            (Ra & ~fullMask); }});
     }

diff --git a/src/arch/power/isa/formats/integer.isa b/src/arch/power/isa/formats/integer.isa
index 571a1b6..bc52340 100644
--- a/src/arch/power/isa/formats/integer.isa
+++ b/src/arch/power/isa/formats/integer.isa
@@ -526,15 +526,17 @@
 }};


-// A special format for rotate instructions which use certain fields
-// from the instruction's binary encoding. We need two versions for each
-// instruction to deal with the Rc bit.
+// Integer instructions with or without immediate that perform rotate
+// operations. All instructions write to Ra and use Rs as a source
+// register. If immediate is not used, Rb is also used as a source
+// register. We need two versions for each instruction to deal with
+// the Rc bit.
 def format IntRotateOp(code, inst_flags = []) {{

     # The result is always in Ra
     dict = {'result':'Ra'}

-    # Setup the code for when Rc is set
+    # Code when Rc is set
     code_rc1 = readXERCode + code + computeCR0Code % dict

     # Generate the first class

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40929
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: I120006a0c052fcc34eb154a68d4b7f70a464df65
Gerrit-Change-Number: 40929
Gerrit-PatchSet: 1
Gerrit-Owner: Sandipan Das <[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