Add setpayloadsig, setpayloadsigf, setpayloadsigl.

TS 18661-1 defines functions for manipulating the payloads of NaNs.
This patch implements the setpayloadsig functions for glibc; these are
like the setpayload functions, but produce a signaling NaN instead of
a quiet NaN.

The substance of the implementation was included with the setpayload
implementation, so the new files here just need to wrap the main files
with different defines to build the new functions.

Because the functions store a signaling NaN via a pointer and the
libm-test macros choose a suitable initial value for the variable in
such a case by comparing with the expected value, the relevant macro
needs to clear exceptions after FE_INVALID may have been raised by
that comparison.

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(setpayloadsig): New declaration.
	* math/Versions (setpayloadsig): New libm symbol at version
	GLIBC_2.25.
	(setpayloadsigf): Likewise.
	(setpayloadsigl): Likewise.
	* math/Makefile (libm-calls): Add s_setpayloadsigF.
	* math/libm-test.inc (RUN_TEST_Ff_b1): Call feclearexcept
	(FE_ALL_EXCEPT) after initializing EXTRA_VAR.
	(setpayloadsig_test_data): New array.
	(setpayloadsig_test): New function.
	(main): Call setpayloadsig_test.
	* manual/arith.texi (FP Bit Twiddling): Document setpayloadsig,
	setpayloadsigf and setpayloadsigl.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/dbl-64/s_setpayloadsig.c: New file.
	* sysdeps/ieee754/flt-32/s_setpayloadsigf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	setpayloadsig.
	(CFLAGS-nldbl-setpayloadsig.c): New variable.
	* 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.
This commit is contained in:
Joseph Myers 2016-11-24 23:56:48 +00:00
parent 02c78f02a9
commit 457663a7cd
42 changed files with 300 additions and 5 deletions

View File

@ -1,5 +1,64 @@
2016-11-24 Joseph Myers <joseph@codesourcery.com> 2016-11-24 Joseph Myers <joseph@codesourcery.com>
* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
(setpayloadsig): New declaration.
* math/Versions (setpayloadsig): New libm symbol at version
GLIBC_2.25.
(setpayloadsigf): Likewise.
(setpayloadsigl): Likewise.
* math/Makefile (libm-calls): Add s_setpayloadsigF.
* math/libm-test.inc (RUN_TEST_Ff_b1): Call feclearexcept
(FE_ALL_EXCEPT) after initializing EXTRA_VAR.
(setpayloadsig_test_data): New array.
(setpayloadsig_test): New function.
(main): Call setpayloadsig_test.
* manual/arith.texi (FP Bit Twiddling): Document setpayloadsig,
setpayloadsigf and setpayloadsigl.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/ieee754/dbl-64/s_setpayloadsig.c: New file.
* sysdeps/ieee754/flt-32/s_setpayloadsigf.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c: Likewise.
* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
setpayloadsig.
(CFLAGS-nldbl-setpayloadsig.c): New variable.
* 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.
* scripts/build-many-glibcs.py: Import json module. * scripts/build-many-glibcs.py: Import json module.
(Context.__init__): Take replace_sources argument. Load (Context.__init__): Take replace_sources argument. Load
versions.json. versions.json.

2
NEWS
View File

@ -63,7 +63,7 @@ Version 2.25
- Canonicalize functions: canonicalize, canonicalizef, canonicalizel. - Canonicalize functions: canonicalize, canonicalizef, canonicalizel.
- NaN functions: getpayload, getpayloadf, getpayloadl, setpayload, - NaN functions: getpayload, getpayloadf, getpayloadl, setpayload,
setpayloadf, setpayloadl. setpayloadf, setpayloadl, setpayloadsig, setpayloadsigf, setpayloadsigl.
* The functions strfromd, strfromf, and strfroml, from ISO/IEC TS 18661-1:2014, * The functions strfromd, strfromf, and strfroml, from ISO/IEC TS 18661-1:2014,
are added to libc. They convert a floating-point number into string. are added to libc. They convert a floating-point number into string.

View File

