]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Simplify f{max,min} template
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 23 Jan 2026 13:02:16 +0000 (10:02 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 2 Feb 2026 17:34:29 +0000 (14:34 -0300)
On x86_64, it allows the fast path (normal/subnormal inputs) to use maxsd.
With gcc-15 targetting x86_64 for fmax:

* master:

        ucomisd xmm0, xmm1
        jnb     .L1
        ucomisd xmm1, xmm0
        ja      .L13
        [...]
.L13:
        movapd  xmm0, xmm1
.L1:
        ret

* patch;

        ucomisd xmm0, xmm1
        jp      .L2
        maxsd   xmm0, xmm1
        ret

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
math/s_fmax_template.c
math/s_fmin_template.c

index c3ac7d75484c0dc37bfb02cd3c95dec3fa394eca..5921d2b43cd3a875aa67fc09acf8fde946fbd502 100644 (file)
@@ -24,10 +24,8 @@ M_DECL_FUNC (__fmax) (FLOAT x, FLOAT y)
 #if M_USE_BUILTIN (FMAX)
   return M_SUF (__builtin_fmax) (x, y);
 #else
-  if (isgreaterequal (x, y))
-    return x;
-  else if (isless (x, y))
-    return y;
+  if (__glibc_likely (!isunordered (x, y)))
+    return x > y ? x : y;
   else if (issignaling (x) || issignaling (y))
     return x + y;
   else
index f3112a95f58c630752c73fa455650d376768a6d1..e78358c8edcfedb8d4920f55ecda05c461e9a954 100644 (file)
@@ -24,10 +24,8 @@ M_DECL_FUNC (__fmin) (FLOAT x, FLOAT y)
 #if M_USE_BUILTIN (FMIN)
   return M_SUF (__builtin_fmin) (x, y);
 #else
-  if (islessequal (x, y))
-    return x;
-  else if (isgreater (x, y))
-    return y;
+  if (__glibc_likely (!isunordered (x, y)))
+    return x > y ? y : x;
   else if (issignaling (x) || issignaling (y))
     return x + y;
   else