summary refs log tree commit diff
path: root/sysdeps/alpha/fpu/s_trunc.c
Commit message (Collapse)AuthorAgeFilesLines
* alpha: Remove s_trunc{f} implementation (BZ#22666)Adhemerval Zanella2018-01-041-45/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As discussed in libc-alpha [1], alpha trunc{f} implementation uses addt/suc and subt/suc and although the Alpha Architecture Handbook version 3 states that that ADDx SUBx OUTPUT Exceptions (B.3 Mapping to IEEE Standard) should not generate Inexact if INE bit is set, the Alpha 21264 [2] chip manual (A.8 IEEE Floating-Point Conformance) states that ADDx SUBx OUTPUT does generate inexact exception for inexact result regardless. As Joseph noted [3] to correctly fix it on alpha we need to either avoid the instruction or avoid any inexact bit from it being set on return from the function (while preserving the inexact bit that might be set on the entry to the function). The later will result mf_fpcr followed by a mt_fpcr to get and set the fpcr which will defeat the optimization itself. So the patch just remove the alpha optimized and rely on generic implementation. It fixes the math/test-*-{trunc} on alpha. [BZ #15479] [BZ #22666] * sysdeps/alpha/fpu/s_trunc.c: Remove file. * sysdeps/alpha/fpu/s_truncf.c: Likewise. [1] https://sourceware.org/ml/libc-alpha/2018-01/msg00114.html [2] https://www.star.bnl.gov/public/daq/HARDWARE/21264_data_sheet.pdf [3] https://sourceware.org/ml/libc-alpha/2018-01/msg00086.html Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Update copyright dates with scripts/update-copyrights.Joseph Myers2018-01-011-1/+1
| | | | | | | * All files with FSF copyright notices: Update copyright dates using scripts/update-copyrights. * locale/programs/charmap-kw.h: Regenerated. * locale/programs/locfile-kw.h: Likewise.
* Use libm_alias_double for alpha.Joseph Myers2017-11-281-8/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Continuing the preparation for additional _FloatN / _FloatNx function aliases, this patch makes alpha libm function implementations use libm_alias_double to define function aliases. This also simplifies the code because the compatibility for long double = double is handled by libm_alias_double instead of locally in each source file. Tested with build-many-glibcs.py for alpha-linux-gnu that installed stripped shared libraries are unchanged by the patch. * sysdeps/alpha/fpu/s_ceil.c: Include <libm-alias-double.h>. (ceil): Define using libm_alias_double. * sysdeps/alpha/fpu/s_copysign.c: Include <libm-alias-double.h>. (copysign): Define using libm_alias_double. * sysdeps/alpha/fpu/s_fabs.c: Include <libm-alias-double.h>. (fabs): Define using libm_alias_double. * sysdeps/alpha/fpu/s_floor.c: Include <libm-alias-double.h>. (floor): Define using libm_alias_double. * sysdeps/alpha/fpu/s_fmax.S: Include <libm-alias-double.h>. (fmax): Define using libm_alias_double. * sysdeps/alpha/fpu/s_fmin.S: Include <libm-alias-double.h>. (fmin): Define using libm_alias_double. * sysdeps/alpha/fpu/s_lrint.c: Include <libm-alias-double.h>. (lrint): Define using libm_alias_double. (llrint): Likewise. * sysdeps/alpha/fpu/s_lround.c: Include <libm-alias-double.h>. (lround): Define using libm_alias_double. (llround): Likewise. * sysdeps/alpha/fpu/s_rint.c: Include <libm-alias-double.h>. (rint): Define using libm_alias_double. * sysdeps/alpha/fpu/s_trunc.c: Include <libm-alias-double.h>. (trunc): Define using libm_alias_double.
* Update copyright dates with scripts/update-copyrights.Joseph Myers2017-01-011-1/+1
|
* alpha: fix trunc for big input valuesAurelien Jarno2016-08-021-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Update copyright dates with scripts/update-copyrights.Joseph Myers2016-01-041-1/+1
|
* Update copyright dates with scripts/update-copyrights.Joseph Myers2015-01-021-1/+1
|
* Relocate alpha from ports to libcRichard Henderson2014-02-121-0/+52
| | | | | | | | | | 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.
* Moved alpha to ports repository.Roland McGrath2008-11-261-53/+0
| | | | | | | | | | | 2008-11-25 Roland McGrath <roland@redhat.com> * sysdeps/alpha, sysdeps/unix/bsd/osf/alpha, sysdeps/unix/bsd/Attic/osf1/alpha, sysdeps/unix/sysv/linux/alpha, sysdeps/unix/sysv/linux/alpha/alpha, sysdeps/unix/alpha, sysdeps/mach/alpha, sysdeps/mach/hurd/alpha: Subdirectories moved to ports repository. * configure.in (base_machine): Remove alpha case.
* 2007-05-07 Richard Henderson <rth@redhat.com>Richard Henderson2007-05-071-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * sysdeps/alpha/fpu/bits/mathinline.h (__isnanl): Don't define if __NO_LONG_DOUBLE_MATH. * sysdeps/unix/sysv/linux/alpha/ioperm.c: If BWX insns not available in the compiler, add .arch directive to ethe assembly. 2007-05-07 Jakub Jelinek <jakub@redhat.com> * sysdeps/alpha/fpu/s_nearbyint.c (nearbyintl): Fix version on compat_symbol to GLIBC_2_1. * sysdeps/alpha/fpu/s_fmin.S (fminl): Likewise. * sysdeps/alpha/fpu/s_trunc.c (truncl): Likewise. * sysdeps/alpha/fpu/s_fmax.S (fmaxl): Likewise. * sysdeps/alpha/fpu/s_lrint.c (lrintl, llrintl): Likewise. * sysdeps/alpha/fpu/s_lround.c (lroundl, llroundl): Likewise. * sysdeps/alpha/fpu/s_round.c (roundl): Likewise. * sysdeps/alpha/fpu/s_isnan.c (isnanl): Provide compat_symbol in libc, not libm. (__isnanl): New compat_symbol. 2007-05-07 Richard Henderson <rth@redhat.com> * sysdeps/alpha/fpu/bits/mathinline.h (__isnanl): Don't define if __NO_LONG_DOUBLE_MATH. * sysdeps/unix/sysv/linux/alpha/ioperm.c: If BWX insns not available in the compiler, add .arch directive to ethe assembly. 2007-05-07 Jakub Jelinek <jakub@redhat.com> * sysdeps/alpha/fpu/s_nearbyint.c (nearbyintl): Fix version on compat_symbol to GLIBC_2_1. * sysdeps/alpha/fpu/s_fmin.S (fminl): Likewise. * sysdeps/alpha/fpu/s_trunc.c (truncl): Likewise. * sysdeps/alpha/fpu/s_fmax.S (fmaxl): Likewise. * sysdeps/alpha/fpu/s_lrint.c (lrintl, llrintl): Likewise. * sysdeps/alpha/fpu/s_lround.c (lroundl, llroundl): Likewise. * sysdeps/alpha/fpu/s_round.c (roundl): Likewise. * sysdeps/alpha/fpu/s_isnan.c (isnanl): Provide compat_symbol in libc, not libm. (__isnanl): New compat_symbol. Peter Bergner <bergner@us.ibm.com> * elf/dl-support.c (_dl_aux_init): Honor DL_PLATFORM_AUXV.
* * sysdeps/alpha/fpu/s_llround.c: New file. Richard Henderson2007-03-141-0/+53
* 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.