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.24-404-g93eb85c


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  93eb85ceb25ee7aff432ddea0abf559f53d7a5fc (commit)
      from  380ec16d62f459d5a28cfc25b7b20990c45e1cc9 (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=93eb85ceb25ee7aff432ddea0abf559f53d7a5fc

commit 93eb85ceb25ee7aff432ddea0abf559f53d7a5fc
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Nov 24 18:44:50 2016 +0000

    Refactor float_t, double_t information into bits/flt-eval-method.h.
    
    At present, definitions of float_t and double_t are split among many
    bits/mathdef.h headers.
    
    For all but three architectures, these types are float and double.
    Furthermore, if you assume __FLT_EVAL_METHOD__ to be defined, that
    provides a more generic way of determining the correct values of these
    typedefs.  Defining these typedefs more generally based on
    __FLT_EVAL_METHOD__ was previously proposed by Paul Eggert in
    <https://sourceware.org/ml/libc-alpha/2012-02/msg00002.html>.
    
    This patch refactors things in the way I proposed in
    <https://sourceware.org/ml/libc-alpha/2016-11/msg00745.html>.  A new
    header bits/flt-eval-method.h defines a single macro,
    __GLIBC_FLT_EVAL_METHOD, which is then used by math.h to define
    float_t and double_t.  The default is based on __FLT_EVAL_METHOD__
    (although actually a default to 0 would have the same effect for
    current ports, because ports where values other than 0 or 16 are
    possible all have their own headers).
    
    To avoid changing the existing semantics in any case, including for
    compilers not defining __FLT_EVAL_METHOD__, architecture-specific
    files are then added for m68k, s390, x86 which replicate the existing
    semantics.  At least with __FLT_EVAL_METHOD__ values possible with
    GCC, there should be no change to the choices of float_t and double_t
    for any supported configuration.
    
    Architecture maintainer notes:
    
    * m68k: sysdeps/m68k/m680x0/bits/flt-eval-method.h always defines
      __GLIBC_FLT_EVAL_METHOD to 2 to replicate the existing logic.  But
      actually GCC defines __FLT_EVAL_METHOD__ to 0 if TARGET_68040.  It
      might make sense to make the header prefer to base things on
      __FLT_EVAL_METHOD__ if defined, like the x86 version, and so make
      the choices of these types more accurate (with a NEWS entry as for
      the other changes to these types on particular architectures).
    
    * s390: sysdeps/s390/bits/flt-eval-method.h always defines
      __GLIBC_FLT_EVAL_METHOD to 1 to replicate the existing logic.  As
      previously discussed, it might make sense in coordination with GCC
      to eliminate the historic mistake, avoid excess precision in the
      -fexcess-precision=standard case and make the typedefs match (with a
      NEWS entry, again).
    
    Tested for x86-64 and x86.  Also did compilation-only testing with
    build-many-glibcs.py.
    
    	* bits/flt-eval-method.h: New file.
    	* sysdeps/m68k/m680x0/bits/flt-eval-method.h: Likewise.
    	* sysdeps/s390/bits/flt-eval-method.h: Likewise.
    	* sysdeps/x86/bits/flt-eval-method.h: Likewise.
    	* math/Makefile (headers): Add bits/flt-eval-method.h.
    	* math/math.h: Include <bits/flt-eval-method.h>.
    	[__USE_ISOC99] (float_t): Define based on __GLIBC_FLT_EVAL_METHOD.
    	[__USE_ISOC99] (double_t): Likewise.
    	* bits/mathdef.h (float_t): Remove.
    	(double_t): Likewise.
    	* sysdeps/aarch64/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/alpha/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/arm/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/hppa/fpu/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/ia64/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/m68k/m680x0/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/mips/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/powerpc/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/s390/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/sh/sh4/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/sparc/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/tile/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.
    	* sysdeps/x86/bits/mathdef.h (float_t): Likewise.
    	(double_t): Likewise.

diff --git a/ChangeLog b/ChangeLog
index bef7557..7b4b183 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+2016-11-24  Joseph Myers  <joseph@codesourcery.com>
+
+	* bits/flt-eval-method.h: New file.
+	* sysdeps/m68k/m680x0/bits/flt-eval-method.h: Likewise.
+	* sysdeps/s390/bits/flt-eval-method.h: Likewise.
+	* sysdeps/x86/bits/flt-eval-method.h: Likewise.
+	* math/Makefile (headers): Add bits/flt-eval-method.h.
+	* math/math.h: Include <bits/flt-eval-method.h>.
+	[__USE_ISOC99] (float_t): Define based on __GLIBC_FLT_EVAL_METHOD.
+	[__USE_ISOC99] (double_t): Likewise.
+	* bits/mathdef.h (float_t): Remove.
+	(double_t): Likewise.
+	* sysdeps/aarch64/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/alpha/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/arm/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/hppa/fpu/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/ia64/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/m68k/m680x0/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/mips/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/powerpc/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/s390/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/sh/sh4/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/sparc/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/tile/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+	* sysdeps/x86/bits/mathdef.h (float_t): Likewise.
+	(double_t): Likewise.
+
 2016-11-24  Aurelien Jarno  <aurelien@aurel32.net>
 
 	* sysdeps/x86_64/memcpy_chk.S (__memcpy_chk): Check for SHARED
diff --git a/bits/flt-eval-method.h b/bits/flt-eval-method.h
new file mode 100644
index 0000000..8ecd6a6
--- /dev/null
+++ b/bits/flt-eval-method.h
@@ -0,0 +1,42 @@
+/* Define __GLIBC_FLT_EVAL_METHOD.
+   Copyright (C) 2016 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 _MATH_H
+# error "Never use <bits/flt-eval-method.h> directly; include <math.h> instead."
+#endif
+
+/* __GLIBC_FLT_EVAL_METHOD is the value of FLT_EVAL_METHOD used to
+   determine the evaluation method typedefs such as float_t and
+   double_t.  It must be a value from C11 or TS 18661-3:2015, and not
+   -1.  */
+
+/* In the default version of this header, follow __FLT_EVAL_METHOD__.
+   -1 is mapped to 2 (considering evaluation as long double to be a
+   conservatively safe assumption), and if __FLT_EVAL_METHOD__ is not
+   defined then assume there is no excess precision and use the value
+   0.  */
+
+#ifdef __FLT_EVAL_METHOD__
+# if __FLT_EVAL_METHOD__ == -1
+#  define __GLIBC_FLT_EVAL_METHOD	2
+# else
+#  define __GLIBC_FLT_EVAL_METHOD	__FLT_EVAL_METHOD__
+# endif
+#else
+# define __GLIBC_FLT_EVAL_METHOD	0
+#endif
diff --git a/bits/mathdef.h b/bits/mathdef.h
index d557d08..6dedc51 100644
--- a/bits/mathdef.h
+++ b/bits/mathdef.h
@@ -22,13 +22,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* Expressions are evaluated with the range and precision of their
-   type.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	2147483647
diff --git a/math/Makefile b/math/Makefile
index e84f86a..576e108 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -27,7 +27,8 @@ headers		:= math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \
 		   fpu_control.h complex.h bits/cmathcalls.h fenv.h \
 		   bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
 		   bits/math-finite.h bits/math-vector.h \
-		   bits/libm-simd-decl-stubs.h bits/iscanonical.h
+		   bits/libm-simd-decl-stubs.h bits/iscanonical.h \
+		   bits/flt-eval-method.h
 
 # FPU support code.
 aux		:= setfpucw fpu_control
diff --git a/math/math.h b/math/math.h
index 75ccfc3..70bf8e5 100644
--- a/math/math.h
+++ b/math/math.h
@@ -54,13 +54,51 @@ __BEGIN_DECLS
 # endif
 #endif
 
-/* Get the architecture specific values describing the floating-point
-   evaluation.  The following symbols will get defined:
+/* Get __GLIBC_FLT_EVAL_METHOD.  */
+#include <bits/flt-eval-method.h>
+
+#ifdef __USE_ISOC99
+/* Define the following typedefs.
 
     float_t	floating-point type at least as wide as `float' used
 		to evaluate `float' expressions
     double_t	floating-point type at least as wide as `double' used
 		to evaluate `double' expressions
+*/
+# if __GLIBC_FLT_EVAL_METHOD == 0 || __GLIBC_FLT_EVAL_METHOD == 16
+typedef float float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 1
+typedef double float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 2
+typedef long double float_t;
+typedef long double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 32
+typedef _Float32 float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 33
+typedef _Float32x float_t;
+typedef _Float32x double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 64
+typedef _Float64 float_t;
+typedef _Float64 double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 65
+typedef _Float64x float_t;
+typedef _Float64x double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 128
+typedef _Float128 float_t;
+typedef _Float128 double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 129
+typedef _Float128x float_t;
+typedef _Float128x double_t;
+# else
+#  error "Unknown __GLIBC_FLT_EVAL_METHOD"
+# endif
+#endif
+
+/* Get the architecture specific values describing the floating-point
+   evaluation.  The following symbols will get defined:
 
     FP_FAST_FMA
     FP_FAST_FMAF
diff --git a/sysdeps/aarch64/bits/mathdef.h b/sysdeps/aarch64/bits/mathdef.h
index db992fc..2b55b59 100644
--- a/sysdeps/aarch64/bits/mathdef.h
+++ b/sysdeps/aarch64/bits/mathdef.h
@@ -23,12 +23,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* GCC does not promote `float' values to `double'.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/alpha/bits/mathdef.h b/sysdeps/alpha/bits/mathdef.h
index ed70ad8..fbca194 100644
--- a/sysdeps/alpha/bits/mathdef.h
+++ b/sysdeps/alpha/bits/mathdef.h
@@ -25,10 +25,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* Alpha has "float" and "double" operations.  */
-typedef float float_t;    /* float expressions are evaluated as float.  */
-typedef double double_t;  /* double expressions are evaluated as double.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0     (-2147483647)
 # define FP_ILOGBNAN   (2147483647)
diff --git a/sysdeps/arm/bits/mathdef.h b/sysdeps/arm/bits/mathdef.h
index ae0bcb7..68c96f0 100644
--- a/sysdeps/arm/bits/mathdef.h
+++ b/sysdeps/arm/bits/mathdef.h
@@ -22,12 +22,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* GCC does not promote `float' values to `double'.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/hppa/fpu/bits/mathdef.h b/sysdeps/hppa/fpu/bits/mathdef.h
index 99c9cff..24b67b2 100644
--- a/sysdeps/hppa/fpu/bits/mathdef.h
+++ b/sysdeps/hppa/fpu/bits/mathdef.h
@@ -22,12 +22,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* GCC does not promote `float' values to `double'.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/ia64/bits/mathdef.h b/sysdeps/ia64/bits/mathdef.h
index 5a31bd3..44a7642 100644
--- a/sysdeps/ia64/bits/mathdef.h
+++ b/sysdeps/ia64/bits/mathdef.h
@@ -22,13 +22,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* The IA-64 architecture computes values with the precision of the
-   used type.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647 - 1)
 # define FP_ILOGBNAN	2147483647
diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/m68k/m680x0/bits/flt-eval-method.h
similarity index 51%
copy from sysdeps/sparc/bits/mathdef.h
copy to sysdeps/m68k/m680x0/bits/flt-eval-method.h
index 94a102a..b2a38ac 100644
--- a/sysdeps/sparc/bits/mathdef.h
+++ b/sysdeps/m68k/m680x0/bits/flt-eval-method.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+/* Define __GLIBC_FLT_EVAL_METHOD.  M68K version.
+   Copyright (C) 2016 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
@@ -15,24 +16,10 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#ifndef _MATH_H
+# error "Never use <bits/flt-eval-method.h> directly; include <math.h> instead."
 #endif
 
-#include <bits/wordsize.h>
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!  */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF	1
-
-/* SPARC has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-#endif	/* ISO C99 */
+/* The m68k FPUs evaluate all values in the 96-bit floating-point
+   format which is also available for the user as 'long double'.  */
+#define __GLIBC_FLT_EVAL_METHOD	2
diff --git a/sysdeps/m68k/m680x0/bits/mathdef.h b/sysdeps/m68k/m680x0/bits/mathdef.h
index a550938..702bd0e 100644
--- a/sysdeps/m68k/m680x0/bits/mathdef.h
+++ b/sysdeps/m68k/m680x0/bits/mathdef.h
@@ -22,14 +22,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* The m68k FPUs evaluate all values in the 96 bit floating-point format
-   which is also available for the user as `long double'.  Therefore we
-   define: */
-typedef long double float_t;	/* `float' expressions are evaluated as
-				   `long double'.  */
-typedef long double double_t;	/* `double' expressions are evaluated as
-				   `long double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647 - 1)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/mips/bits/mathdef.h b/sysdeps/mips/bits/mathdef.h
index 3a11627..74abf97 100644
--- a/sysdeps/mips/bits/mathdef.h
+++ b/sysdeps/mips/bits/mathdef.h
@@ -24,12 +24,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* MIPS has `float' and `double' operations.  */
-typedef float float_t;		/* `float' expressions are evaluated as
-				   `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	2147483647
diff --git a/sysdeps/powerpc/bits/mathdef.h b/sysdeps/powerpc/bits/mathdef.h
index d4dd4b5..debb5a5 100644
--- a/sysdeps/powerpc/bits/mathdef.h
+++ b/sysdeps/powerpc/bits/mathdef.h
@@ -29,10 +29,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* PowerPC has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/s390/bits/flt-eval-method.h
similarity index 51%
copy from sysdeps/sparc/bits/mathdef.h
copy to sysdeps/s390/bits/flt-eval-method.h
index 94a102a..5793175 100644
--- a/sysdeps/sparc/bits/mathdef.h
+++ b/sysdeps/s390/bits/flt-eval-method.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+/* Define __GLIBC_FLT_EVAL_METHOD.  S/390 version.
+   Copyright (C) 2016 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
@@ -15,24 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#ifndef _MATH_H
+# error "Never use <bits/flt-eval-method.h> directly; include <math.h> instead."
 #endif
 
-#include <bits/wordsize.h>
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!  */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF	1
-
-/* SPARC has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-#endif	/* ISO C99 */
+/* This value is used because of a historical mistake.  */
+#define __GLIBC_FLT_EVAL_METHOD	1
diff --git a/sysdeps/s390/bits/mathdef.h b/sysdeps/s390/bits/mathdef.h
index 8c47ade..5ad04ae 100644
--- a/sysdeps/s390/bits/mathdef.h
+++ b/sysdeps/s390/bits/mathdef.h
@@ -22,13 +22,6 @@
 #if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* Normally, there is no long double type and the `float' and `double'
-   expressions are evaluated as `double'.  */
-typedef double float_t;		/* `float' expressions are evaluated as
-				   `double'.  */
-typedef double double_t;	/* `double' expressions are evaluated as
-				   `double'.  */
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	2147483647
diff --git a/sysdeps/sh/sh4/bits/mathdef.h b/sysdeps/sh/sh4/bits/mathdef.h
index 21ce094..f3ee287 100644
--- a/sysdeps/sh/sh4/bits/mathdef.h
+++ b/sysdeps/sh/sh4/bits/mathdef.h
@@ -29,10 +29,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* SH has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-0x7fffffff)
 # define FP_ILOGBNAN	0x7fffffff
diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/sparc/bits/mathdef.h
index 94a102a..55a3530 100644
--- a/sysdeps/sparc/bits/mathdef.h
+++ b/sysdeps/sparc/bits/mathdef.h
@@ -27,10 +27,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* SPARC has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0       (-2147483647)
 # define FP_ILOGBNAN     (2147483647)
diff --git a/sysdeps/tile/bits/mathdef.h b/sysdeps/tile/bits/mathdef.h
index 2db81b4..8ed7ac4 100644
--- a/sysdeps/tile/bits/mathdef.h
+++ b/sysdeps/tile/bits/mathdef.h
@@ -23,10 +23,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-/* "float" and "double" expressions evaluated as "float" and "double". */
-typedef float float_t;
-typedef double double_t;
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
diff --git a/sysdeps/sparc/bits/mathdef.h b/sysdeps/x86/bits/flt-eval-method.h
similarity index 51%
copy from sysdeps/sparc/bits/mathdef.h
copy to sysdeps/x86/bits/flt-eval-method.h
index 94a102a..674f2fc 100644
--- a/sysdeps/sparc/bits/mathdef.h
+++ b/sysdeps/x86/bits/flt-eval-method.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+/* Define __GLIBC_FLT_EVAL_METHOD.  x86 version.
+   Copyright (C) 2016 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
@@ -15,24 +16,18 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if !defined _MATH_H && !defined _COMPLEX_H
-# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#ifndef _MATH_H
+# error "Never use <bits/flt-eval-method.h> directly; include <math.h> instead."
 #endif
 
-#include <bits/wordsize.h>
-
-/* FIXME! This file describes properties of the compiler, not the machine;
-   it should not be part of libc!  */
-
-#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
-# define _MATH_H_MATHDEF	1
-
-/* SPARC has both `float' and `double' arithmetic.  */
-typedef float float_t;
-typedef double double_t;
-
-/* The values returned by `ilogb' for 0 and NaN respectively.  */
-# define FP_ILOGB0       (-2147483647)
-# define FP_ILOGBNAN     (2147483647)
-
-#endif	/* ISO C99 */
+#ifdef __FLT_EVAL_METHOD__
+# if __FLT_EVAL_METHOD__ == -1
+#  define __GLIBC_FLT_EVAL_METHOD	2
+# else
+#  define __GLIBC_FLT_EVAL_METHOD	__FLT_EVAL_METHOD__
+# endif
+#elif defined __x86_64__
+# define __GLIBC_FLT_EVAL_METHOD	0
+#else
+# define __GLIBC_FLT_EVAL_METHOD	2
+#endif
diff --git a/sysdeps/x86/bits/mathdef.h b/sysdeps/x86/bits/mathdef.h
index 9423a7f..2f0025c 100644
--- a/sysdeps/x86/bits/mathdef.h
+++ b/sysdeps/x86/bits/mathdef.h
@@ -22,23 +22,6 @@
 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
 # define _MATH_H_MATHDEF	1
 
-# if ((defined __x86_64__ && !defined __FLT_EVAL_METHOD__)		\
-      || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0))
-/* The x86-64 architecture computes values with the precission of the
-   used type.  Similarly for -m32 -mfpmath=sse.  */
-typedef float float_t;		/* `float' expressions are evaluated as `float'.  */
-typedef double double_t;	/* `double' expressions are evaluated
-				   as `double'.  */
-# else
-/* The ix87 FPUs evaluate all values in the 80 bit floating-point format
-   which is also available for the user as `long double'.  Therefore we
-   define:  */
-typedef long double float_t;	/* `float' expressions are evaluated as
-				   `long double'.  */
-typedef long double double_t;	/* `double' expressions are evaluated as
-				   `long double'.  */
-# endif
-
 /* The values returned by `ilogb' for 0 and NaN respectively.  */
 # define FP_ILOGB0	(-2147483647 - 1)
 # define FP_ILOGBNAN	(-2147483647 - 1)

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

