mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-10 05:03:06 +03:00
Use long double not double for _Float64 with old GCC if values the same.
If double, long double and _Float64 all have the same set of values, TS 18661-3 requires the usual arithmetic conversions on long double and _Float64 to produce _Float64. For this to be the case when building with a compiler without a distinct _Float64 type, _Float64 must be a typedef for long double, not for double. (_Float32x, however, must be double in such a case, not long double, because the usual arithmetic conversions on _Float32x and double must produce double.) This patch adjusts the fallback definition of _Float64 and associated macros accordingly in that case, to fix the build of test-tgmath3 with GCC 6 for such a configuration. Tested in conjunction with _Float64 changes with build-many-glibcs.py for arm-linux-gnueabi, to make sure the issue with test-tgmath3 is fixed. Also tested for x86_64. * bits/floatn-common.h: Include <bits/long-double.h>. [__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus) && __NO_LONG_DOUBLE_MATH] (__f64): Use suffix 'l'. [__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus) && __NO_LONG_DOUBLE_MATH] (__CFLOAT64): Use _Complex long double. [__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus) && __NO_LONG_DOUBLE_MATH] (_Float64): Use long double. [__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH] (__builtin_huge_valf64): Use __builtin_huge_vall. [__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH] (__builtin_inff64): Use __builtin_infl. [__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH] (__builtin_nanf64): Use __builtin_nanl. [__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH] (__builtin_nansf64): Use __builtin_nansl.
This commit is contained in:
18
ChangeLog
18
ChangeLog
@@ -1,3 +1,21 @@
|
|||||||
|
2017-12-05 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* bits/floatn-common.h: Include <bits/long-double.h>.
|
||||||
|
[__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus)
|
||||||
|
&& __NO_LONG_DOUBLE_MATH] (__f64): Use suffix 'l'.
|
||||||
|
[__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus)
|
||||||
|
&& __NO_LONG_DOUBLE_MATH] (__CFLOAT64): Use _Complex long double.
|
||||||
|
[__HAVE_FLOAT64 && (!__GNUC_PREREQ (7, 0) || defined __cplusplus)
|
||||||
|
&& __NO_LONG_DOUBLE_MATH] (_Float64): Use long double.
|
||||||
|
[__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH]
|
||||||
|
(__builtin_huge_valf64): Use __builtin_huge_vall.
|
||||||
|
[__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH]
|
||||||
|
(__builtin_inff64): Use __builtin_infl.
|
||||||
|
[__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH]
|
||||||
|
(__builtin_nanf64): Use __builtin_nanl.
|
||||||
|
[__HAVE_FLOAT64 && !__GNUC_PREREQ (7, 0) && __NO_LONG_DOUBLE_MATH]
|
||||||
|
(__builtin_nansf64): Use __builtin_nansl.
|
||||||
|
|
||||||
2017-12-05 Rogerio A. Cardoso <rcardoso@linux.vnet.ibm.com>,
|
2017-12-05 Rogerio A. Cardoso <rcardoso@linux.vnet.ibm.com>,
|
||||||
Paul E. Murphy <murphyp@linux.vnet.ibm.com>,
|
Paul E. Murphy <murphyp@linux.vnet.ibm.com>,
|
||||||
Carlos O'Donnell <carlos@redhat.com>
|
Carlos O'Donnell <carlos@redhat.com>
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#define _BITS_FLOATN_COMMON_H
|
#define _BITS_FLOATN_COMMON_H
|
||||||
|
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
|
#include <bits/long-double.h>
|
||||||
|
|
||||||
/* This header should be included at the bottom of each bits/floatn.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,
|
It defines the following macros for each _FloatN and _FloatNx type,
|
||||||
@@ -88,7 +89,11 @@
|
|||||||
|
|
||||||
# if __HAVE_FLOAT64
|
# if __HAVE_FLOAT64
|
||||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||||
# define __f64(x) x
|
# ifdef __NO_LONG_DOUBLE_MATH
|
||||||
|
# define __f64(x) x##l
|
||||||
|
# else
|
||||||
|
# define __f64(x) x
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define __f64(x) x##f64
|
# define __f64(x) x##f64
|
||||||
# endif
|
# endif
|
||||||
@@ -142,7 +147,11 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
|||||||
|
|
||||||
# if __HAVE_FLOAT64
|
# if __HAVE_FLOAT64
|
||||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||||
# define __CFLOAT64 _Complex double
|
# ifdef __NO_LONG_DOUBLE_MATH
|
||||||
|
# define __CFLOAT64 _Complex long double
|
||||||
|
# else
|
||||||
|
# define __CFLOAT64 _Complex double
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define __CFLOAT64 _Complex _Float64
|
# define __CFLOAT64 _Complex _Float64
|
||||||
# endif
|
# endif
|
||||||
@@ -209,15 +218,39 @@ typedef float _Float32;
|
|||||||
|
|
||||||
# if __HAVE_FLOAT64
|
# if __HAVE_FLOAT64
|
||||||
|
|
||||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
/* If double, long double and _Float64 all have the same set of
|
||||||
typedef double _Float64;
|
values, TS 18661-3 requires the usual arithmetic conversions on
|
||||||
# endif
|
long double and _Float64 to produce _Float64. For this to be the
|
||||||
|
case when building with a compiler without a distinct _Float64
|
||||||
|
type, _Float64 must be a typedef for long double, not for
|
||||||
|
double. */
|
||||||
|
|
||||||
|
# ifdef __NO_LONG_DOUBLE_MATH
|
||||||
|
|
||||||
|
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||||
|
typedef long double _Float64;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if !__GNUC_PREREQ (7, 0)
|
||||||
|
# define __builtin_huge_valf64() (__builtin_huge_vall ())
|
||||||
|
# define __builtin_inff64() (__builtin_infl ())
|
||||||
|
# define __builtin_nanf64(x) (__builtin_nanl (x))
|
||||||
|
# define __builtin_nansf64(x) (__builtin_nansl (x))
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# else
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
Reference in New Issue
Block a user