add mask mode to bmask.py
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 22 Jun 2022 14:57:52 +0000 (15:57 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 22 Jun 2022 14:58:34 +0000 (15:58 +0100)
openpower/sv/bmask.py

index d190f06f456f6c85b32dcde27d6aa80073379494..9930d0a3735f22a10ee6ad2c8686301d3bb04fa9 100644 (file)
@@ -1,17 +1,16 @@
 def bmask(mode, RA, RB=None, zero=False):
-    RT = RA if RB is not None and not zero else 0
     mask = RB if RB is not None else 0xffffffffffffffff
-    RA = RA & mask
-    a1 = RA if mode&1 else ~RA
+    ra = RA & mask
+    a1 = ra if mode&1 else ~ra
     mode2 = (mode >> 1) & 0b11
     if mode2 == 0:
-        a2 = -RA
+        a2 = -ra
     if mode2 == 1:
-        a2 = RA-1
+        a2 = ra-1
     if mode2 == 2:
-        a2 = RA+1
+        a2 = ra+1
     if mode2 == 3:
-        a2 = ~(RA+1)
+        a2 = ~(ra+1)
     a1 = a1 & mask
     a2 = a2 & mask
     mode3 = (mode >> 3) & 0b11
@@ -21,9 +20,11 @@ def bmask(mode, RA, RB=None, zero=False):
          RT = a1 & a2
     if mode3 == 2:
          RT = a1 ^ a2
-    return RT & mask
-
-SBF = 0b01010
-SOF = 0b01001
-SIF = 0b10000 # 10011 also works no idea why yet
+    RT &= mask
+    if not zero:
+        RT |= RA & ~mask
+    return RT
 
+SBF = 0b01010 # set before first
+SOF = 0b01001 # set only first
+SIF = 0b10000 # set including first 10011 also works no idea why yet