add NaN FP2int overflow
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 28 Jul 2019 16:48:57 +0000 (17:48 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 28 Jul 2019 16:48:57 +0000 (17:48 +0100)
src/ieee754/fcvt/pipeline.py
src/ieee754/fcvt/test/test_fcvt_f2int_pipe.py
src/ieee754/fpcommon/test/fpmux.py

index f4c70d78e6d52e1bd70fc9f6d7b3700b0e34d43e..5a9eeddc972e30a03665cea505d2bba41918e060 100644 (file)
@@ -104,7 +104,10 @@ class FPCVTFloatToIntMod(Elaboratable):
         m.d.comb += signed.eq(self.i.ctx.op[0])
 
         # special cases
-        with m.If(a1.exp_n127):
+        with m.If(a1.is_nan):
+            m.d.comb += self.o.z.eq((1<<mz)-1) # NaN overflow
+
+        with m.Elif(a1.exp_n127):
             m.d.comb += self.o.z.eq(0)
 
         # unsigned, -ve, return 0
index ac962bebe243923454e5d80c0207885195eb682d..24f3fd03589ef4260b37f08ce1aacd1cfdec85f6 100644 (file)
@@ -31,6 +31,9 @@ def fcvt_64_to_32(x):
 def fcvt_f16_ui32(x):
     return sfpy.float.f16_to_ui32(x)
 
+def fcvt_f16_ui16(x):
+    return sfpy.float.f16_to_ui32(x) & 0xffff
+
 ######################
 # signed int to fp
 ######################
@@ -60,7 +63,7 @@ def test_int_pipe_f16_ui16():
     # XXX softfloat-3 doesn't have ui16_to_xxx so use ui32 instead.
     # should be fine.
     dut = FPCVTF2IntMuxInOut(16, 16, 4, op_wid=1)
-    runfp(dut, 16, "test_fcvt_f2int_pipe_f16_ui16", Float16, fcvt_f16_ui32,
+    runfp(dut, 16, "test_fcvt_f2int_pipe_f16_ui16", Float16, fcvt_f16_ui16,
                 True, n_vals=100)
 
 def test_int_pipe_ui16_f64():
index 64576835919859d7e4a900fff04f355f059d7d6c..028e63504926cc31484523b81c5a51f211638553 100644 (file)
@@ -191,6 +191,7 @@ def create_random(num_rows, width, single_op=False, n_vals=10):
                 #op1 = 0x4dc0
                 #op1 = 0x3b81
                 #op1 = 0xfcb6
+                #op1 = 0x4f8d77b3
 
                 # FCLASS
                 #op1 = 0x87d1