Summary of changes:
 ChangeLog                                  |   39 ++++++++++++++++++++++++++
 bits/flt-eval-method.h                     |   42 ++++++++++++++++++++++++++++
 bits/mathdef.h                             |    7 ----
 math/Makefile                              |    3 +-
 math/math.h                                |   42 ++++++++++++++++++++++++++-
 sysdeps/aarch64/bits/mathdef.h             |    6 ----
 sysdeps/alpha/bits/mathdef.h               |    4 --
 sysdeps/arm/bits/mathdef.h                 |    6 ----
 sysdeps/hppa/fpu/bits/mathdef.h            |    6 ----
 sysdeps/ia64/bits/mathdef.h                |    7 ----
 sysdeps/m68k/m680x0/bits/flt-eval-method.h |   25 ++++++++++++++++
 sysdeps/m68k/m680x0/bits/mathdef.h         |    8 -----
 sysdeps/mips/bits/mathdef.h                |    6 ----
 sysdeps/powerpc/bits/mathdef.h             |    4 --
 sysdeps/s390/bits/flt-eval-method.h        |   24 ++++++++++++++++
 sysdeps/s390/bits/mathdef.h                |    7 ----
 sysdeps/sh/sh4/bits/mathdef.h              |    4 --
 sysdeps/sparc/bits/mathdef.h               |    4 --
 sysdeps/tile/bits/mathdef.h                |    4 --
 sysdeps/x86/bits/flt-eval-method.h         |   33 ++++++++++++++++++++++
 sysdeps/x86/bits/mathdef.h                 |   17 -----------
 21 files changed, 205 insertions(+), 93 deletions(-)
 create mode 100644 bits/flt-eval-method.h
 create mode 100644 sysdeps/m68k/m680x0/bits/flt-eval-method.h
 create mode 100644 sysdeps/s390/bits/flt-eval-method.h
 create mode 100644 sysdeps/x86/bits/flt-eval-method.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]