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.25-657-g8466ee1


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  8466ee1cb7c2041d8471dad0aa53af35ab599012 (commit)
      from  9b8f8593e5d919d8ea9a5f21ce7473246651ec2f (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=8466ee1cb7c2041d8471dad0aa53af35ab599012

commit 8466ee1cb7c2041d8471dad0aa53af35ab599012
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date:   Thu Jun 29 15:34:05 2017 -0300

    float128: Add signbit alternative for old compilers
    
    In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
    e.g.: __builtin_signbitf128, before GCC 6.  However, there has never
    been a __builtin_signbitf128 in GCC and the type-generic builtin is
    only available since GCC 6.  For older GCC, this patch defines
    __builtin_signbitf128 to __signbitf128, so that the internal function
    is used instead of the non-existent builtin.
    
    This patch also changes the implementation of __signbitf128, because
    it was reusing the implementation of __signbitl from ldbl-128, which
    calls __builtin_signbitl.  Using the long double version of the
    builtin is not correct on machines where _Float128 is ABI-distinct
    from long double (i.e.: ia64, powerpc64le, x86, x86_84).  The new
    implementation does not rely on builtins when being built with GCC
    versions older than 6.0.
    
    The new code does not currently affect powerpc64le builds, because
    only GCC 6.2 fulfills the requirements from configure.  It might
    affect powerpc64le builds if those requirements are backported to
    older versions of the compiler.  The new code affects x86_64 builds,
    since glibc is supposed to build correctly with older versions of GCC.
    
    Tested for powerpc64le and x86_64.
    
    	* include/math.h (__signbitf128): Define as hidden.
    	* sysdeps/ieee754/float128/s_signbitf128.c (__signbitf128):
    	Reimplement without builtins.
    	* sysdeps/ia64/bits/floatn.h [!__GNUC_PREREQ (6, 0)]
    	(__builtin_signbitf128): Define to __signbitf128.
    	* sysdeps/powerpc/bits/floatn.h: Likewise.
    	* sysdeps/x86/bits/floatn.h: Likewise.

diff --git a/ChangeLog b/ChangeLog
index 08ff793..b6fe639 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-06-30  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>
+
+	* include/math.h (__signbitf128): Define as hidden.
+	* sysdeps/ieee754/float128/s_signbitf128.c (__signbitf128):
+	Reimplement without builtins.
+	* sysdeps/ia64/bits/floatn.h [!__GNUC_PREREQ (6, 0)]
+	(__builtin_signbitf128): Define to __signbitf128.
+	* sysdeps/powerpc/bits/floatn.h: Likewise.
+	* sysdeps/x86/bits/floatn.h: Likewise.
+
 2017-06-30  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
diff --git a/include/math.h b/include/math.h
index a069680..fdb4351 100644
--- a/include/math.h
+++ b/include/math.h
@@ -31,6 +31,7 @@ hidden_proto (__isnanl)
 hidden_proto (__finitef128)
 hidden_proto (__isinff128)
 hidden_proto (__isnanf128)
+hidden_proto (__signbitf128)
 #  endif
 # endif
 
diff --git a/sysdeps/ia64/bits/floatn.h b/sysdeps/ia64/bits/floatn.h
index c7b1df6..dbb6eb2 100644
--- a/sysdeps/ia64/bits/floatn.h
+++ b/sysdeps/ia64/bits/floatn.h
@@ -89,6 +89,14 @@ typedef __float128 _Float128;
 #  define __builtin_nansf128(x) ((_Float128) __builtin_nans (x))
 # endif
 
+/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
+   e.g.: __builtin_signbitf128, before GCC 6.  However, there has never
+   been a __builtin_signbitf128 in GCC and the type-generic builtin is
+   only available since GCC 6.  */
+# if !__GNUC_PREREQ (6, 0)
+#  define __builtin_signbitf128 __signbitf128
+# endif
+
 #endif
 
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/ieee754/float128/s_signbitf128.c b/sysdeps/ieee754/float128/s_signbitf128.c
index 71c1ca3..4ea0103 100644
--- a/sysdeps/ieee754/float128/s_signbitf128.c
+++ b/sysdeps/ieee754/float128/s_signbitf128.c
@@ -1,2 +1,37 @@
+/* Return nonzero value if number is negative.
+   Copyright (C) 2017 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
+   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 <float128_private.h>
-#include "../ldbl-128/s_signbitl.c"
+#include <math.h>
+#include <math_private.h>
+
+/* Once GCC >= 6.0 is required for building glibc, this implementation can
+   be removed and replaced with an inclusion of ldbl-128/s_signbitl.c.  */
+int
+__signbitf128 (_Float128 x)
+{
+#if __GNUC_PREREQ (6, 0)
+  return __builtin_signbit (x);
+#else
+  int64_t e;
+
+  GET_FLOAT128_MSW64 (e, x);
+  return e < 0;
+#endif
+}
+hidden_def (__signbitf128)
diff --git a/sysdeps/powerpc/bits/floatn.h b/sysdeps/powerpc/bits/floatn.h
index be57e70..0ce997c 100644
--- a/sysdeps/powerpc/bits/floatn.h
+++ b/sysdeps/powerpc/bits/floatn.h
@@ -87,6 +87,14 @@ typedef __float128 _Float128;
 #  define __builtin_nansf128 __builtin_nansq
 # endif
 
+/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
+   e.g.: __builtin_signbitf128, before GCC 6.  However, there has never
+   been a __builtin_signbitf128 in GCC and the type-generic builtin is
+   only available since GCC 6.  */
+# if !__GNUC_PREREQ (6, 0)
+#  define __builtin_signbitf128 __signbitf128
+# endif
+
 #endif
 
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/x86/bits/floatn.h b/sysdeps/x86/bits/floatn.h
index 23f7478..f93a9f8 100644
--- a/sysdeps/x86/bits/floatn.h
+++ b/sysdeps/x86/bits/floatn.h
@@ -91,6 +91,14 @@ typedef __float128 _Float128;
 #  define __builtin_nansf128(x) ((_Float128) __builtin_nans (x))
 # endif
 
+/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
+   e.g.: __builtin_signbitf128, before GCC 6.  However, there has never
+   been a __builtin_signbitf128 in GCC and the type-generic builtin is
+   only available since GCC 6.  */
+# if !__GNUC_PREREQ (6, 0)
+#  define __builtin_signbitf128 __signbitf128
+# endif
+
 #endif
 
 #endif /* _BITS_FLOATN_H */

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

Summary of changes:
 ChangeLog                                |   10 ++++++++
 include/math.h                           |    1 +
 sysdeps/ia64/bits/floatn.h               |    8 ++++++
 sysdeps/ieee754/float128/s_signbitf128.c |   37 +++++++++++++++++++++++++++++-
 sysdeps/powerpc/bits/floatn.h            |    8 ++++++
 sysdeps/x86/bits/floatn.h                |    8 ++++++
 6 files changed, 71 insertions(+), 1 deletions(-)


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]