temporary hack-revert, the original is now in branch "paths"
[openpower-isa.git] / src / openpower / sv / svp64.py
index cdf7a85e6e182b826ac458e90dd4c4475ea2130b..a70ae4e9bed78ee703da209d4929bd4934f0e3d6 100644 (file)
@@ -50,9 +50,10 @@ roptions = {}
 for k, v in options.items():
     roptions[v] = k
 
+
 # in nMigen, Record begins at the LSB and fills upwards
 # however in OpenPOWER, numbering is MSB0.  sigh.
-class SVP64REMAP(Record):
+class SVP64SHAPE(Record):
     layout=[("mode"    , 2),
             ("skip"    , 2),
             ("offset"  , 4),
@@ -62,7 +63,7 @@ class SVP64REMAP(Record):
             ("ydimsz"  , 6),
             ("xdimsz"  , 6)]
 
-    """SVP64 SHAPE (REMAP) Record.
+    """SVP64 SHAPE Record.
 
     https://libre-soc.org/openpower/sv/remap/
 
@@ -92,3 +93,48 @@ class SVP64REMAP(Record):
         return [self.mode, self.skip, self.offset, self.invxyz, self.permute,
                 self.zdimsz, self.ydimsz, self.xdimsz]
 
+
+# in nMigen, Record begins at the LSB and fills upwards
+# however in OpenPOWER, numbering is MSB0.  sigh.
+class SVP64REMAP(Record):
+    layout=[
+            ("rsvd"  , 9),
+            ("men"  , 5),
+            ("mo1"    , 2),
+            ("mo0"    , 2),
+            ("mi2"    , 2),
+            ("mi1"    , 2),
+            ("mi0"    , 2),
+            ]
+
+    """SVP64 REMAP Record, for Context Propagation
+
+    https://libre-soc.org/openpower/sv/propagation/
+
+    | Field Name | Field bits | Description                            |
+    |------------|------------|----------------------------------------|
+    | MI0        | `0:1`      | 1st input register SVSHAPE(0-3) index  |
+    | MI1        | `2:3`      | 2nd input register SVSHAPE(0-3) index  |
+    | MI2        | `4:5`      | 3rd input register SVSHAPE(0-3) index  |
+    | MO0        | `6:7`      | 1st output register SVSHAPE(0-3) index |
+    | MO1        | `8:9`      | 2nd output register SVSHAPE(0-3) index |
+    | MEN        | `10:14`    | enables MI0..MO1                       |
+    | RESERVED   | `15:23`    | reserved                               |
+    """
+    def __init__(self, name=None):
+        Record.__init__(self, layout=self.layout, name=name)
+
+    @staticmethod
+    def order(permute):
+        return options[permute]
+
+    @staticmethod
+    def rorder(order):
+        return roptions[tuple(order)]
+
+    def ports(self):
+        return [self.mi0, self.mi1, self.mi2,
+                self.mo0, self.m02,
+                self.men, self.rsvd
+               ]
+