]> git.ipfire.org Git - thirdparty/glibc.git/commit - bits/flt-eval-method.h
Refactor float_t, double_t information into bits/flt-eval-method.h.
authorJoseph Myers <joseph@codesourcery.com>
Thu, 24 Nov 2016 18:44:50 +0000 (18:44 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 24 Nov 2016 18:44:50 +0000 (18:44 +0000)
commit93eb85ceb25ee7aff432ddea0abf559f53d7a5fc
tree7f3fa3024190dfadcda7c249e8b33e19e8b52128
parent380ec16d62f459d5a28cfc25b7b20990c45e1cc9
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.
21 files changed:
ChangeLog
bits/flt-eval-method.h [new file with mode: 0644]
bits/mathdef.h
math/Makefile
math/math.h
sysdeps/aarch64/bits/mathdef.h
sysdeps/alpha/bits/mathdef.h
sysdeps/arm/bits/mathdef.h
sysdeps/hppa/fpu/bits/mathdef.h
sysdeps/ia64/bits/mathdef.h
sysdeps/m68k/m680x0/bits/flt-eval-method.h [new file with mode: 0644]
sysdeps/m68k/m680x0/bits/mathdef.h
sysdeps/mips/bits/mathdef.h
sysdeps/powerpc/bits/mathdef.h
sysdeps/s390/bits/flt-eval-method.h [new file with mode: 0644]
sysdeps/s390/bits/mathdef.h
sysdeps/sh/sh4/bits/mathdef.h
sysdeps/sparc/bits/mathdef.h
sysdeps/tile/bits/mathdef.h
sysdeps/x86/bits/flt-eval-method.h [new file with mode: 0644]
sysdeps/x86/bits/mathdef.h