power_insn: support vs/vsi/vsb/vsbi specifiers
authorDmitry Selyutin <ghostmansd@gmail.com>
Mon, 21 Nov 2022 17:54:52 +0000 (20:54 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Sun, 15 Jan 2023 19:47:22 +0000 (22:47 +0300)
src/openpower/decoder/power_insn.py

index 5fec824f508ee5c333c84d6feb6414da3cf6315a..a3d4cd47166b79c5ae6baeb0cab24f6e4bd2cdc0 100644 (file)
@@ -2985,6 +2985,58 @@ class SpecifierLRu(SpecifierBranch):
         rm.LRu = 1
 
 
+@_dataclasses.dataclass(eq=True, frozen=True)
+class SpecifierVS(SpecifierBranch):
+    @classmethod
+    def match(cls, desc, record):
+        return super().match(desc=desc, record=record, etalon="vs")
+
+    def assemble(self, insn):
+        rm = insn.prefix.rm.select(record=self.record)
+        rm.VLS = 1
+        rm.VLi = 0
+        rm.VSb = 0
+
+
+@_dataclasses.dataclass(eq=True, frozen=True)
+class SpecifierVSi(SpecifierVS):
+    @classmethod
+    def match(cls, desc, record):
+        return super().match(desc=desc, record=record, etalon="vsi")
+
+    def assemble(self, insn):
+        rm = insn.prefix.rm.select(record=self.record)
+        rm.VLS = 1
+        rm.VLi = 1
+        rm.VSb = 0
+
+
+@_dataclasses.dataclass(eq=True, frozen=True)
+class SpecifierVSb(SpecifierVS):
+    @classmethod
+    def match(cls, desc, record):
+        return super().match(desc=desc, record=record, etalon="vsb")
+
+    def assemble(self, insn):
+        rm = insn.prefix.rm.select(record=self.record)
+        rm.VLS = 1
+        rm.VLi = 0
+        rm.VSb = 1
+
+
+@_dataclasses.dataclass(eq=True, frozen=True)
+class SpecifierVSbi(SpecifierVS):
+    @classmethod
+    def match(cls, desc, record):
+        return super().match(desc=desc, record=record, etalon="vsbi")
+
+    def assemble(self, insn):
+        rm = insn.prefix.rm.select(record=self.record)
+        rm.VLS = 1
+        rm.VLi = 1
+        rm.VSb = 1
+
+
 class Specifiers(tuple):
     SPECS = (
         SpecifierW,
@@ -3010,6 +3062,10 @@ class Specifiers(tuple):
         SpecifierSL,
         SpecifierSLu,
         SpecifierLRu,
+        SpecifierVS,
+        SpecifierVSi,
+        SpecifierVSb,
+        SpecifierVSbi,
     )
 
     def __new__(cls, items, record):