This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.26.9000-1072-gb0a4eca


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  b0a4eca2fcfe2a6bc3cbb3951241c4facc887670 (commit)
       via  4854ddd874d4aafb1ac21f551abda58ac4f9144d (commit)
      from  8a5df95ffa83f525a4f638ead743f4fa2b7fe45a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b0a4eca2fcfe2a6bc3cbb3951241c4facc887670

commit b0a4eca2fcfe2a6bc3cbb3951241c4facc887670
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 3 17:03:48 2018 -0200

    alpha: Remove s_trunc{f} implementation (BZ#22666)
    
    As discussed in libc-alpha [1], alpha trunc{f} implementation uses
    addt/suc and subt/suc and although the Alpha Architecture
    Handbook version 3 states that that ADDx SUBx OUTPUT Exceptions
    (B.3 Mapping to IEEE Standard) should not generate Inexact if INE
    bit is set, the Alpha 21264 [2] chip manual (A.8 IEEE Floating-Point
    Conformance) states that ADDx SUBx OUTPUT does generate inexact
    exception for inexact result regardless.
    
    As Joseph noted [3] to correctly fix it on alpha we need to either
    avoid the instruction or avoid any inexact bit from it being set
    on return from the function (while preserving the inexact bit that
    might be set on the entry to the function).  The later will result
    mf_fpcr followed by a mt_fpcr to get and set the fpcr which will
    defeat the optimization itself.
    
    So the patch just remove the alpha optimized and rely on generic
    implementation.  It fixes the math/test-*-{trunc} on alpha.
    
            [BZ #15479]
            [BZ #22666]
            * sysdeps/alpha/fpu/s_trunc.c: Remove file.
            * sysdeps/alpha/fpu/s_truncf.c: Likewise.
    
    [1] https://sourceware.org/ml/libc-alpha/2018-01/msg00114.html
    [2] https://www.star.bnl.gov/public/daq/HARDWARE/21264_data_sheet.pdf
    [3] https://sourceware.org/ml/libc-alpha/2018-01/msg00086.html
    
    Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

diff --git a/ChangeLog b/ChangeLog
index 41af650..485e526 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 2018-01-03  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	[BZ #15479]
+	[BZ #22666]
+	* sysdeps/alpha/fpu/s_trunc.c: Remove file.
+	* sysdeps/alpha/fpu/s_truncf.c: Likewise.
+
+	[BZ #15479]
 	[BZ #22665]
 	* sysdeps/alpha/fpu/s_ceil.c: Remove file.
 	* sysdeps/alpha/fpu/s_ceilf.c: Likewise.
diff --git a/sysdeps/alpha/fpu/s_trunc.c b/sysdeps/alpha/fpu/s_trunc.c
deleted file mode 100644
index 6ba7297..0000000
--- a/sysdeps/alpha/fpu/s_trunc.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 2007-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-double.h>
-
-
-/* Use the chopped rounding mode conversion instructions to implement trunc. */
-
-double
-__trunc (double x)
-{
-  double two52 = copysign (0x1.0p52, x);
-  double r, tmp;
-
-  if (isgreaterequal (fabs (x), 0x1.0p52))
-    return x;
-
-  __asm (
-	 "addt/suc %2, %3, %1\n\tsubt/suc %1, %3, %0"
-	 : "=&f"(r), "=&f"(tmp)
-	 : "f"(x), "f"(two52));
-
-  /* trunc(-0) == -0, and in general we'll always have the same
-     sign as our input.  */
-  return copysign (r, x);
-}
-
-libm_alias_double (__trunc, trunc)
diff --git a/sysdeps/alpha/fpu/s_truncf.c b/sysdeps/alpha/fpu/s_truncf.c
deleted file mode 100644
index 168c5a4..0000000
--- a/sysdeps/alpha/fpu/s_truncf.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 2007-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <libm-alias-float.h>
-
-
-/* Use the chopped rounding mode conversion instructions to implement trunc. */
-
-float
-__truncf (float x)
-{
-  float two23 = copysignf (0x1.0p23, x);
-  float r, tmp;
-
-  if (isgreaterequal (fabsf (x), 0x1.0p23))
-    return x;
-
-  __asm (
-	 "adds/suc %2, %3, %1\n\tsubs/suc %1, %3, %0"
-	 : "=&f"(r), "=&f"(tmp)
-	 : "f"(x), "f"(two23));
-
-  /* trunc(-0) == -0, and in general we'll always have the same
-     sign as our input.  */
-  return copysignf (r, x);
-}
-
-libm_alias_float (__trunc, trunc)

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=4854ddd874d4aafb1ac21f551abda58ac4f9144d

commit 4854ddd874d4aafb1ac21f551abda58ac4f9144d
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 3 15:36:53 2018 -0200

    alpha: Remove s_ceil{f} and s_floor{f} implementation (BZ#22665)
    
    As discussed in libc-alpha [1], alpha ceil{f} and floor{f}
    implementation uses cvttq/svm and although the Alpha Architecture
    Handbook version 3 states that that CVTfi OUTPUT Exceptions
    (B.3 Mapping to IEEE Standard) should not generate Inexact if INE
    bit is set on fpcr, the Alpha 21264 [1] chip manual (A.8 IEEE
    Floating-Point Conformance) states that CVTfi and CVTif OUTPUT
    does generate inexact exception for inexact result regardless.
    
    As Joseph noted [2] to correctly fix it on alpha we need to either
    avoid the instruction or avoid any inexact bit from it being set
    on return from the function (while preserving the inexact bit that
    might be set on the entry to the function).  The later will result
    mf_fpcr followed by a mt_fpcr to get and set the fpcr which will
    defeat the optimization itself.
    
    So the patch just remove the alpha optimized and rely on generic
    implementation.  It fixes the math/test-*-{ceil,floor} on alpha.
    
    	[BZ #15479]
    	[BZ #22665]
    	* sysdeps/alpha/fpu/s_ceil.c: Remove file.
    	* sysdeps/alpha/fpu/s_ceilf.c: Likewise.
    	* sysdeps/alpha/fpu/s_floor.c: Likewise.
    	* sysdeps/alpha/fpu/s_floorf.c: Likewise.
    
    [1] https://www.star.bnl.gov/public/daq/HARDWARE/21264_data_sheet.pdf
    [2] https://sourceware.org/ml/libc-alpha/2018-01/msg00086.html
    
    Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

diff --git a/ChangeLog b/ChangeLog
index 5be91cf..41af650 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-01-03  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	[BZ #15479]
+	[BZ #22665]
+	* sysdeps/alpha/fpu/s_ceil.c: Remove file.
+	* sysdeps/alpha/fpu/s_ceilf.c: Likewise.
+	* sysdeps/alpha/fpu/s_floor.c: Likewise.
+	* sysdeps/alpha/fpu/s_floorf.c: Likewise.
+
 2018-01-04  Florian Weimer  <fweimer@redhat.com>
 
 	[BZ #22667]
diff --git a/sysdeps/alpha/fpu/s_ceil.c b/sysdeps/alpha/fpu/s_ceil.c
deleted file mode 100644
index 16c8f99..0000000
--- a/sysdeps/alpha/fpu/s_ceil.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-double.h>
-
-/* Use the -inf rounding mode conversion instructions to implement
-   ceil, via something akin to -floor(-x).  This is much faster than
-   playing with the fpcr to achieve +inf rounding mode.  */
-
-double
-__ceil (double x)
-{
-  if (isnan (x))
-    return x + x;
-
-  if (isless (fabs (x), 9007199254740992.0))	/* 1 << DBL_MANT_DIG */
-    {
-      double tmp1, new_x;
-
-      new_x = -x;
-      __asm (
-	     "cvttq/svm %2,%1\n\t"
-	     "cvtqt/m %1,%0\n\t"
-	     : "=f"(new_x), "=&f"(tmp1)
-	     : "f"(new_x));
-
-      /* Fix up the negation we did above, as well as handling -0 properly. */
-      x = copysign(new_x, x);
-    }
-  return x;
-}
-
-libm_alias_double (__ceil, ceil)
diff --git a/sysdeps/alpha/fpu/s_ceilf.c b/sysdeps/alpha/fpu/s_ceilf.c
deleted file mode 100644
index 8561232..0000000
--- a/sysdeps/alpha/fpu/s_ceilf.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <libm-alias-float.h>
-
-/* Use the -inf rounding mode conversion instructions to implement
-   ceil, via something akin to -floor(-x).  This is much faster than
-   playing with the fpcr to achieve +inf rounding mode.  */
-
-float
-__ceilf (float x)
-{
-  if (isnanf (x))
-    return x + x;
-
-  if (isless (fabsf (x), 16777216.0f))	/* 1 << FLT_MANT_DIG */
-    {
-      /* Note that Alpha S_Floating is stored in registers in a
-	 restricted T_Floating format, so we don't even need to
-	 convert back to S_Floating in the end.  The initial
-	 conversion to T_Floating is needed to handle denormals.  */
-
-      float tmp1, tmp2, new_x;
-
-      new_x = -x;
-      __asm ("cvtst/s %3,%2\n\t"
-	     "cvttq/svm %2,%1\n\t"
-	     "cvtqt/m %1,%0\n\t"
-	     : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2)
-	     : "f"(new_x));
-
-      /* Fix up the negation we did above, as well as handling -0 properly. */
-      x = copysignf(new_x, x);
-    }
-  return x;
-}
-
-libm_alias_float (__ceil, ceil)
diff --git a/sysdeps/alpha/fpu/s_floor.c b/sysdeps/alpha/fpu/s_floor.c
deleted file mode 100644
index 285ad36..0000000
--- a/sysdeps/alpha/fpu/s_floor.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-double.h>
-
-
-/* Use the -inf rounding mode conversion instructions to implement
-   floor.  We note when the exponent is large enough that the value
-   must be integral, as this avoids unpleasant integer overflows.  */
-
-double
-__floor (double x)
-{
-  if (isnan (x))
-    return x + x;
-
-  if (isless (fabs (x), 9007199254740992.0))	/* 1 << DBL_MANT_DIG */
-    {
-      double tmp1, new_x;
-
-      __asm (
-	     "cvttq/svm %2,%1\n\t"
-	     "cvtqt/m %1,%0\n\t"
-	     : "=f"(new_x), "=&f"(tmp1)
-	     : "f"(x));
-
-      /* floor(-0) == -0, and in general we'll always have the same
-	 sign as our input.  */
-      x = copysign(new_x, x);
-    }
-  return x;
-}
-
-libm_alias_double (__floor, floor)
diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c
deleted file mode 100644
index a73b3fd..0000000
--- a/sysdeps/alpha/fpu/s_floorf.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <libm-alias-float.h>
-
-
-/* Use the -inf rounding mode conversion instructions to implement
-   floor.  We note when the exponent is large enough that the value
-   must be integral, as this avoids unpleasant integer overflows.  */
-
-float
-__floorf (float x)
-{
-  if (isnanf (x))
-    return x + x;
-
-  if (isless (fabsf (x), 16777216.0f))	/* 1 << FLT_MANT_DIG */
-    {
-      /* Note that Alpha S_Floating is stored in registers in a
-	 restricted T_Floating format, so we don't even need to
-	 convert back to S_Floating in the end.  The initial
-	 conversion to T_Floating is needed to handle denormals.  */
-
-      float tmp1, tmp2, new_x;
-
-      __asm ("cvtst/s %3,%2\n\t"
-	     "cvttq/svm %2,%1\n\t"
-	     "cvtqt/m %1,%0\n\t"
-	     : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2)
-	     : "f"(x));
-
-      /* floor(-0) == -0, and in general we'll always have the same
-	 sign as our input.  */
-      x = copysignf(new_x, x);
-    }
-  return x;
-}
-
-libm_alias_float (__floor, floor)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                    |   14 ++++++++++
 sysdeps/alpha/fpu/s_ceil.c   |   50 --------------------------------------
 sysdeps/alpha/fpu/s_ceilf.c  |   54 -----------------------------------------
 sysdeps/alpha/fpu/s_floor.c  |   51 --------------------------------------
 sysdeps/alpha/fpu/s_floorf.c |   55 ------------------------------------------
 sysdeps/alpha/fpu/s_trunc.c  |   45 ----------------------------------
 sysdeps/alpha/fpu/s_truncf.c |   44 ---------------------------------
 7 files changed, 14 insertions(+), 299 deletions(-)
 delete mode 100644 sysdeps/alpha/fpu/s_ceil.c
 delete mode 100644 sysdeps/alpha/fpu/s_ceilf.c
 delete mode 100644 sysdeps/alpha/fpu/s_floor.c
 delete mode 100644 sysdeps/alpha/fpu/s_floorf.c
 delete mode 100644 sysdeps/alpha/fpu/s_trunc.c
 delete mode 100644 sysdeps/alpha/fpu/s_truncf.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]