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-618-g797ba44


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  797ba44ba27521261f94cc521f1c2ca74f650147 (commit)
      from  8f6f5362727dc93360fe37e6d4e964f386b7b8e7 (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=797ba44ba27521261f94cc521f1c2ca74f650147

commit 797ba44ba27521261f94cc521f1c2ca74f650147
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Fri Oct 20 21:42:51 2017 +0000

    Add bits/floatn.h defines for more _FloatN / _FloatNx types.
    
    The bits/floatn.h header currently only has defines relating to
    _Float128.  This patch adds defines relating to other _FloatN /
    _FloatNx types.
    
    The approach taken is to add defines for all _FloatN / _FloatNx types
    known to GCC, and to put them in a common bits/floatn-common.h header
    included at the end of all the individual bits/floatn.h headers.  If
    in future some defines become different for different glibc
    configurations, they will move out into the separate bits/floatn.h
    headers.
    
    Some defines are expected always to be the same across glibc ports.
    Corresponding defines are nevertheless put in this header.  The intent
    is that where there are conditionals (in headers or in non-installed
    files) that can just repeat the same or nearly the same logic for each
    floating-point type, they should do so, even if in fact the cases for
    some types could be unconditionally present or absent because the same
    conditionals are true or false for all glibc configurations.  This
    should make the glibc code with such conditionals easier to read,
    because the reader can just see that the same conditionals are
    repeated for each type, rather than seeing different conditionals for
    different types and needing to reason, at each location with such
    differences, why those differences are indeed correct there.  (Cases
    involving per-format rather than per-type logic are more likely still
    to need differences in how they handle different types.)
    
    Having such defines and conditionals also helps in incremental
    preparation for adding _Float32 / _Float64 / _Float32x / _Float64x
    function aliases.  I intend subsequent patches to add such
    conditionals corresponding to those already present for _Float128, as
    well as making more architecture-specific function implementations use
    common macros to define aliases in preparation for adding such _FloatN
    / _FloatNx aliases.
    
    Tested for x86_64.
    
    	* bits/floatn-common.h: New file.
    	* math/Makefile (headers): Add bits/floatn-common.h.
    	* bits/floatn.h: Include <bits/floatn-common.h>.
    	* sysdeps/ia64/bits/floatn.h: Likewise.
    	* sysdeps/ieee754/ldbl-128/bits/floatn.h: Likewise.
    	* sysdeps/mips/ieee754/bits/floatn.h: Likewise.
    	* sysdeps/powerpc/bits/floatn.h: Likewise.
    	* sysdeps/x86/bits/floatn.h: Likewise.

diff --git a/ChangeLog b/ChangeLog
index aa7e9a9..7cb7ce5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2017-10-20  Joseph Myers  <joseph@codesourcery.com>
+
+	* bits/floatn-common.h: New file.
+	* math/Makefile (headers): Add bits/floatn-common.h.
+	* bits/floatn.h: Include <bits/floatn-common.h>.
+	* sysdeps/ia64/bits/floatn.h: Likewise.
+	* sysdeps/ieee754/ldbl-128/bits/floatn.h: Likewise.
+	* sysdeps/mips/ieee754/bits/floatn.h: Likewise.
+	* sysdeps/powerpc/bits/floatn.h: Likewise.
+	* sysdeps/x86/bits/floatn.h: Likewise.
+
 2017-10-20  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* configure.ac (libc_cv_gcc_incompatbile_alias): New define:
diff --git a/bits/floatn-common.h b/bits/floatn-common.h
new file mode 100644
index 0000000..1b3ab51
--- /dev/null
+++ b/bits/floatn-common.h
@@ -0,0 +1,292 @@
+/* Macros to control TS 18661-3 glibc features where the same
+   definitions are appropriate for all platforms.
+   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/>.  */
+
+#ifndef _BITS_FLOATN_COMMON_H
+#define _BITS_FLOATN_COMMON_H
+
+#include <features.h>
+
+/* This header should be included at the bottom of each bits/floatn.h.
+   It defines the following macros for each _FloatN and _FloatNx type,
+   where the same definitions, or definitions based only on the macros
+   in bits/floatn.h, are appropriate for all glibc configurations.  */
+
+/* Defined to 1 if the current compiler invocation provides a
+   floating-point type with the right format for this type, and this
+   glibc includes corresponding *fN or *fNx interfaces for it.  */
+#define __HAVE_FLOAT16 0
+#define __HAVE_FLOAT32 0
+#define __HAVE_FLOAT64 0
+#define __HAVE_FLOAT32X 0
+#define __HAVE_FLOAT64X 0
+#define __HAVE_FLOAT128X 0
+
+/* Defined to 1 if the corresponding __HAVE_<type> macro is 1 and the
+   type is the first with its format in the sequence of (the default
+   choices for) float, double, long double, _Float16, _Float32,
+   _Float64, _Float128, _Float32x, _Float64x, _Float128x for this
+   glibc; that is, if functions present once per floating-point format
+   rather than once per type are present for this type.
+
+   All configurations supported by glibc have _Float32 the same format
+   as float, _Float64 and _Float32x the same format as double, the
+   _Float64x the same format as either long double or _Float128.  No
+   configurations support _Float128x or, as of GCC 7, have compiler
+   support for a type meeting the requirements for _Float128x.  */
+#define __HAVE_DISTINCT_FLOAT16 __HAVE_FLOAT16
+#define __HAVE_DISTINCT_FLOAT32 0
+#define __HAVE_DISTINCT_FLOAT64 0
+#define __HAVE_DISTINCT_FLOAT32X 0
+#define __HAVE_DISTINCT_FLOAT64X 0
+#define __HAVE_DISTINCT_FLOAT128X __HAVE_FLOAT128X
+
+/* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format
+   of long double.  Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has
+   the format of _Float128, which must be different from that of long
+   double.  */
+#define __HAVE_FLOAT64X_LONG_DOUBLE 0
+
+/* Defined to 1 if any _FloatN or _FloatNx types that are not
+   ABI-distinct are however distinct types at the C language level (so
+   for the purposes of __builtin_types_compatible_p and _Generic).  */
+#if __GNUC_PREREQ (7, 0) && !defined __cplusplus
+# define __HAVE_FLOATN_NOT_TYPEDEF 1
+#else
+# define __HAVE_FLOATN_NOT_TYPEDEF 0
+#endif
+
+/* Defined to concatenate the literal suffix to be used with _FloatN
+   or _FloatNx types, if __HAVE_<type> is 1.  The corresponding
+   literal suffixes exist since GCC 7, for C only.  */
+#if __HAVE_FLOAT16
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+/* No corresponding suffix available for this type.  */
+#  define __f16(x) ((_Float16) x##f)
+# else
+#  define __f16(x) x##f16
+# endif
+#endif
+
+#if __HAVE_FLOAT32
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __f32(x) x##f
+# else
+#  define __f32(x) x##f32
+# endif
+#endif
+
+#if __HAVE_FLOAT64
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __f64(x) x
+# else
+#  define __f64(x) x##f64
+# endif
+#endif
+
+#if __HAVE_FLOAT32X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __f32x(x) x
+# else
+#  define __f32x(x) x##f32x
+# endif
+#endif
+
+#if __HAVE_FLOAT64X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  if __HAVE_FLOAT64X_LONG_DOUBLE
+#   define __f64x(x) x##l
+#  else
+#   define __f64x(x) __f128 (x)
+#  endif
+# else
+#  define __f64x(x) x##f64x
+# endif
+#endif
+
+#if __HAVE_FLOAT128X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  error "_Float128X supported but no constant suffix"
+# else
+#  define __f128x(x) x##f128x
+# endif
+#endif
+
+/* Defined to a complex type if __HAVE_<type> is 1.  */
+#if __HAVE_FLOAT16
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
+#  define __CFLOAT16 __cfloat16
+# else
+#  define __CFLOAT16 _Complex _Float16
+# endif
+#endif
+
+#if __HAVE_FLOAT32
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __CFLOAT32 _Complex float
+# else
+#  define __CFLOAT32 _Complex _Float32
+# endif
+#endif
+
+#if __HAVE_FLOAT64
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __CFLOAT64 _Complex double
+# else
+#  define __CFLOAT64 _Complex _Float64
+# endif
+#endif
+
+#if __HAVE_FLOAT32X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __CFLOAT32X _Complex double
+# else
+#  define __CFLOAT32X _Complex _Float32x
+# endif
+#endif
+
+#if __HAVE_FLOAT64X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  if __HAVE_FLOAT64X_LONG_DOUBLE
+#   define __CFLOAT64X _Complex long double
+#  else
+#   define __CFLOAT64X __CFLOAT128
+#  endif
+# else
+#  define __CFLOAT64X _Complex _Float64x
+# endif
+#endif
+
+#if __HAVE_FLOAT128X
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  error "_Float128X supported but no complex type"
+# else
+#  define __CFLOAT128X _Complex _Float128x
+# endif
+#endif
+
+/* The remaining of this file provides support for older compilers.  */
+#if __HAVE_FLOAT16
+
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
+# endif
+
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf16() ((_Float16) __builtin_huge_val ())
+#  define __builtin_inff16() ((_Float16) __builtin_inf ())
+#  define __builtin_nanf16(x) ((_Float16) __builtin_nan (x))
+#  define __builtin_nansf16(x) ((_Float16) __builtin_nans (x))
+# endif
+
+#endif
+
+#if __HAVE_FLOAT32
+
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef float _Float32;
+# endif
+
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf32() (__builtin_huge_valf ())
+#  define __builtin_inff32() (__builtin_inff ())
+#  define __builtin_nanf32(x) (__builtin_nanf (x))
+#  define __builtin_nansf32(x) (__builtin_nansf (x))
+# endif
+
+#endif
+
+#if __HAVE_FLOAT64
+
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef double _Float64;
+# endif
+
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf64() (__builtin_huge_val ())
+#  define __builtin_inff64() (__builtin_inf ())
+#  define __builtin_nanf64(x) (__builtin_nan (x))
+#  define __builtin_nansf64(x) (__builtin_nans (x))
+# endif
+
+#endif
+
+#if __HAVE_FLOAT32X
+
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef double _Float32x;
+# endif
+
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf32x() (__builtin_huge_val ())
+#  define __builtin_inff32x() (__builtin_inf ())
+#  define __builtin_nanf32x(x) (__builtin_nan (x))
+#  define __builtin_nansf32x(x) (__builtin_nans (x))
+# endif
+
+#endif
+
+#if __HAVE_FLOAT64X
+
+# if __HAVE_FLOAT64X_LONG_DOUBLE
+
+#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef long double _Float64x;
+#  endif
+
+#  if !__GNUC_PREREQ (7, 0)
+#   define __builtin_huge_valf64x() (__builtin_huge_vall ())
+#   define __builtin_inff64x() (__builtin_infl ())
+#   define __builtin_nanf64x(x) (__builtin_nanl (x))
+#   define __builtin_nansf64x(x) (__builtin_nansl (x))
+#  endif
+
+# else
+
+#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef _Float128 _Float64x;
+#  endif
+
+#  if !__GNUC_PREREQ (7, 0)
+#   define __builtin_huge_valf64x() (__builtin_huge_valf128 ())
+#   define __builtin_inff64x() (__builtin_inff128 ())
+#   define __builtin_nanf64x(x) (__builtin_nanf128 (x))
+#   define __builtin_nansf64x(x) (__builtin_nansf128 (x))
+#  endif
+
+# endif
+
+#endif
+
+#if __HAVE_FLOAT128X
+
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  error "_Float128x supported but no type"
+# endif
+
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf128x() ((_Float128x) __builtin_huge_val ())
+#  define __builtin_inff128x() ((_Float128x) __builtin_inf ())
+#  define __builtin_nanf128x(x) ((_Float128x) __builtin_nan (x))
+#  define __builtin_nansf128x(x) ((_Float128x) __builtin_nans (x))
+# endif
+
+#endif
+
+#endif /* _BITS_FLOATN_COMMON_H */
diff --git a/bits/floatn.h b/bits/floatn.h
index a806496..78eb0f4 100644
--- a/bits/floatn.h
+++ b/bits/floatn.h
@@ -33,3 +33,5 @@
 /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.
    E.g.: #define __CFLOAT128 _Complex _Float128.  */
 #undef __CFLOAT128
+
+#include <bits/floatn-common.h>
diff --git a/math/Makefile b/math/Makefile
index 2d47209..1feb425 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -29,7 +29,7 @@ headers		:= math.h bits/mathcalls.h bits/mathinline.h \
 		   bits/libm-simd-decl-stubs.h bits/iscanonical.h \
 		   bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \
 		   bits/long-double.h bits/mathcalls-helper-functions.h \
-		   bits/floatn.h
+		   bits/floatn.h bits/floatn-common.h
 
 # FPU support code.
 aux		:= setfpucw fpu_control
diff --git a/sysdeps/ia64/bits/floatn.h b/sysdeps/ia64/bits/floatn.h
index dbb6eb2..a88d0f9 100644
--- a/sysdeps/ia64/bits/floatn.h
+++ b/sysdeps/ia64/bits/floatn.h
@@ -99,4 +99,6 @@ typedef __float128 _Float128;
 
 #endif
 
+#include <bits/floatn-common.h>
+
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/ieee754/ldbl-128/bits/floatn.h b/sysdeps/ieee754/ldbl-128/bits/floatn.h
index 5c87366..eab72cf 100644
--- a/sysdeps/ieee754/ldbl-128/bits/floatn.h
+++ b/sysdeps/ieee754/ldbl-128/bits/floatn.h
@@ -77,4 +77,6 @@ typedef long double _Float128;
 
 #endif
 
+#include <bits/floatn-common.h>
+
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/mips/ieee754/bits/floatn.h b/sysdeps/mips/ieee754/bits/floatn.h
index b333491..957343d 100644
--- a/sysdeps/mips/ieee754/bits/floatn.h
+++ b/sysdeps/mips/ieee754/bits/floatn.h
@@ -77,4 +77,6 @@ typedef long double _Float128;
 
 #endif
 
+#include <bits/floatn-common.h>
+
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/powerpc/bits/floatn.h b/sysdeps/powerpc/bits/floatn.h
index 0ce997c..44a9434 100644
--- a/sysdeps/powerpc/bits/floatn.h
+++ b/sysdeps/powerpc/bits/floatn.h
@@ -97,4 +97,6 @@ typedef __float128 _Float128;
 
 #endif
 
+#include <bits/floatn-common.h>
+
 #endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/x86/bits/floatn.h b/sysdeps/x86/bits/floatn.h
index f93a9f8..5a21fd4 100644
--- a/sysdeps/x86/bits/floatn.h
+++ b/sysdeps/x86/bits/floatn.h
@@ -101,4 +101,6 @@ typedef __float128 _Float128;
 
 #endif
 
+#include <bits/floatn-common.h>
+
 #endif /* _BITS_FLOATN_H */

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

Summary of changes:
 ChangeLog                              |   11 ++
 bits/floatn-common.h                   |  292 ++++++++++++++++++++++++++++++++
 bits/floatn.h                          |    2 +
 math/Makefile                          |    2 +-
 sysdeps/ia64/bits/floatn.h             |    2 +
 sysdeps/ieee754/ldbl-128/bits/floatn.h |    2 +
 sysdeps/mips/ieee754/bits/floatn.h     |    2 +
 sysdeps/powerpc/bits/floatn.h          |    2 +
 sysdeps/x86/bits/floatn.h              |    2 +
 9 files changed, 316 insertions(+), 1 deletions(-)
 create mode 100644 bits/floatn-common.h


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]