@ -1932,6 +1932,24 @@ object pointed to by @var{x} is set to positive zero and a nonzero
value is returned. They raise no floating-point exceptions. value is returned. They raise no floating-point exceptions.
@end deftypefun @end deftypefun
@comment math.h
@comment ISO
@deftypefun int setpayloadsig (double *@var{x}, double @var{payload})
@comment math.h
@comment ISO
@deftypefunx int setpayloadsigf (float *@var{x}, float @var{payload})
@comment math.h
@comment ISO
@deftypefunx int setpayloadsigl (long double *@var{x}, long double @var{payload})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions, defined by TS 18661-1:2014, set the object pointed to
by @var{x} to a signaling NaN with payload @var{payload} and a zero
sign bit and return zero. If @var{payload} is not a positive-signed
integer that is a valid payload for a signaling NaN of the given type,
the object pointed to by @var{x} is set to positive zero and a nonzero
value is returned. They raise no floating-point exceptions.
@end deftypefun
@node FP Comparison Functions @node FP Comparison Functions
@subsection Floating-Point Comparison Functions @subsection Floating-Point Comparison Functions
@cindex unordered comparison @cindex unordered comparison

View File

@ -67,7 +67,8 @@ use vars qw (%results @all_floats %suffices @all_functions);
# canonicalize, fpclassify, getpayload, iscanonical, isnormal, # canonicalize, fpclassify, getpayload, iscanonical, isnormal,
# isfinite, isinf, isnan, issignaling, issubnormal, iszero, signbit, # isfinite, isinf, isnan, issignaling, issubnormal, iszero, signbit,
# iseqsig, isgreater, isgreaterequal, isless, islessequal, # iseqsig, isgreater, isgreaterequal, isless, islessequal,
# islessgreater, isunordered, setpayload, totalorder, totalordermag # islessgreater, isunordered, setpayload, setpayloadsig,
# totalorder, totalordermag
# are not tabulated. # are not tabulated.
if ($#ARGV == 0) { if ($#ARGV == 0) {

View File

@ -74,7 +74,7 @@ libm-calls = \
s_issignalingF $(calls:s_%=m_%) x2y2m1F \ s_issignalingF $(calls:s_%=m_%) x2y2m1F \
gamma_productF lgamma_negF lgamma_productF \ gamma_productF lgamma_negF lgamma_productF \
s_nextupF s_totalorderF s_totalordermagF s_getpayloadF \ s_nextupF s_totalorderF s_totalordermagF s_getpayloadF \
s_setpayloadF $(gen-libm-calls) s_setpayloadF s_setpayloadsigF $(gen-libm-calls)
libm-compat-calls-ldouble-yes = w_lgamma_compatl k_standardl libm-compat-calls-ldouble-yes = w_lgamma_compatl k_standardl
libm-compat-calls = w_lgamma_compatf w_lgamma_compat k_standard k_standardf \ libm-compat-calls = w_lgamma_compatf w_lgamma_compat k_standard k_standardf \

View File

@ -222,5 +222,6 @@ libm {
getpayload; getpayloadf; getpayloadl; getpayload; getpayloadf; getpayloadl;
canonicalize; canonicalizef; canonicalizel; canonicalize; canonicalizef; canonicalizel;
setpayload; setpayloadf; setpayloadl; setpayload; setpayloadf; setpayloadl;
setpayloadsig; setpayloadsigf; setpayloadsigl;
} }
} }

View File

@ -403,6 +403,9 @@ __MATHCALL (getpayload,, (const _Mdouble_ *__x));
/* Set quiet NaN payload. */ /* Set quiet NaN payload. */
__MATHDECL_1 (int, setpayload,, (_Mdouble_ *__x, _Mdouble_ __payload)); __MATHDECL_1 (int, setpayload,, (_Mdouble_ *__x, _Mdouble_ __payload));
/* Set signaling NaN payload. */
__MATHDECL_1 (int, setpayloadsig,, (_Mdouble_ *__x, _Mdouble_ __payload));
#endif #endif
#if defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \ #if defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \

View File

