add bfp classification predicates
authorJacob Lifshay <programmerjake@gmail.com>
Fri, 12 May 2023 06:43:41 +0000 (23:43 -0700)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 2 Jun 2023 18:51:18 +0000 (19:51 +0100)
src/openpower/decoder/helpers.py

index 6d4c6d9a4d352267b2fde808b38aa44379c33720..a6d902dfe32c092a268002aaa0dd81b27fcf4f56 100644 (file)
@@ -843,6 +843,46 @@ def log2(val):
     return retval
 
 
+# BFP classification predicates
+# these need to be implemented in python because they work with multiple
+# input types
+def IsInf(v):
+    if isinstance(v, BFPState):
+        return onebit(v.class_.Infinity)
+    # TODO: implement for SelectableInt/int
+    raise NotImplementedError("not yet implemented for non-BFPState values")
+
+
+def IsNaN(v):
+    if isinstance(v, BFPState):
+        return onebit(v.class_.SNaN or v.class_.QNaN)
+    # TODO: implement for SelectableInt/int
+    raise NotImplementedError("not yet implemented for non-BFPState values")
+
+
+def IsNeg(v):
+    if isinstance(v, BFPState):
+        if v.class_.SNaN or v.class_.QNaN or v.class_.Zero:
+            return onebit(0)
+        return onebit(v.sign)
+    # TODO: implement for SelectableInt/int
+    raise NotImplementedError("not yet implemented for non-BFPState values")
+
+
+def IsSNaN(v):
+    if isinstance(v, BFPState):
+        return onebit(v.class_.SNaN)
+    # TODO: implement for SelectableInt/int
+    raise NotImplementedError("not yet implemented for non-BFPState values")
+
+
+def IsZero(v):
+    if isinstance(v, BFPState):
+        return onebit(v.class_.Zero)
+    # TODO: implement for SelectableInt/int
+    raise NotImplementedError("not yet implemented for non-BFPState values")
+
+
 class ISACallerHelper:
     def __init__(self, XLEN, FPSCR):
         self.__XLEN = XLEN