summaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-11-27 14:16:47 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-11-27 14:16:47 +0000
commita23aa5b7272ec4a04578d82399ec2bf536281119 (patch)
treeca8063afcf28f64aa6b890acbda0f4bc0b6db902 /math
parentc2c299fd24e87b83c63191ff979d41a86b37d714 (diff)
downloadglibc-a23aa5b7272ec4a04578d82399ec2bf536281119.tar.gz
Add _Float64x function aliases.
This patch continues filling out TS 18661-3 support by adding *f64x function aliases on platforms with _Float64x support. (It so happens the set of such platforms is exactly the same as the set of platforms with _Float128 support, although on x86_64, x86 and ia32 the _Float64x format is Intel extended rather than binary128.) The API provided corresponds exactly to that provided for _Float128, mostly coming from TS 18661-3. As these functions always alias those for another type (long double, _Float128 or both), __* function names are not provided, as in other cases of alias types. Given the preparation done in previous patches, this one just enables the feature via Makeconfig and bits/floatn.h, adds symbol versions, and updates documentation and ABI baselines. The symbol versions are present unconditionally as GLIBC_2.27 in the relevant Versions files, as it's OK for those to specify versions for functions that may not be present in some configurations; no additional complexity is needed unless in future some configuration gains support for this type that didn't have such support in 2.27. The Makeconfig additions for ia64 and x86 aren't strictly needed, as those configurations also get float64x-alias-fcts definitions from sysdeps/ieee754/float128/Makeconfig, but still seem appropriate given that _Float64x is not _Float128 for those configurations. A libm-test-ulps update for x86 is included. This is because bits/mathinline.h does not have _Float64x support added and for two functions the use of out-of-line functions results in increased ulps (ifloat64x shares ulps with ildouble / ifloat128 as appropriate). Given that we'd like generally to eliminate bits/mathinline.h optimizations, preferring to have such optimizations in GCC instead, it seems reasonable not to add such support there for new types. GCC support for _FloatN / _FloatNx built-in functions is limited, but has been improved in GCC 8, and at some point I hope the full set of libm built-in functions in GCC, and other optimizations with per-floating-type aspects, will be enabled for all _FloatN / _FloatNx types. Tested for x86_64 and x86, and with build-many-glibcs.py, with both GCC 6 and GCC 7. * sysdeps/ia64/Makeconfig (float64x-alias-fcts): New variable. * sysdeps/ieee754/float128/Makeconfig (float64x-alias-fcts): Likewise. * sysdeps/ieee754/ldbl-128/Makeconfig (float64x-alias-fcts): Likewise. * sysdeps/x86/Makeconfig: New file. * bits/floatn-common.h (__HAVE_FLOAT64X): Remove macro. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * bits/floatn.h (__HAVE_FLOAT64X): New macro. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * sysdeps/ia64/bits/floatn.h (__HAVE_FLOAT64X): Likewise. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * sysdeps/ieee754/ldbl-128/bits/floatn.h (__HAVE_FLOAT64X): Likewise. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * sysdeps/mips/ieee754/bits/floatn.h (__HAVE_FLOAT64X): Likewise. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * sysdeps/powerpc/bits/floatn.h (__HAVE_FLOAT64X): Likewise. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * sysdeps/x86/bits/floatn.h (__HAVE_FLOAT64X): Likewise. (__HAVE_FLOAT64X_LONG_DOUBLE): Likewise. * manual/math.texi (Mathematics): Document support for _Float64x. * math/Versions (GLIBC_2.27): Add _Float64x functions. * stdlib/Versions (GLIBC_2.27): Likewise. * wcsmbs/Versions (GLIBC_2.27): Likewise. * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Update. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
Diffstat (limited to 'math')
-rw-r--r--math/Versions104
1 files changed, 104 insertions, 0 deletions
diff --git a/math/Versions b/math/Versions
index c10e32662d..d4018f6964 100644
--- a/math/Versions
+++ b/math/Versions
@@ -340,5 +340,109 @@ libm {
%endif
GLIBC_2.27 {
expf; exp2f; logf; log2f; powf;
+ acosf64x;
+ acoshf64x;
+ asinf64x;
+ asinhf64x;
+ atan2f64x;
+ atanf64x;
+ atanhf64x;
+ cabsf64x;
+ cacosf64x;
+ cacoshf64x;
+ canonicalizef64x;
+ cargf64x;
+ casinf64x;
+ casinhf64x;
+ catanf64x;
+ catanhf64x;
+ cbrtf64x;
+ ccosf64x;
+ ccoshf64x;
+ ceilf64x;
+ cexpf64x;
+ cimagf64x;
+ clog10f64x;
+ clogf64x;
+ conjf64x;
+ copysignf64x;
+ cosf64x;
+ coshf64x;
+ cpowf64x;
+ cprojf64x;
+ crealf64x;
+ csinf64x;
+ csinhf64x;
+ csqrtf64x;
+ ctanf64x;
+ ctanhf64x;
+ erfcf64x;
+ erff64x;
+ exp10f64x;
+ exp2f64x;
+ expf64x;
+ expm1f64x;
+ fabsf64x;
+ fdimf64x;
+ floorf64x;
+ fmaf64x;
+ fmaxf64x;
+ fmaxmagf64x;
+ fminf64x;
+ fminmagf64x;
+ fmodf64x;
+ frexpf64x;
+ fromfpf64x;
+ fromfpxf64x;
+ getpayloadf64x;
+ hypotf64x;
+ ilogbf64x;
+ j0f64x;
+ j1f64x;
+ jnf64x;
+ ldexpf64x;
+ lgammaf64x;
+ lgammaf64x_r;
+ llogbf64x;
+ llrintf64x;
+ llroundf64x;
+ log10f64x;
+ log1pf64x;
+ log2f64x;
+ logbf64x;
+ logf64x;
+ lrintf64x;
+ lroundf64x;
+ modff64x;
+ nanf64x;
+ nearbyintf64x;
+ nextafterf64x;
+ nextdownf64x;
+ nextupf64x;
+ powf64x;
+ remainderf64x;
+ remquof64x;
+ rintf64x;
+ roundevenf64x;
+ roundf64x;
+ scalblnf64x;
+ scalbnf64x;
+ setpayloadf64x;
+ setpayloadsigf64x;
+ sincosf64x;
+ sinf64x;
+ sinhf64x;
+ sqrtf64x;
+ tanf64x;
+ tanhf64x;
+ tgammaf64x;
+ totalorderf64x;
+ totalordermagf64x;
+ truncf64x;
+ ufromfpf64x;
+ ufromfpxf64x;
+ y0f64x;
+ y1f64x;
+ ynf64x;
}
}