]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/x86_64/fpu/s_fminf.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / x86_64 / fpu / s_fminf.S
index ee9d26740826590c0c075c84f09d43ff6482bf8f..3d832ccaf780f6145a322357f098460230f51e5a 100644 (file)
@@ -1,5 +1,5 @@
 /* Compute minimum of two numbers, regarding NaN as missing argument.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2002.
 
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
+   <https://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
+#include <libm-alias-float.h>
 
        .text
 ENTRY(__fminf)
@@ -27,9 +28,26 @@ ENTRY(__fminf)
        jmp     2f
 
 1:     ucomiss %xmm1, %xmm1    // Is xmm1 a NaN?
-       jp      2f              // then return xmm0
+       jp      3f
+       // xmm0 is a NaN; xmm1 is not.  Test if xmm0 is signaling.
+       movss   %xmm0, -4(%rsp)
+       testb   $0x40, -2(%rsp)
+       jz      4f
        movss   %xmm1, %xmm0    // otherwise return xmm1
+       ret
+
+3:     // xmm1 is a NaN; xmm0 may or may not be.
+       ucomiss %xmm0, %xmm0
+       jp      4f
+       // xmm1 is a NaN; xmm0 is not.  Test if xmm1 is signaling.
+       movss   %xmm1, -4(%rsp)
+       testb   $0x40, -2(%rsp)
+       jz      4f
+       ret
+
+4:     // Both arguments are NaNs, or one is a signaling NaN.
+       addss   %xmm1, %xmm0
 
 2:     ret
 END(__fminf)
-weak_alias (__fminf, fminf)
+libm_alias_float (__fmin, fmin)