mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
93eb85ceb2
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. |
||
---|---|---|
.. | ||
bits | ||
fpu | ||
ieee754 | ||
include/sys | ||
mips32 | ||
mips64 | ||
nptl | ||
sys | ||
__longjmp.c | ||
abort-instr.h | ||
add_n.S | ||
addmul_1.S | ||
atomic-machine.h | ||
backtrace.c | ||
bsd-_setjmp.S | ||
bsd-setjmp.S | ||
configure | ||
configure.ac | ||
dl-dtprocnum.h | ||
dl-machine-reject-phdr.h | ||
dl-machine.h | ||
dl-procinfo.c | ||
dl-procinfo.h | ||
dl-tls.h | ||
dl-trampoline.c | ||
fpregdef.h | ||
fpu_control.h | ||
gccframe.h | ||
Implies | ||
jmpbuf-unwind.h | ||
ldsodefs.h | ||
libc-tls.c | ||
linkmap.h | ||
localplt.data | ||
lshift.S | ||
machine-gmon.h | ||
Makefile | ||
math_private.h | ||
math-tests.h | ||
memcpy.S | ||
memset.S | ||
memusage.h | ||
mul_1.S | ||
nan-high-order-bit.h | ||
preconfigure | ||
regdef.h | ||
rshift.S | ||
setjmp_aux.c | ||
setjmp.S | ||
sgidefs.h | ||
sotruss-lib.c | ||
stackinfo.h | ||
start.S | ||
strcmp.S | ||
sub_n.S | ||
submul_1.S | ||
tininess.h | ||
tls-macros.h | ||
tst-abi-fp32mod.c | ||
tst-abi-fp64amod.c | ||
tst-abi-fp64mod.c | ||
tst-abi-fpxxmod.c | ||
tst-abi-fpxxomod.c | ||
tst-abi-interlink.c | ||
tst-audit.h | ||
tst-mode-switch-1.c | ||
tst-mode-switch-2.c | ||
tst-mode-switch-3.c |