mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 19:30:10 +00: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. |
||
---|---|---|
.. | ||
byteswap-16.h | ||
byteswap.h | ||
confname.h | ||
dirent.h | ||
dlfcn.h | ||
elfclass.h | ||
endian.h | ||
environments.h | ||
errno.h | ||
fcntl.h | ||
fenv.h | ||
fenvinline.h | ||
flt-eval-method.h | ||
huge_val.h | ||
huge_valf.h | ||
huge_vall.h | ||
hwcap.h | ||
in.h | ||
inf.h | ||
ioctl-types.h | ||
ioctls.h | ||
ipc.h | ||
ipctypes.h | ||
iscanonical.h | ||
libc-header-start.h | ||
libm-simd-decl-stubs.h | ||
link.h | ||
local_lim.h | ||
math-vector.h | ||
mathdef.h | ||
mathinline.h | ||
mman-linux.h | ||
mman.h | ||
mqueue.h | ||
msq.h | ||
nan.h | ||
netdb.h | ||
param.h | ||
poll.h | ||
posix_opt.h | ||
pthreadtypes.h | ||
resource.h | ||
sched.h | ||
select.h | ||
sem.h | ||
setjmp.h | ||
shm.h | ||
sigaction.h | ||
sigcontext.h | ||
siginfo.h | ||
signum.h | ||
sigset.h | ||
sigstack.h | ||
sigthread.h | ||
sockaddr.h | ||
socket.h | ||
stat.h | ||
statfs.h | ||
statvfs.h | ||
stdlib-bsearch.h | ||
string.h | ||
stropts.h | ||
sys_errlist.h | ||
syslog-path.h | ||
sysmacros.h | ||
termios.h | ||
time.h | ||
types.h | ||
typesizes.h | ||
uio.h | ||
ustat.h | ||
utmp.h | ||
utsname.h | ||
waitflags.h | ||
waitstatus.h | ||
wchar.h | ||
wordsize.h | ||
xtitypes.h |