yield f"{indent}{', '.join(map(str, members))}"
+class FFPRRc1BaseRM(BaseRM):
+ def specifiers(self, record, mode):
+ inv = _SelectableInt(value=int(self.inv), bits=1)
+ CR = _SelectableInt(value=int(self.CR), bits=2)
+ mask = int(_selectconcat(inv, CR))
+ predicate = {
+ 0b000: "lt",
+ 0b001: "ge",
+ 0b010: "gt",
+ 0b011: "le",
+ 0b100: "eq",
+ 0b101: "ne",
+ 0b110: "so",
+ 0b111: "ns",
+ }[mask]
+ yield f"{mode}={predicate}"
+
+ yield from super().specifiers(record=record)
+
+
class FFPRRc0BaseRM(BaseRM):
def specifiers(self, record, mode):
if self.RC1:
pass
-class NormalFFRc1RM(NormalBaseRM):
+class NormalFFRc1RM(FFPRRc1BaseRM, NormalBaseRM):
"""normal: Rc=1: ffirst CR sel"""
inv: BaseRM.mode[2]
CR: BaseRM.mode[3, 4]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="ff")
+
class NormalFFRc0RM(FFPRRc0BaseRM, NormalBaseRM):
"""normal: Rc=0: ffirst z/nonz"""
sz: BaseRM.mode[4]
-class NormalPRRc1RM(NormalBaseRM):
+class NormalPRRc1RM(FFPRRc1BaseRM, NormalBaseRM):
"""normal: Rc=1: pred-result CR sel"""
inv: BaseRM.mode[2]
CR: BaseRM.mode[3, 4]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="pr")
+
class NormalPRRc0RM(FFPRRc0BaseRM, ZZBaseRM, NormalBaseRM):
"""normal: Rc=0: pred-result z/nonz"""
pass
-class LDSTImmFFRc1RM(LDSTImmBaseRM):
+class LDSTImmFFRc1RM(FFPRRc1BaseRM, LDSTImmBaseRM):
"""ld/st immediate: Rc=1: ffirst CR sel"""
inv: BaseRM.mode[2]
CR: BaseRM.mode[3, 4]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="ff")
+
class LDSTImmFFRc0RM(FFPRRc0BaseRM, LDSTImmBaseRM):
"""ld/st immediate: Rc=0: ffirst z/nonz"""
sz: BaseRM.mode[3]
-class LDSTImmPRRc1RM(LDSTImmBaseRM):
+class LDSTImmPRRc1RM(FFPRRc1BaseRM, LDSTImmBaseRM):
"""ld/st immediate: Rc=1: pred-result CR sel"""
inv: BaseRM.mode[2]
CR: BaseRM.mode[3, 4]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="pr")
+
class LDSTImmPRRc0RM(FFPRRc0BaseRM, LDSTImmBaseRM):
"""ld/st immediate: Rc=0: pred-result z/nonz"""
inv: BaseRM.mode[2]
CR: BaseRM.mode[3, 4]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="pr")
+
class LDSTIdxPRRc0RM(FFPRRc0BaseRM, ZZBaseRM, LDSTIdxBaseRM):
"""ld/st index: Rc=0: pred-result z/nonz"""
sz: BaseRM[21]
dz: BaseRM[22]
+ def specifiers(self, record):
+ yield from super().specifiers(record=record, mode="ff")
+
class CROpFF5RM(DZBaseRM, SZBaseRM, CROpBaseRM):
"""cr_op: ffirst 5-bit mode"""