Continuing the preparation for additional _FloatN / _FloatNx function
aliases, this patch makes alpha libm function implementations use
libm_alias_float macros to define function aliases. In the case of
the ABI compatibility for complex functions, libm_alias_float_other is
used, with the cfloat_versions macro adjusted to take a function name
argument without the trailing 'f' to facilitate this, and
cfloat_versions dealing with calling libm_alias_float_other (except
for clog10f, which doesn't use that macro because of the complexity
associated with __clog10f also being exported).
Tested with build-many-glibcs.py for alpha-linux-gnu that installed
stripped shared libraries are unchanged by the patch.
* sysdeps/alpha/fpu/cfloat-compat.h: Include <libm-alias-float.h>.
(cfloat_versions): Take function argument without trailing 'f'.
Call libm_alias_float_other.
* sysdeps/alpha/fpu/cabsf.c: Update call to cfloat_versions.
* sysdeps/alpha/fpu/cargf.c: Likewise.
* sysdeps/alpha/fpu/cimagf.c: Likewise.
* sysdeps/alpha/fpu/conjf.c: Likewise.
* sysdeps/alpha/fpu/crealf.c: Likewise.
* sysdeps/alpha/fpu/s_cacosf.c: Likewise.
* sysdeps/alpha/fpu/s_cacoshf.c: Likewise.
* sysdeps/alpha/fpu/s_casinf.c: Likewise.
* sysdeps/alpha/fpu/s_casinhf.c: Likewise.
* sysdeps/alpha/fpu/s_catanf.c: Likewise.
* sysdeps/alpha/fpu/s_catanhf.c: Likewise.
* sysdeps/alpha/fpu/s_ccosf.c: Likewise.
* sysdeps/alpha/fpu/s_ccoshf.c: Likewise.
* sysdeps/alpha/fpu/s_cexpf.c: Likewise.
* sysdeps/alpha/fpu/s_clogf.c: Likewise.
* sysdeps/alpha/fpu/s_cpowf.c: Likewise.
* sysdeps/alpha/fpu/s_cprojf.c: Likewise.
* sysdeps/alpha/fpu/s_csinf.c: Likewise.
* sysdeps/alpha/fpu/s_csinhf.c: Likewise.
* sysdeps/alpha/fpu/s_csqrtf.c: Likewise.
* sysdeps/alpha/fpu/s_ctanf.c: Likewise.
* sysdeps/alpha/fpu/s_ctanhf.c: Likewise.
* sysdeps/alpha/fpu/s_clog10f.c: Include <libm-alias-float.h>.
(clog10f): Use libm_alias_float_other.
* sysdeps/alpha/fpu/s_ceilf.c: Include <libm-alias-float.h>.
(ceilf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_copysignf.c: Include <libm-alias-float.h>.
(copysignf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_fabsf.c: Include <libm-alias-float.h>.
(fabsf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_floorf.c: Include <libm-alias-float.h>.
(floorf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_fmax.S: Include <libm-alias-float.h>.
(fmaxf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_fmin.S: Include <libm-alias-float.h>.
(fminf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_lrintf.c: Include <libm-alias-float.h>.
(lrintf): Define using libm_alias_float.
(llrintf): Likewise.
* sysdeps/alpha/fpu/s_lroundf.c: Include <libm-alias-float.h>.
(lroundf): Define using libm_alias_float.
(llroundf): Likewise.
* sysdeps/alpha/fpu/s_rintf.c: Include <libm-alias-float.h>.
(rintf): Define using libm_alias_float.
* sysdeps/alpha/fpu/s_truncf.c: Include <libm-alias-float.h>.
(truncf): Define using libm_alias_float.
The alpha specific version of trunc and truncf always add and subtract
0x1.0p23 or 0x1.0p52 even for big values. This causes this kind of
errors in the testsuite:
Failure: Test: trunc_towardzero (0x1p107)
Result:
is: 1.6225927682921334e+32 0x1.fffffffffffffp+106
should be: 1.6225927682921336e+32 0x1.0000000000000p+107
difference: 1.8014398509481984e+16 0x1.0000000000000p+54
ulp : 0.5000
max.ulp : 0.0000
Change this by returning the input value when its absolute value is
greater than 0x1.0p23 or 0x1.0p52. NaN have to go through the add and
subtract operations to get possibly silenced.
Finally remove the code to handle inexact exception, trunc should never
generate such an exception.
Changelog:
* sysdeps/alpha/fpu/s_trunc.c (__trunc): Return the input value
when its absolute value is greater than 0x1.0p52.
[_IEEE_FP_INEXACT] Remove.
* sysdeps/alpha/fpu/s_truncf.c (__truncf): Return the input value
when its absolute value is greater than 0x1.0p23.
[_IEEE_FP_INEXACT] Remove.
Also fixed the following whitespace nits to satisfy the push:
sysdeps/alpha/alphaev6/memset.S:142: space before tab in indent.
sysdeps/alpha/configure:1: new blank line at EOF.
sysdeps/alpha/fpu/e_sqrt.c:126: space before tab in indent.
sysdeps/alpha/preconfigure:1: new blank line at EOF.
sysdeps/unix/sysv/linux/alpha/syscalls.list:1: new blank line at EOF.
* sysdeps/alpha/fpu/s_llroundf.c: New file.
* sysdeps/alpha/fpu/s_lround.c: New file.
* sysdeps/alpha/fpu/s_lroundf.c: New file.
* sysdeps/alpha/fpu/s_round.c: New file.
* sysdeps/alpha/fpu/s_roundf.c: New file.
* sysdeps/alpha/fpu/s_trunc.c: New file.
* sysdeps/alpha/fpu/s_truncf.c: New file.
* sysdeps/alpha/fpu/s_llround.c: New file.
* sysdeps/alpha/fpu/s_llroundf.c: New file.
* sysdeps/alpha/fpu/s_lround.c: New file.
* sysdeps/alpha/fpu/s_lroundf.c: New file.
* sysdeps/alpha/fpu/s_round.c: New file.
* sysdeps/alpha/fpu/s_roundf.c: New file.
* sysdeps/alpha/fpu/s_trunc.c: New file.
* sysdeps/alpha/fpu/s_truncf.c: New file.