Add fpmin handling to fpmax module
[ieee754fpu.git] / src / ieee754 / fpmax / fpmax.py
index 1987d8ee9baf935b3e8d3e1cef0bf923b6e5aff8..5c91976d65a526177eab4a7e9cbca5959be732f8 100644 (file)
@@ -48,18 +48,24 @@ class FPMAXPipeMod(PipeModBase):
 
         has_nan = Signal()
         comb += has_nan.eq(a1.is_nan | b1.is_nan)
+        both_nan = Signal()
+        comb += both_nan.eq(a1.is_nan & b1.is_nan)
         with m.If(has_nan):
-            comb += z1.eq(Mux(a1.is_nan, self.i.b, self.i.a))
+            with m.If(both_nan):
+                comb += z1.eq(a1.fp.nan2(0))
+            with m.Else():
+                comb += z1.eq(Mux(a1.is_nan, self.i.b, self.i.a))
         with m.Else():
             with m.If(a1.s != b1.s):
                 
-                comb += z1.eq(Mux(a1.s, self.i.b, self.i.a))
+                comb += z1.eq(Mux(a1.s ^ opcode[0], self.i.b, self.i.a))
             with m.Else():
                 gt = Signal()
                 sign = Signal()
                 comb += sign.eq(a1.s)
                 comb += gt.eq(a1.v > b1.v)
-                comb += z1.eq(Mux(gt ^ sign, self.i.a, self.i.b))
+                comb += z1.eq(Mux(gt ^ sign ^ opcode[0],
+                                  self.i.a, self.i.b))
                               
 
         # copy the context (muxid, operator)