@ -54,7 +54,8 @@
modf, nearbyint, nextafter, nexttoward, modf, nearbyint, nextafter, nexttoward,
pow, pow10, remainder, remquo, rint, lrint, llrint, pow, pow10, remainder, remquo, rint, lrint, llrint,
round, lround, llround, round, lround, llround,
scalb, scalbn, scalbln, setpayload, signbit, sin, sincos, sinh, sqrt, scalb, scalbn, scalbln, setpayload, setpayloadsig, signbit,
sin, sincos, sinh, sqrt,
tan, tanh, tgamma, totalorder, totalordermag, trunc, tan, tanh, tgamma, totalorder, totalordermag, trunc,
y0, y1, yn, significand y0, y1, yn, significand
@ -1592,6 +1593,9 @@ struct test_Ff_b1_data
{ \ { \
COMMON_TEST_SETUP (ARG_STR); \ COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \ (EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
/* Clear any exceptions from comparison involving sNaN \
EXTRA_EXPECTED. */ \
feclearexcept (FE_ALL_EXCEPT); \
check_bool (test_name, FUNC_TEST (FUNC_NAME) (&(EXTRA_VAR), \ check_bool (test_name, FUNC_TEST (FUNC_NAME) (&(EXTRA_VAR), \
(ARG)), \ (ARG)), \
EXPECTED, EXCEPTIONS); \ EXPECTED, EXCEPTIONS); \
@ -12417,6 +12421,88 @@ setpayload_test (void)
} }
static const struct test_Ff_b1_data setpayloadsig_test_data[] =
{
#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
TEST_Ff_b1 (setpayloadsig, plus_zero, 0, snan_value_pl ("0x0"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, plus_zero, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
TEST_Ff_b1 (setpayloadsig, 0x1p0, 0, snan_value_pl ("0x1"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
TEST_Ff_b1 (setpayloadsig, 0x2p0, 0, snan_value_pl ("0x2"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
TEST_Ff_b1 (setpayloadsig, 0x3fffffp0, 0, snan_value_pl ("0x3fffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#if PAYLOAD_DIG >= 51
TEST_Ff_b1 (setpayloadsig, 0x7ffffffffffffp0, 0, snan_value_pl ("0x7ffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x7ffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if PAYLOAD_DIG >= 62
TEST_Ff_b1 (setpayloadsig, 0x3fffffffffffffffp0, 0, snan_value_pl ("0x3fffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x3fffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if PAYLOAD_DIG >= 111
TEST_Ff_b1 (setpayloadsig, 0x7fffffffffffffffffffffffffffp0, 0, snan_value_pl ("0x7fffffffffffffffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x7fffffffffffffffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
TEST_Ff_b1 (setpayloadsig, minus_zero, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -1.0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -2.0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, 0.5, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -0.5, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, max_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -max_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, min_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -min_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, min_subnorm_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -min_subnorm_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, plus_infty, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, minus_infty, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, qnan_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -qnan_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, snan_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, -snan_value, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_Ff_b1 (setpayloadsig, 0xffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#if MANT_DIG >= 53
TEST_Ff_b1 (setpayloadsig, 0x1fffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if MANT_DIG >= 64
TEST_Ff_b1 (setpayloadsig, 0xffffffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if MANT_DIG >= 106
TEST_Ff_b1 (setpayloadsig, 0x3ffffffffffffffffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if MANT_DIG >= 113
TEST_Ff_b1 (setpayloadsig, 0x1ffffffffffffffffffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if PAYLOAD_DIG >= 23
TEST_Ff_b1 (setpayloadsig, 0x1p22, 0, snan_value_pl ("0x400000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x1p22, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if PAYLOAD_DIG >= 52
TEST_Ff_b1 (setpayloadsig, 0x1p51, 0, snan_value_pl ("0x8000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x1p51, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
#if PAYLOAD_DIG >= 63
TEST_Ff_b1 (setpayloadsig, 0x1p62, 0, snan_value_pl ("0x4000000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
#else
TEST_Ff_b1 (setpayloadsig, 0x1p62, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
#endif
TEST_Ff_b1 (setpayloadsig, 0x1p111, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
};
static void
setpayloadsig_test (void)
{
FLOAT x;
ALL_RM_TEST (setpayloadsig, 1, setpayloadsig_test_data, RUN_TEST_LOOP_Ff_b1, END, x);
}
static const struct test_f_i_data signbit_test_data[] = static const struct test_f_i_data signbit_test_data[] =
{ {
TEST_f_b (signbit, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_b (signbit, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@ -13760,6 +13846,7 @@ main (int argc, char **argv)
/* NaN functions: */ /* NaN functions: */
getpayload_test (); getpayload_test ();
setpayload_test (); setpayload_test ();
setpayloadsig_test ();
/* Complex functions: */ /* Complex functions: */
cabs_test (); cabs_test ();

View File

@ -0,0 +1,6 @@
#define SIG 1
#define FUNC setpayloadsig
#include <s_setpayload_main.c>
#ifdef NO_LONG_DOUBLE
weak_alias (setpayloadsig, setpayloadsigl)
#endif

View File

@ -0,0 +1,3 @@
#define SIG 1
#define FUNC setpayloadsigf
#include <s_setpayloadf_main.c>

View File

@ -0,0 +1,3 @@
#define SIG 1
#define FUNC setpayloadsigl
#include <s_setpayloadl_main.c>

View File

@ -0,0 +1,3 @@
#define SIG 1
#define FUNC setpayloadsigl
#include <s_setpayloadl_main.c>

View File

@ -0,0 +1,3 @@
#define SIG 1
#define FUNC setpayloadsigl
#include <s_setpayloadl_main.c>

View File

@ -43,7 +43,7 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \
isoc99_wscanf isoc99_fwscanf isoc99_swscanf \ isoc99_wscanf isoc99_fwscanf isoc99_swscanf \
isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \ isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \
nextup nextdown totalorder totalordermag getpayload \ nextup nextdown totalorder totalordermag getpayload \
canonicalize setpayload canonicalize setpayload setpayloadsig
libnldbl-routines = $(libnldbl-calls:%=nldbl-%) libnldbl-routines = $(libnldbl-calls:%=nldbl-%)
libnldbl-inhibit-o = $(object-suffixes) libnldbl-inhibit-o = $(object-suffixes)
libnldbl-static-only-routines = $(libnldbl-routines) libnldbl-static-only-routines = $(libnldbl-routines)
@ -139,6 +139,7 @@ CFLAGS-nldbl-scalb.c = -fno-builtin-scalbl
CFLAGS-nldbl-scalbln.c = -fno-builtin-scalblnl CFLAGS-nldbl-scalbln.c = -fno-builtin-scalblnl
CFLAGS-nldbl-scalbn.c = -fno-builtin-scalbnl CFLAGS-nldbl-scalbn.c = -fno-builtin-scalbnl
CFLAGS-nldbl-setpayload.c = -fno-builtin-setpayloadl CFLAGS-nldbl-setpayload.c = -fno-builtin-setpayloadl
CFLAGS-nldbl-setpayloadsig.c = -fno-builtin-setpayloadsigl
CFLAGS-nldbl-significand.c = -fno-builtin-significandl CFLAGS-nldbl-significand.c = -fno-builtin-significandl
CFLAGS-nldbl-sin.c = -fno-builtin-sinl CFLAGS-nldbl-sin.c = -fno-builtin-sinl
CFLAGS-nldbl-sincos.c = -fno-builtin-sincosl CFLAGS-nldbl-sincos.c = -fno-builtin-sincosl

View File

@ -0,0 +1,26 @@
/* Compatibility routine for IEEE double as long double for setpayloadsig.
Copyright (C) 2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include "nldbl-compat.h"
int
attribute_hidden
setpayloadsigl (double *x, double payload)
{
return setpayloadsig (x, payload);
}

View File

@ -395,6 +395,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -427,6 +427,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -437,6 +437,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -84,6 +84,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -396,6 +396,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -440,6 +440,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -369,6 +369,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -84,6 +84,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -438,6 +438,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -395,6 +395,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -397,6 +397,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -429,6 +429,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -395,6 +395,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -440,6 +440,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -439,6 +439,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -434,6 +434,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -115,6 +115,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -427,6 +427,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -425,6 +425,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -396,6 +396,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -430,6 +430,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -428,6 +428,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -396,6 +396,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -396,6 +396,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -396,6 +396,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -429,6 +429,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F

View File

@ -428,6 +428,9 @@ GLIBC_2.25 getpayloadl F
GLIBC_2.25 setpayload F GLIBC_2.25 setpayload F
GLIBC_2.25 setpayloadf F GLIBC_2.25 setpayloadf F
GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadl F
GLIBC_2.25 setpayloadsig F
GLIBC_2.25 setpayloadsigf F
GLIBC_2.25 setpayloadsigl F
GLIBC_2.25 totalorder F GLIBC_2.25 totalorder F
GLIBC_2.25 totalorderf F GLIBC_2.25 totalorderf F
GLIBC_2.25 totalorderl F GLIBC_2.25 totalorderl F