found the 3 modes sof sif sbf including masked
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 22 Jun 2022 13:21:42 +0000 (14:21 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 22 Jun 2022 13:21:42 +0000 (14:21 +0100)
variants which was easier than expected, whew

openpower/sv/bmask.py
openpower/sv/sif.py

index 4b431837c82aa636c27dc57aea44ea927f67ca72..2d91aee55b322f96476f7c54c823c20aa0c6df13 100644 (file)
@@ -1,6 +1,7 @@
 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
     mode2 = (mode >> 1) & 0b11
     if mode2 == 0:
@@ -22,7 +23,9 @@ def bmask(mode, RA, RB=None, zero=False):
          RT = a1 ^ a2
     return RT & mask
 
-SBF = 0b001110
+SBF = 0b01010
+SOF = 0b01001
+SIF = 0b10000 # 10011 also works no idea why yet
 
 if __name__ == '__main__':
    for SBF in range(32):
index 46f6b4504b8b9fc6227dd5d3fb17f14cf03d2887..0b98982033c740985bae99d5cf4eb28053831163 100644 (file)
@@ -27,7 +27,7 @@ if __name__ == '__main__':
      RT = sif(v3)
      print(bin(v3), bin(v2), bin(RT))
      v3 = 0b10010101 # vmsif.m v2, v3
-     v2 = 0b00000000 # v2
+     v2 = 0b00000001 # v2
      RT = sif(v3)
      print(bin(v3), bin(v2), bin(RT))
      v3 = 0b00000000 # vmsif.m v2, v3