]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/x86_64/fpu/s_fmin.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / x86_64 / fpu / s_fmin.S
index 37a3daaab2e8f1317346925280242c035353010b..d855f9f16a9e82cfd113ad10b7dcb98e8c309d9c 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.
 
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
+#include <libm-alias-double.h>
 
        .text
 ENTRY(__fmin)
@@ -28,9 +28,26 @@ ENTRY(__fmin)
        jmp     2f
 
 1:     ucomisd %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.
+       movsd   %xmm0, -8(%rsp)
+       testb   $0x8, -2(%rsp)
+       jz      4f
        movsd   %xmm1, %xmm0    // otherwise return xmm1
+       ret
+
+3:     // xmm1 is a NaN; xmm0 may or may not be.
+       ucomisd %xmm0, %xmm0
+       jp      4f
+       // xmm1 is a NaN; xmm0 is not.  Test if xmm1 is signaling.
+       movsd   %xmm1, -8(%rsp)
+       testb   $0x8, -2(%rsp)
+       jz      4f
+       ret
+
+4:     // Both arguments are NaNs, or one is a signaling NaN.
+       addsd   %xmm1, %xmm0
 
 2:     ret
 END(__fmin)
-weak_alias (__fmin, fmin)
+libm_alias_double (__fmin, fmin)