test SVP64 major opcode, start checking if it is EXT001 soon
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 31 Jan 2021 20:28:27 +0000 (20:28 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 31 Jan 2021 20:28:27 +0000 (20:28 +0000)
src/soc/decoder/isa/caller.py
src/soc/decoder/selectable_int.py

index c1372a9a550117d37573970f7b7df7cd6dfda0ef..38a439f087d2827280c1ea9ac3669047448f2d20 100644 (file)
@@ -242,14 +242,14 @@ class SVP64RMFields:
 
 
 # SVP64 Prefix fields: see https://libre-soc.org/openpower/sv/svp64/
-class SPP64PrefixFields:
+class SVP64PrefixFields:
     def __init__(self):
         self.insn = SelectableInt(0, 32)
         # 6 bit major opcode EXT001, 2 bits "identifying" (7, 9), 24 SV ReMap
         self.major = FieldSelectableInt(self.insn, tuple(range(0,6)))
         self.pid = FieldSelectableInt(self.insn, (7, 9)) # must be 0b11
         rmfields = [6, 8] + list(range(10,32)) # SVP64 24-bit RM
-        self.rm = FieldSelectableInt(self.spr, rmfields)
+        self.rm = FieldSelectableInt(self.insn, rmfields)
 
 
 class SPR(dict):
@@ -611,6 +611,10 @@ class ISACaller:
         # SVP64.  first, check if the opcode is EXT001
         yield Settle()
         opcode = yield self.dec2.dec.opcode_in
+        pfx = SVP64PrefixFields()
+        pfx.insn.value = opcode
+        major = pfx.major.asint(msb0=True) # MSB0 inversion
+        print ("prefix test: opcode:", major, bin(major))
 
     def execute_one(self):
         """execute one instruction
index 575d1d8713d9fbbd8897cf4dc05ea5018e20161b..53e85036d444619d94f28e03d6f42de6dfcb8c76 100644 (file)
@@ -114,6 +114,13 @@ class FieldSelectableInt:
     def __repr__(self):
         return "FieldSelectableInt(si=%s, br=%s)" % (self.si, self.br)
 
+    def asint(self, msb0=False):
+        res = 0
+        brlen = len(self.br)
+        for i, key in enumerate(self.br):
+            res |= self.si[key].value << ((brlen-i-1) if msb0 else i)
+        return res
+
 
 class FieldSelectableIntTestCase(unittest.TestCase):
     def test_arith(self):