glibc/sysdeps/ieee754/dbl-64
Joseph Myers 5e9d98a3d9 Add totalorder, totalorderf, totalorderl.
TS 18661-1 defines totalorder functions implementing the totalOrder
comparison operation from IEEE 754-2008.  This patch implements these
functions for glibc, including the type-generic macro in <tgmath.h>.
(The totalordermag functions will be added in a separate patch.)

The description of the totalOrder operation is complicated.  However,
for IEEE interchange binary formats and the preferred quiet NaN
convention, what that complicated description means is that you
interpret the representation as a sign-magnitude integer (with -0
coming before +0) and do a <= comparison on that interpretation.  For
finite values and infinities the ordering of the sign-magnitude
integers is just the same as the ordering of floating-point values, so
this extends that to all representations.  (Different representations
of the same floating-point value - which includes same quantum in the
decimal case - must still be considered equal by this operation, but
that issue doesn't arise for IEEE interchange binary formats.)  So the
complications are:

* When MIPS quiet NaN conventions are in use, the representation of
  NaNs needs adjusting before making such an integer comparison.  This
  patch does this adjustment only when both arguments are NaNs, as
  there's no need for it if only one is a NaN, and as long as both are
  NaNs you can just flip the relevant bits without any problems from
  this turning a NaN into an infinity.

* For the m68k version of ldbl-96, where the high mantissa bit is
  "don't care" for infinities and NaNs, representations where it
  differs must compare the same.  Note: although the testcase for this
  compiles, I have not actually tested on m68k.

* For ldbl-128ibm, the low part must be ignored when the high part is
  NaN, and low parts of +0 and -0 must be considered the same whatever
  the high part.

The new tests in libm-test.inc are the first tests there specifying
particular payloads for input NaNs.  Separate tests are also added for
the ldbl-96 and ldbl-128ibm special cases where there are different
representations of the same value that must compare equal (which can't
be covered in libm-test.inc as that only specifies values, not
representations).

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(totalorder): New declaration.
	* math/tgmath.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (totalorder):
	New macro.
	* math/Versions (totalorder): New libm symbol at version
	GLIBC_2.25.
	(totalorderf): Likewise.
	(totalorderl): Likewise.
	* math/Makefile (libm-calls): Add s_totalorderF.
	* math/gen-libm-test.pl (parse_args): Escape quotes in test name
	string.
	* math/libm-test.inc (PAYLOAD_DIG): New macro.
	(qnan_value_pl): Likewise.
	(snan_value_pl): Likewise.
	(qnan_value): Define using qnan_value_pl.
	(snan_value): Define using snan_value_pl.
	(struct test_ff_i_data): Add comment about which tests use this
	structure.
	(RUN_TEST_ff_b): New macro.
	(RUN_TEST_LOOP_ff_b): Likewise.
	(totalorder_test_data): New array.
	(totalorder_test): New function.
	(main): Call totalorder_test.
	* math/test-tgmath.c (NCALLS): Increase to 122.
	(F(compile_test)): Call totalorder.
	(F(totalorder)): New function.
	* manual/arith.texi (FP Comparison Functions): Document
	totalorder, totalorderf and totalorderl.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/dbl-64/s_totalorder.c: New file.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c: Likewise.
	* sysdeps/ieee754/flt-32/s_totalorderf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	totalorder.
	(CFLAGS-nldbl-totalorder.c): New variable.
	* sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c: New
	file.
	* sysdeps/ieee754/ldbl-128ibm/Makefile [$(subdir) = math] (tests):
	Add test-totalorderl-ldbl-128ibm.
	* sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c: New file.
	* sysdeps/ieee754/ldbl-96/Makefile [$(subdir) = math] (tests): Add
	test-totalorderl-ldbl-96.
	* 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-12 01:20:30 +00:00
..
wordsize-64 Add totalorder, totalorderf, totalorderl. 2016-10-12 01:20:30 +00:00
asincos.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
atnat2.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
atnat.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
branred.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
branred.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dbl2mpn.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dla.h Use __builtin_fma more in dbl-64 code. 2016-09-30 15:49:51 +00:00
doasin.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
doasin.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dosincos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dosincos.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_acos.c Update. 2001-03-12 00:04:52 +00:00
e_acosh.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_asin.c Fix dbl-64 asin (sNaN) (bug 20213). 2016-06-06 22:21:11 +00:00
e_atan2.c Fix dbl-64 atan2 (sNaN, qNaN) (bug 20252). 2016-06-13 21:43:22 +00:00
e_atanh.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_cosh.c Avoid excess range overflowing results from cosh, sinh, lgamma (bug 18980). 2015-09-18 20:00:48 +00:00
e_exp2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_exp10.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_exp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_fmod.c Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
e_gamma_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_hypot.c Fix hypot missing underflows (bug 18803). 2015-09-24 23:43:57 +00:00
e_ilogb.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_j0.c Avoid uninitialized warnings in Bessel functions. 2015-02-26 21:49:19 +00:00
e_j1.c Fix j1, jn missing errno setting on underflow (bug 18611). 2015-10-23 21:37:33 +00:00
e_jn.c Fix j1, jn missing errno setting on underflow (bug 18611). 2015-10-23 21:37:33 +00:00
e_lgamma_r.c Remove GCC version conditionals on -Wmaybe-uninitialized pragmas. 2015-10-27 23:42:20 +00:00
e_log2.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_log10.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_log.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_pow.c Eliminate redundant sign extensions in pow() 2016-01-04 14:55:38 -02:00
e_rem_pio2.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_remainder.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_sinh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_sqrt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
gamma_product.c Merge common usage of mul_split function 2016-08-19 11:29:43 -05:00
gamma_productf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
halfulp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
k_cos.c Update. 2001-03-12 00:04:52 +00:00
k_rem_pio2.c Get rid of array-bounds warning in __kernel_rem_pio2[f] with gcc 6.1 -O3. 2016-08-18 12:20:35 +02:00
k_sin.c Update. 2001-03-12 00:04:52 +00:00
k_tan.c Replace sysdeps/ieee754/dbl-64/k_tan.c with empty file 2012-02-26 16:10:46 +01:00
lgamma_neg.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
lgamma_product.c Merge common usage of mul_split function 2016-08-19 11:29:43 -05:00
Makefile powerpc: Fix incorrect results for pow when using FMA 2015-03-10 09:38:54 -04:00
MathLib.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpa-arch.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpa.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpa.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpatan2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpatan.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpatan.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpexp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mplog.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpn2dbl.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpsqrt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpsqrt.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mptan.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mydefs.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
powtwo.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
root.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_asinh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_atan.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_cbrt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_ceil.c Do not raise "inexact" from generic ceil (bug 15479). 2016-05-24 17:42:10 +00:00
s_copysign.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_cos.c Update. 2001-03-12 00:04:52 +00:00
s_erf.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_expm1.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_fabs.c 2015-05-28 Wilco Dijkstra <wdijkstr@arm.com> 2015-05-28 11:42:55 +01:00
s_finite.c Fix __finitel libm compat symbol version. 2016-01-20 19:04:43 +00:00
s_floor.c Do not raise "inexact" from generic floor (bug 15479). 2016-05-24 17:44:46 +00:00
s_fma.c Call math_opt_barrier inside if 2016-01-15 05:23:20 -08:00
s_fmaf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fpclassify.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_frexp.c Fix frexp (NaN) (bug 20250). 2016-06-13 17:27:19 +00:00
s_isinf.c math: add LDBL_CLASSIFY_COMPAT support 2015-12-03 13:00:46 -05:00
s_isnan.c math: add LDBL_CLASSIFY_COMPAT support 2015-12-03 13:00:46 -05:00
s_issignaling.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_llrint.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_llround.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_log1p.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_logb.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_lrint.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_lround.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_modf.c Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
s_nearbyint.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_nexttoward.c Update. 1999-07-14 00:54:57 +00:00
s_nextup.c Add nextup and nextdown math functions 2016-06-16 21:37:45 +05:30
s_remquo.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_rint.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_round.c Do not raise "inexact" from generic round (bug 15479). 2016-05-24 17:46:55 +00:00
s_scalbln.c [BZ #6803] Set errno for scalbln, scalbn 2014-06-20 07:48:20 +05:30
s_scalbn.c Make scalbn set errno (bug 6803). 2015-09-16 21:11:00 +00:00
s_signbit.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_sin.c Update comments for some functions in s_sin.c 2016-10-06 13:09:02 +05:30
s_sincos.c Adjust calls to do_sincos_1 and do_sincos_2 in s_sincos.c 2016-10-06 12:57:07 +05:30
s_tan.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_tanh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_totalorder.c Add totalorder, totalorderf, totalorderl. 2016-10-12 01:20:30 +00:00
s_trunc.c sparc64: add a VIS3 version of ceil, floor and trunc 2016-08-03 13:35:22 +02:00
sincos32.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sincos32.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sincostab.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
slowexp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
slowpow.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
t_exp2.h Update. 1999-07-14 00:54:57 +00:00
t_exp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
uasncs.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
uatan.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
uexp.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
uexp.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ulog.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ulog.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
upow.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
upow.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
urem.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
usncs.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
utan.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
utan.tbl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
w_exp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
x2y2m1.c Merge common usage of mul_split function 2016-08-19 11:29:43 -05:00
x2y2m1f.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00