Sandipan Das has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/40915 )

Change subject: arch-power: Add character compare instructions
......................................................................

arch-power: Add character compare instructions

This adds the following instructions.
  * Compare Ranged Byte (cmprb)
  * Compare Equal Byte (cmpeqb)

Change-Id: I12a9135bf302acd741abe27cb557e8e8bba82edc
Signed-off-by: Sandipan Das <[email protected]>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40915
Reviewed-by: Boris Shingarov <[email protected]>
Maintainer: Boris Shingarov <[email protected]>
Tested-by: kokoro <[email protected]>
---
M src/arch/power/isa/decoder.isa
M src/arch/power/isa/formats/integer.isa
2 files changed, 25 insertions(+), 1 deletion(-)

Approvals:
  Boris Shingarov: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/power/isa/decoder.isa b/src/arch/power/isa/decoder.isa
index 89effee..6e6f6a1 100644
--- a/src/arch/power/isa/decoder.isa
+++ b/src/arch/power/isa/decoder.isa
@@ -313,6 +313,20 @@
             183: stwux({{ Mem_uw = Rs_uw; }});
         }

+        192: IntCompOp::cmprb({{
+            uint32_t src1 = Ra_ub;
+            uint32_t src2 = Rb_uw;
+            uint8_t src2lo = src2 & 0xff;
+            uint8_t src2hi = (src2 >>= 8) & 0xff;
+            uint32_t res = (src2lo <= src1) & (src1 <= src2hi);
+            if (l) {
+                src2lo = (src2 >>= 8) & 0xff;
+                src2hi = (src2 >>= 8) & 0xff;
+                res = ((src2lo <= src1) & (src1 <= src2hi)) | res;
+            }
+            cr = res << 2;
+        }});
+
         format StoreIndexOp {
             214: stdcx({{
                 bool store_performed = false;
@@ -334,6 +348,16 @@
             215: stbx({{ Mem_ub = Rs_ub; }});
         }

+        224: IntCompOp::cmpeqb({{
+            // Based on "Determine if a word has a byte equal to n"
+            // from https://graphics.stanford.edu/~seander/bithacks.html
+            const uint64_t m1 = 0x0101010101010101;
+            const uint64_t m2 = 0x8080808080808080;
+            uint64_t res = Rb ^ (Ra_ub * m1);
+            res = (res - m1) & ~res & m2;
+            cr = (res != 0) << 2;
+        }});
+
         246: MiscOp::dcbtst({{ }});
         247: StoreIndexUpdateOp::stbux({{ Mem_ub = Rs_ub; }});

diff --git a/src/arch/power/isa/formats/integer.isa b/src/arch/power/isa/formats/integer.isa
index 04fe79e..702209f 100644
--- a/src/arch/power/isa/formats/integer.isa
+++ b/src/arch/power/isa/formats/integer.isa
@@ -33,7 +33,7 @@

 let {{

-readXERCode = 'Xer xer = XER;'
+readXERCode = 'GEM5_VAR_USED Xer xer = XER;'

 setXERCode = 'XER = xer;'


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40915
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: I12a9135bf302acd741abe27cb557e8e8bba82edc
Gerrit-Change-Number: 40915
Gerrit-PatchSet: 8
Gerrit-Owner: Sandipan Das <[email protected]>
Gerrit-Reviewer: Boris Shingarov <[email protected]>
Gerrit-Reviewer: Sandipan Das <[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