asahi: flush denorms on exact fmin/fmax
authorKarol Herbst <kherbst@redhat.com>
Wed, 18 Oct 2023 12:58:58 +0000 (14:58 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 18 Oct 2023 17:10:02 +0000 (17:10 +0000)
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25788>

src/asahi/compiler/agx_compile.c

index a92ca11..255e480 100644 (file)
@@ -1379,10 +1379,16 @@ agx_emit_alu(agx_builder *b, nir_alu_instr *instr)
    case nir_op_fneg:
       return agx_fmov_to(b, dst, agx_neg(s0));
 
-   case nir_op_fmin:
-      return agx_fcmpsel_to(b, dst, s0, s1, s0, s1, AGX_FCOND_LTN);
-   case nir_op_fmax:
-      return agx_fcmpsel_to(b, dst, s0, s1, s0, s1, AGX_FCOND_GTN);
+   case nir_op_fmin: {
+      agx_index tmp = agx_fcmpsel(b, s0, s1, s0, s1, AGX_FCOND_LTN);
+      /* flush denorms */
+      return agx_fadd_to(b, dst, tmp, agx_negzero());
+   }
+   case nir_op_fmax: {
+      agx_index tmp = agx_fcmpsel(b, s0, s1, s0, s1, AGX_FCOND_GTN);
+      /* flush denorms */
+      return agx_fadd_to(b, dst, tmp, agx_negzero());
+   }
    case nir_op_imin:
       return agx_icmpsel_to(b, dst, s0, s1, s0, s1, AGX_ICOND_SLT);
    case nir_op_imax: