glibc/sysdeps/nacl
Joseph Myers eaf5ad0bc4 Add canonicalize, canonicalizef, canonicalizel.
TS 18661-1 defines canonicalize functions to produce a canonical
version of a floating-point representation.  This patch implements
these functions for glibc.

As with the iscanonical macro, these functions are oriented to the
decimal floating-point case, where some values have both canonical and
noncanonical representations.  However, the functions have a return
value that says whether they succeeded in storing a canonical result;
thus, they can fail for the case of an invalid representation (while
still not making any particular choice from among multiple equally
canonical valid representations of the same value).  Since no
floating-point formats in glibc actually have noncanonical valid
representations, a type-generic implementation of these functions can
be used that expects iscanonical to return 0 only for invalid
representations.  Now that iscanonical is used within libm.so,
libm_hidden_proto / libm_hidden_def are added for __iscanonicall.

The definition of these functions is intended to correspond to a
convertFormat operation to the same floating-point format.  Thus, they
convert signaling NaNs to quiet NaNs, raising the "invalid" exception.
Such a conversion "should" produce "the canonical version of that
signaling NaN made quiet".

libm-test.inc is made to check NaN payloads for the output of these
functions, a new feature (at some point manipulation functions such as
fabs and copysign should have tests added that verify payload
preservation for them).  As however some architectures may not follow
the recommended practice of preserving NaN payloads when converting a
signaling NaN to quiet, a new math-tests.h macro
SNAN_TESTS_PRESERVE_PAYLOAD is added, and defined to 0 for non-NAN2008
MIPS; any other architectures seeing test failures for lack of payload
preservation in this case should also define this macro to 0.  (If any
cases arise where the sign isn't preserved either, those should have a
similar macro added.)

The ldbl-96 and ldbl-128ibm tests of iscanonical are renamed and
adapted to test canonicalizel as well on the same representations.

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(canonicalize): New declaration.
	* math/Versions (canonicalize): New libm symbol at version
	GLIBC_2.25.
	(canonicalizef): Likewise.
	(canonicalizel): Likewise.
	* math/Makefile (gen-libm-calls): Add s_canonicalizeF.
	* math/s_canonicalize_template.c: New file.
	* math/libm-test.inc: Update comment on functions tested and
	testing of NaN payloads.
	(TEST_NAN_PAYLOAD): New macro.
	(NO_TEST_INLINE): Update value.
	(XFAIL_TEST): Likewise.
	(ERRNO_UNCHANGED): Likewise.
	(ERRNO_EDOM): Likewise.
	(ERRNO_ERANGE): Likewise.
	(IGNORE_RESULT): Likewise.
	(NON_FINITE): Likewise.
	(TEST_SNAN): Likewise.
	(NO_TEST_MATHVEC): Likewise.
	(TEST_NAN_PAYLOAD_CANONICALIZE): New macro.
	(check_float_internal): Check NaN payloads if TEST_NAN_PAYLOAD.
	(struct test_Ffp_b1_data): New type.
	(RUN_TEST_Ffp_b1): New macro.
	(RUN_TEST_LOOP_Ffp_b1): Likewise.
	(canonicalize_test_data): New array.
	(canonicalize_test): New function.
	(main): Call canonicalize_test.
	* manual/arith.texi (FP Bit Twiddling): Document canonicalize,
	canonicalizef and canonicalizel.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_canonicalizel.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	canonicalize.
	(CFLAGS-nldbl-canonicalize.c): New variable.
	* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c: Move
	to ...
	* sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c:
	... here.
	(do_test): Also test canonicalizel.
	* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Change
	test-iscanonical-ldbl-128ibm to test-canonical-ldbl-128ibm.
	* sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h: New
	file.
	* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c (__iscanonicall):
	Use libm_hidden_def.
	* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Move to ...
	* sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c: ... here.
	(do_test): Also test canonicalizel.
	* sysdeps/ieee754/ldbl-96/Makefile (tests): Change
	test-iscanonical-ldbl-96 to test-canonical-ldbl-96.
	* sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h: New file.
	* sysdeps/ieee754/ldbl-96/s_iscanonicall.c (__iscanonicall): Use
	libm_hidden_def.
	* sysdeps/generic/math-tests.h (SNAN_TESTS_PRESERVE_PAYLOAD): New
	macro.
	* sysdeps/mips/math-tests.h [__mips_hard_float && !__mips_nan2008]
	(SNAN_TESTS_PRESERVE_PAYLOAD): Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-26 23:14:31 +00:00
..
bits Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Implies
Makefile Remove the ptw-% patterns 2016-09-14 16:02:06 +02:00
Subdirs
Versions NaCl: Implement nacl_interface_ext_supply entry point. 2015-06-03 13:51:11 -07:00
_exit.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
access.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
backtrace.c
brk.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
chdir.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
check_fds.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
chmod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
clock.c NaCl: Fix compile error in clock function. 2016-09-02 16:56:35 -07:00
clock_getres.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
clock_gettime.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
close.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
configure
configure.ac
createthread.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-fileid.h Factor file identity rules out of generic rtld code. 2015-07-14 13:15:26 -07:00
dl-map-segments.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-osinfo.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-sysdep-open.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-sysdep.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-unmap-segments.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-writev.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dup.c NaCl: Fix compile error for __dup after libc_hidden_proto addition. 2016-09-02 16:58:42 -07:00
dup2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
entry.h
errnos.awk Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
euidaccess.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
exit-thread.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fchdir.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fchmod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fdatasync.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fdopendir.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fork.c
fsync.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ftruncate.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ftruncate64.c
futex-internal.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fxstat.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fxstat64.c
getcwd.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getdents.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getdents64.c
getdtsz.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
gethostname.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getpagesize.c
getpid.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getsysstats.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
gettimeofday.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
glob.c Make sysdeps/posix bring in login subdir. 2015-07-23 17:04:22 -07:00
glob64.c
ifaddrs.c
init-first.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofdopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
irt.sed
isatty.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
kernel-features.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ld.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
ldsodefs.h Fix build with HAVE_AUX_VECTOR 2016-04-11 10:27:25 +02:00
libBrokenLocale.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libanl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libc-start.c
libcrypt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libdl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libm.abilist Add canonicalize, canonicalizef, canonicalizel. 2016-10-26 23:14:31 +00:00
libpthread.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libresolv.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
librt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libutil.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
link.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lll_timedlock_wait.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lll_timedwait_tid.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lowlevellock-futex.h NaCl: Fix unused variable errors in lowlevellock-futex.h macros. 2016-01-20 13:57:14 -08:00
lowlevellock.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lseek.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lseek64.c
lxstat.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lxstat64.c
mkdir.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mmap.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mmap64.c
mprotect.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
munmap.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-after-link.sh Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-interface-list.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-interface-table.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-interfaces.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-interfaces.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl-interfaces.mk.in
nacl-test-wrapper.sh Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl_interface_ext_supply.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nacl_interface_query.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
nanosleep.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
open.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
open64.c
preconfigure
profil.c
pthread-pids.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
pthread_condattr_setclock.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
read.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
readdir.c
readdir64.c
readdir64_r.c
readdir_r.c
readlink.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rename.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rmdir.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sched_yield.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
shlib-versions
sigaction.c
sprofil.c
start.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
symlink.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tls.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
truncate.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
truncate64.c
uname-values.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
unlink.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
utimes.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
write.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
xstat.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
xstat64.c
xstatconv.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
xstatconv.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00