add inf special case
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 14 Feb 2019 06:20:23 +0000 (06:20 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 14 Feb 2019 06:20:23 +0000 (06:20 +0000)
src/add/nmigen_add_experiment.py

index dcf7195aa8385b50b0f05795b4f29b4b5911a495..2cb31c98d282eca7589a9d1441dfe0b9d25e0308 100644 (file)
@@ -99,6 +99,22 @@ class FPADD:
                           z[22].eq(1),      # mantissa top bit: 1
                           z[0:22].eq(0)     # mantissa rest: 0b0000...
                     ]
+                # if a is inf return inf
+                with m.Elif(a_e == 128):
+                    m.next = "put_z"
+                    m.d.sync += [
+                        z[31].eq(a_s),    # sign: a_s
+                        z[23:31].eq(255), # exp: 0b11111...
+                        z[0:23].eq(0)     # mantissa rest: 0b0000...
+                    ]
+                    # if a is inf and signs don't match return NaN
+                    with m.If((b_e == 128) & (a_s != b_s)):
+                        m.d.sync += [
+                          z[31].eq(b_s),    # sign: b_s
+                          z[23:31].eq(255), # exp: 0b11111...
+                          z[22].eq(1),      # mantissa top bit: 1
+                          z[0:22].eq(0)     # mantissa rest: 0b0000...
+                        ]
         return m
 
 """