From 6497a1d081505a2d0b50e06fcdca71d5f0a11192 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 26 Sep 2004 10:11:59 +0000 Subject: [PATCH] [BZ #376] Update. * sysdeps/generic/s_fdim.c: Handle +inf/+inf * sysdeps/generic/s_fdimf.c: Likewise. * sysdeps/generic/s_fdiml.c: Likewise. * sysdeps/i386/i686/fpu/s_fdim.S: Likewise. * sysdeps/i386/i686/fpu/s_fdimf.S: Likewise. * sysdeps/i386/i686/fpu/s_fdiml.S: Likewise. * sysdeps/powerpc/fpu/s_fdim.c: Likewise. * sysdeps/powerpc/fpu/s_fdimf.c: Likewise. * sysdeps/x86_64/fpu/s_fdiml.S: Likewise. * math/libm-test.inc (fdim_test): Add test case. [BZ #376]. --- ChangeLog | 11 +++++++++++ math/libm-test.inc | 2 ++ sysdeps/generic/s_fdim.c | 4 ++-- sysdeps/generic/s_fdimf.c | 4 ++-- sysdeps/generic/s_fdiml.c | 4 ++-- sysdeps/i386/i686/fpu/s_fdim.S | 10 ++++++---- sysdeps/i386/i686/fpu/s_fdimf.S | 10 ++++++---- sysdeps/i386/i686/fpu/s_fdiml.S | 10 ++++++---- sysdeps/powerpc/fpu/s_fdim.c | 4 ++-- sysdeps/powerpc/fpu/s_fdimf.c | 4 ++-- sysdeps/x86_64/fpu/s_fdiml.S | 10 ++++++---- 11 files changed, 47 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index f938714..91a59da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2004-09-26 Ulrich Drepper + * sysdeps/generic/s_fdim.c: Handle +inf/+inf + * sysdeps/generic/s_fdimf.c: Likewise. + * sysdeps/generic/s_fdiml.c: Likewise. + * sysdeps/i386/i686/fpu/s_fdim.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdimf.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdiml.S: Likewise. + * sysdeps/powerpc/fpu/s_fdim.c: Likewise. + * sysdeps/powerpc/fpu/s_fdimf.c: Likewise. + * sysdeps/x86_64/fpu/s_fdiml.S: Likewise. + * math/libm-test.inc (fdim_test): Add test case. [BZ #376]. + * sysdeps/generic/bits/types.h: Fix __SQUAD_TYPE and __UQUAD_TYPE for compilers without __GLIBC_HAVE_LONG_LONG. [BZ #362] diff --git a/math/libm-test.inc b/math/libm-test.inc index 729fce9..b23ec84 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -2557,6 +2557,8 @@ fdim_test (void) TEST_ff_f (fdim, nan_value, minus_infty, nan_value); TEST_ff_f (fdim, nan_value, nan_value, nan_value); + TEST_ff_f (fdim, plus_infty, plus_infty, 0); + END (fdim); } diff --git a/sysdeps/generic/s_fdim.c b/sysdeps/generic/s_fdim.c index 201f936..5804e63 100644 --- a/sysdeps/generic/s_fdim.c +++ b/sysdeps/generic/s_fdim.c @@ -1,5 +1,5 @@ /* Return positive difference between arguments. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -31,7 +31,7 @@ __fdim (double x, double y) /* Raise invalid flag. */ return x - y; - return x < y ? 0 : x - y; + return x <= y ? 0 : x - y; } weak_alias (__fdim, fdim) #ifdef NO_LONG_DOUBLE diff --git a/sysdeps/generic/s_fdimf.c b/sysdeps/generic/s_fdimf.c index 64d54b7..2f3ce30 100644 --- a/sysdeps/generic/s_fdimf.c +++ b/sysdeps/generic/s_fdimf.c @@ -1,5 +1,5 @@ /* Return positive difference between arguments. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -31,6 +31,6 @@ __fdimf (float x, float y) /* Raise invalid flag. */ return x - y; - return x < y ? 0 : x - y; + return x <= y ? 0 : x - y; } weak_alias (__fdimf, fdimf) diff --git a/sysdeps/generic/s_fdiml.c b/sysdeps/generic/s_fdiml.c index 83049ae..70246ba 100644 --- a/sysdeps/generic/s_fdiml.c +++ b/sysdeps/generic/s_fdiml.c @@ -1,5 +1,5 @@ /* Return positive difference between arguments. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -31,6 +31,6 @@ __fdiml (long double x, long double y) /* Raise invalid flag. */ return x - y; - return x < y ? 0 : x - y; + return x <= y ? 0 : x - y; } weak_alias (__fdiml, fdiml) diff --git a/sysdeps/i386/i686/fpu/s_fdim.S b/sysdeps/i386/i686/fpu/s_fdim.S index e610973..30ecff4 100644 --- a/sysdeps/i386/i686/fpu/s_fdim.S +++ b/sysdeps/i386/i686/fpu/s_fdim.S @@ -1,5 +1,5 @@ /* Compute positive difference. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -28,12 +28,14 @@ ENTRY(__fdim) fucomi %st(1), %st jp 1f - fsubrp %st, %st(1) + jc 3f + fstp %st(1) fldz - fcomi %st(1), %st - fcmovb %st(1), %st jmp 2f +3: fsubrp %st, %st(1) + ret + 1: fucomi %st(0), %st fcmovnu %st(1), %st 2: fstp %st(1) diff --git a/sysdeps/i386/i686/fpu/s_fdimf.S b/sysdeps/i386/i686/fpu/s_fdimf.S index a22cbe9..888df14 100644 --- a/sysdeps/i386/i686/fpu/s_fdimf.S +++ b/sysdeps/i386/i686/fpu/s_fdimf.S @@ -1,5 +1,5 @@ /* Compute positive difference. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -28,12 +28,14 @@ ENTRY(__fdimf) fucomi %st(1), %st jp 1f - fsubrp %st, %st(1) + jc 3f + fstp %st(1) fldz - fcomi %st(1), %st - fcmovb %st(1), %st jmp 2f +3: fsubrp %st, %st(1) + ret + 1: fucomi %st(0), %st fcmovnu %st(1), %st 2: fstp %st(1) diff --git a/sysdeps/i386/i686/fpu/s_fdiml.S b/sysdeps/i386/i686/fpu/s_fdiml.S index fa3c51e..cb0e26e 100644 --- a/sysdeps/i386/i686/fpu/s_fdiml.S +++ b/sysdeps/i386/i686/fpu/s_fdiml.S @@ -1,5 +1,5 @@ /* Compute positive difference. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -28,12 +28,14 @@ ENTRY(__fdiml) fucomi %st(1), %st jp 1f - fsubrp %st, %st(1) + jc 3f + fstp %st(1) fldz - fcomi %st(1), %st - fcmovb %st(1), %st jmp 2f +3: fsubrp %st, %st(1) + ret + 1: fucomi %st(0), %st fcmovnu %st(1), %st 2: fstp %st(1) diff --git a/sysdeps/powerpc/fpu/s_fdim.c b/sysdeps/powerpc/fpu/s_fdim.c index 165e2ff..2b767ad 100644 --- a/sysdeps/powerpc/fpu/s_fdim.c +++ b/sysdeps/powerpc/fpu/s_fdim.c @@ -1,5 +1,5 @@ /* Return positive difference between arguments. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,7 +22,7 @@ double __fdim (double x, double y) { - return x < y ? 0 : x - y; + return x <= y ? 0 : x - y; } weak_alias (__fdim, fdim) #ifdef NO_LONG_DOUBLE diff --git a/sysdeps/powerpc/fpu/s_fdimf.c b/sysdeps/powerpc/fpu/s_fdimf.c index 997ec89..a27c1e4 100644 --- a/sysdeps/powerpc/fpu/s_fdimf.c +++ b/sysdeps/powerpc/fpu/s_fdimf.c @@ -1,5 +1,5 @@ /* Return positive difference between arguments. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,6 +22,6 @@ float __fdimf (float x, float y) { - return x < y ? 0 : x - y; + return x <= y ? 0 : x - y; } weak_alias (__fdimf, fdimf) diff --git a/sysdeps/x86_64/fpu/s_fdiml.S b/sysdeps/x86_64/fpu/s_fdiml.S index 3460b0f..d63ca00 100644 --- a/sysdeps/x86_64/fpu/s_fdiml.S +++ b/sysdeps/x86_64/fpu/s_fdiml.S @@ -1,5 +1,5 @@ /* Compute positive difference. - Copyright (C) 1997, 1998, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -28,12 +28,14 @@ ENTRY(__fdiml) fucomi %st(1), %st jp 1f - fsubrp %st, %st(1) + jc 3f + fstp %st(1) fldz - fcomi %st(1), %st - fcmovb %st(1), %st jmp 2f +3: fsubrp %st, %st(1) + ret + 1: fucomi %st(0), %st fcmovnu %st(1), %st 2: fstp %st(1) -- 2.7.4