diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2018-02-10 02:08:43 +0000 |
|---|---|---|
| committer | Joseph Myers <joseph@codesourcery.com> | 2018-02-10 02:08:43 +0000 |
| commit | d8742dd82f6a00601155c69bad3012e905591e1f (patch) | |
| tree | d37836d2d6af8b428dc3092466bea93c2624469f /math | |
| parent | a85b70dbd2efb84123dcfb7a2131b2de81b59b6a (diff) | |
| download | glibc-d8742dd82f6a00601155c69bad3012e905591e1f.tar.xz glibc-d8742dd82f6a00601155c69bad3012e905591e1f.zip | |
Add narrowing add functions.
This patch adds the narrowing add functions from TS 18661-1 to glibc's
libm: fadd, faddl, daddl, f32addf64, f32addf32x, f32xaddf64 for all
configurations; f32addf64x, f32addf128, f64addf64x, f64addf128,
f32xaddf64x, f32xaddf128, f64xaddf128 for configurations with
_Float64x and _Float128; __nldbl_daddl for ldbl-opt. As discussed for
the build infrastructure patch, tgmath.h support is deliberately
deferred, and FP_FAST_* macros are not applicable without optimized
function implementations.
Function implementations are added for all relevant pairs of formats
(including certain cases of a format and itself where more than one
type has that format). The main implementations use round-to-odd, or
a trivial computation in the case where both formats are the same or
where the wider format is IBM long double (in which case we don't
attempt to be correctly rounding). The sysdeps/ieee754/soft-fp
implementations use soft-fp, and are used automatically for
configurations without exceptions and rounding modes by virtue of
existing Implies files. As previously discussed, optimized versions
for particular architectures are possible, but not included.
i386 gets a special version of f32xaddf64 to avoid problems with
double rounding (similar to the existing fdim version), since this
function must round just once without an intermediate rounding to long
double. (No such special version is needed for any other function,
because the nontrivial functions use round-to-odd, which does the
intermediate computation with the rounding mode set to round-to-zero,
and double rounding is OK except in round-to-nearest mode, so is OK
for that intermediate round-to-zero computation.) mul and div will
need slightly different special versions for i386 (using round-to-odd
on long double instead of precision control) because of the
possibility of inexact intermediate results in the subnormal range for
double.
To reduce duplication among the different function implementations,
math-narrow.h gets macros CHECK_NARROW_ADD, NARROW_ADD_ROUND_TO_ODD
and NARROW_ADD_TRIVIAL.
In the trivial cases and for any architecture-specific optimized
implementations, the overhead of the errno setting might be
significant, but I think that's best handled through compiler built-in
functions rather than providing separate no-errno versions in glibc
(and likewise there are no __*_finite entry points for these function
provided, __*_finite effectively being no-errno versions at present in
most cases).
Tested for x86_64 and x86, with both GCC 6 and GCC 7. Tested for
mips64 (all three ABIs, both hard and soft float) and powerpc with GCC
7. Tested with build-many-glibcs.py with both GCC 6 and GCC 7.
* math/Makefile (libm-narrow-fns): Add add.
(libm-test-funcs-narrow): Likewise.
* math/Versions (GLIBC_2.28): Add narrowing add functions.
* math/bits/mathcalls-narrow.h (add): Use __MATHCALL_NARROW .
* math/gen-auto-libm-tests.c (test_functions): Add add.
* math/math-narrow.h (CHECK_NARROW_ADD): New macro.
(NARROW_ADD_ROUND_TO_ODD): Likewise.
(NARROW_ADD_TRIVIAL): Likewise.
* sysdeps/ieee754/float128/float128_private.h (__faddl): New
macro.
(__daddl): Likewise.
* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fadd and
dadd.
(CFLAGS-nldbl-dadd.c): New variable.
(CFLAGS-nldbl-fadd.c): Likewise.
* sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add
__nldbl_daddl.
* sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_daddl): New
prototype.
* manual/arith.texi (Misc FP Arithmetic): Document fadd, faddl,
daddl, fMaddfN, fMaddfNx, fMxaddfN and fMxaddfNx.
* math/auto-libm-test-in: Add tests of add.
* math/auto-libm-test-out-narrow-add: New generated file.
* math/libm-test-narrow-add.inc: New file.
* sysdeps/i386/fpu/s_f32xaddf64.c: Likewise.
* sysdeps/ieee754/dbl-64/s_f32xaddf64.c: Likewise.
* sysdeps/ieee754/dbl-64/s_fadd.c: Likewise.
* sysdeps/ieee754/float128/s_f32addf128.c: Likewise.
* sysdeps/ieee754/float128/s_f64addf128.c: Likewise.
* sysdeps/ieee754/float128/s_f64xaddf128.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_daddl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_f64xaddf128.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_faddl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_daddl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_faddl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_daddl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_faddl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-dadd.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-fadd.c: Likewise.
* sysdeps/ieee754/soft-fp/s_daddl.c: Likewise.
* sysdeps/ieee754/soft-fp/s_fadd.c: Likewise.
* sysdeps/ieee754/soft-fp/s_faddl.c: Likewise.
* sysdeps/powerpc/fpu/libm-test-ulps: Update.
* sysdeps/mach/hurd/i386/libm.abilist: Likewise.
* 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/riscv/rv64/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/tilegx32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
Diffstat (limited to 'math')
| -rw-r--r-- | math/Makefile | 4 | ||||
| -rw-r--r-- | math/Versions | 9 | ||||
| -rw-r--r-- | math/auto-libm-test-in | 95 | ||||
| -rw-r--r-- | math/auto-libm-test-out-narrow-add | 23487 | ||||
| -rw-r--r-- | math/bits/mathcalls-narrow.h | 3 | ||||
| -rw-r--r-- | math/gen-auto-libm-tests.c | 1 | ||||
| -rw-r--r-- | math/libm-test-narrow-add.inc | 179 | ||||
| -rw-r--r-- | math/math-narrow.h | 58 |
8 files changed, 23834 insertions, 2 deletions
diff --git a/math/Makefile b/math/Makefile index 42e540cf0e..718b06d246 100644 --- a/math/Makefile +++ b/math/Makefile @@ -89,7 +89,7 @@ libm-compat-calls = \ w_lgammaF_r_compat w_lgammaF_compat2 w_expF_compat \ w_lgamma_compatF k_standardF -libm-narrow-fns = +libm-narrow-fns = add libm-narrow-types-basic = s_fF s_f32xFf64 libm-narrow-types-ldouble-yes = s_fFl s_dFl libm-narrow-types-float128-yes = s_f32Ff128 s_f64Ff128 s_f64xFf128 @@ -284,7 +284,7 @@ libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \ scalbln scalbn setpayload setpayloadsig signbit \ significand totalorder totalordermag trunc ufromfp \ ufromfpx -libm-test-funcs-narrow = +libm-test-funcs-narrow = add libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto) libm-test-c-auto = $(foreach f,$(libm-test-funcs-auto),libm-test-$(f).c) libm-test-c-noauto = $(foreach f,$(libm-test-funcs-noauto),libm-test-$(f).c) diff --git a/math/Versions b/math/Versions index 01ed388ae5..9191c0f648 100644 --- a/math/Versions +++ b/math/Versions @@ -551,4 +551,13 @@ libm { y1f32; y1f64; y1f32x; ynf32; ynf64; ynf32x; } + GLIBC_2.28 { + # Functions not involving _Float64x or _Float128, for all configurations. + fadd; faddl; daddl; + f32addf32x; f32addf64; f32xaddf64; + # Functions involving _Float64x or _Float128, for some configurations. + f32addf64x; f32addf128; + f32xaddf64x; f32xaddf128; f64addf64x; f64addf128; + f64xaddf128; + } } diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in index 614fe251b1..fc407e9b90 100644 --- a/math/auto-libm-test-in +++ b/math/auto-libm-test-in @@ -142,6 +142,101 @@ acosh 0x1.1808eep+0 acosh 0x1.1052c4p+0 acosh max no-test-inline +add 0 0 +add 0 -0 +add -0 0 +add -0 -0 +add max max +add max -max +add -max max +add -max -max +add min min missing-underflow:arg-ibm128 +add min -min missing-underflow:arg-ibm128 +add -min min missing-underflow:arg-ibm128 +add -min -min missing-underflow:arg-ibm128 +add min_subnorm min_subnorm missing-underflow:arg-ibm128 +add min_subnorm -min_subnorm missing-underflow:arg-ibm128 +add -min_subnorm min_subnorm missing-underflow:arg-ibm128 +add -min_subnorm -min_subnorm missing-underflow:arg-ibm128 +add 1 2 +add 1 -2 +add -1 2 +add -1 -2 +add 100.5 0.75 +add 100.5 -0.75 +add -100.5 0.75 +add -100.5 -0.75 +add 1 0x1p-23 +add 1 0x1.7fp-23 +add 1 0x1.8p-23 +add 1 0x1.81p-23 +add 1 0x1p-24 +add 1 0x1.1p-24 +add 1 0x0.fp-24 +add 1 min +add 1 -min +add 1 min_subnorm +add 1 -min_subnorm +add -1 min +add -1 -min +add -1 min_subnorm +add -1 -min_subnorm +# Cases where larger argument is half way between two values of a +# floating-point format, so that double rounding would sometimes yield +# the wrong result. +add 0x1.000001p0 min +add 0x1.000001p0 -min +add 0x1.000001p0 min_subnorm +add 0x1.000001p0 -min_subnorm +add -0x1.000001p0 min +add -0x1.000001p0 -min +add -0x1.000001p0 min_subnorm +add -0x1.000001p0 -min_subnorm +add 0x1.00000000000008p0 min +add 0x1.00000000000008p0 -min +add 0x1.00000000000008p0 min_subnorm +add 0x1.00000000000008p0 -min_subnorm +add -0x1.00000000000008p0 min +add -0x1.00000000000008p0 -min +add -0x1.00000000000008p0 min_subnorm +add -0x1.00000000000008p0 -min_subnorm +add 0x1.0000000000000001p0 min +add 0x1.0000000000000001p0 -min +add 0x1.0000000000000001p0 min_subnorm +add 0x1.0000000000000001p0 -min_subnorm +add -0x1.0000000000000001p0 min +add -0x1.0000000000000001p0 -min +add -0x1.0000000000000001p0 min_subnorm +add -0x1.0000000000000001p0 -min_subnorm +# Two values representable in the same format with sum very close to +# half way between two representable values. In particular, verify +# that there is no intermediate rounding to 64 bits when adding two +# double values. +add 1 0x1.000002p-24 +add 1 -0x1.000002p-24 +add 1 0x0.ffffffp-24 +add 1 -0x0.ffffffp-24 +add 0x1.000002p0 0x1.000002p-24 +add 0x1.000002p0 -0x1.000002p-24 +add 0x1.000002p0 0x0.ffffffp-24 +add 0x1.000002p0 -0x0.ffffffp-24 +add 1 0x1.0000000000001p-53 +add 1 -0x1.0000000000001p-53 +add 1 0x0.fffffffffffff8p-53 +add 1 -0x0.fffffffffffff8p-53 +add 0x1.0000000000001p0 0x1.0000000000001p-53 +add 0x1.0000000000001p0 -0x1.0000000000001p-53 +add 0x1.0000000000001p0 0x0.fffffffffffff8p-53 +add 0x1.0000000000001p0 -0x0.fffffffffffff8p-53 +add 1 0x1.0000000000000002p-64 +add 1 -0x1.0000000000000002p-64 +add 1 0x0.ffffffffffffffffp-64 +add 1 -0x0.ffffffffffffffffp-64 +add 0x1.0000000000000002p0 0x1.0000000000000002p-64 +add 0x1.0000000000000002p0 -0x1.0000000000000002p-64 +add 0x1.0000000000000002p0 0x0.ffffffffffffffffp-64 +add 0x1.0000000000000002p0 -0x0.ffffffffffffffffp-64 + asin 0 asin -0 asin 0.5 diff --git a/math/auto-libm-test-out-narrow-add b/math/auto-libm-test-out-narrow-add new file mode 100644 index 0000000000..e01dc8033e --- /dev/null +++ b/math/auto-libm-test-out-narrow-add @@ -0,0 +1,23487 @@ +add 0 0 += add downward binary32:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest binary32:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary32:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary32:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add downward binary64:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest binary64:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary64:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary64:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add downward intel96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest intel96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero intel96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward intel96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add downward m68k96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest m68k96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero m68k96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward m68k96:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add downward binary128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest binary128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add downward ibm128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add tonearest ibm128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero ibm128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : += add upward ibm128:arg_fmt(0,0,0,0) 0x0p+0 0x0p+0 : 0x0p+0 : +add 0 -0 += add downward binary32:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary32:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero binary32:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward binary32:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add downward binary64:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary64:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero binary64:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward binary64:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add downward intel96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest intel96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero intel96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward intel96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add downward m68k96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest m68k96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero m68k96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward m68k96:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add downward binary128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero binary128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward binary128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add downward ibm128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest ibm128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add towardzero ibm128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : += add upward ibm128:arg_fmt(0,0,0,0) 0x0p+0 -0x0p+0 : 0x0p+0 : +add -0 0 += add downward binary32:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest binary32:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary32:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary32:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add downward binary64:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest binary64:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary64:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary64:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add downward intel96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest intel96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero intel96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward intel96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add downward m68k96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest m68k96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero m68k96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward m68k96:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add downward binary128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest binary128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero binary128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward binary128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add downward ibm128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : -0x0p+0 : += add tonearest ibm128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add towardzero ibm128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : += add upward ibm128:arg_fmt(0,0,0,0) -0x0p+0 0x0p+0 : 0x0p+0 : +add -0 -0 += add downward binary32:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary32:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero binary32:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward binary32:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add downward binary64:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary64:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero binary64:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward binary64:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add downward intel96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest intel96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero intel96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward intel96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add downward m68k96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest m68k96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero m68k96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward m68k96:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add downward binary128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest binary128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero binary128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward binary128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add downward ibm128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add tonearest ibm128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add towardzero ibm128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : += add upward ibm128:arg_fmt(0,0,0,0) -0x0p+0 -0x0p+0 : -0x0p+0 : +add max max += add downward binary32:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add tonearest binary32:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : plus_infty : inexact overflow errno-erange += add towardzero binary32:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add upward binary32:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : plus_infty : inexact overflow errno-erange += add downward binary64:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add tonearest binary64:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add towardzero binary64:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add upward binary64:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add downward intel96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add tonearest intel96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add towardzero intel96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add upward intel96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add downward m68k96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add tonearest m68k96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add towardzero m68k96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add upward m68k96:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add downward binary128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add tonearest binary128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add towardzero binary128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add upward binary128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add downward ibm128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add tonearest ibm128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add towardzero ibm128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add upward ibm128:arg_fmt(127,24,104,24) 0xf.fffffp+124 0xf.fffffp+124 : 0x1.fffffep+128 : += add downward binary32:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add tonearest binary32:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : plus_infty : inexact overflow errno-erange += add towardzero binary32:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add upward binary32:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : plus_infty : inexact overflow errno-erange += add downward binary64:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add tonearest binary64:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add towardzero binary64:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add upward binary64:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : plus_infty : inexact overflow errno-erange += add downward intel96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add tonearest intel96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add towardzero intel96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add upward intel96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff801p+1020 : inexact += add downward m68k96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add tonearest m68k96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add towardzero m68k96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add upward m68k96:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff801p+1020 : inexact += add downward binary128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add tonearest binary128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add towardzero binary128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add upward binary128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8000000000000008p+1020 : inexact += add downward ibm128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add tonearest ibm128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add towardzero ibm128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff8p+1020 : inexact += add upward ibm128:arg_fmt(1023,53,104,53) 0xf.fffffp+124 0xf.ffffffffffff8p+1020 : 0xf.ffffffffffff80000000000004p+1020 : inexact += add downward binary32:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add tonearest binary32:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add towardzero binary32:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add upward binary32:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add downward binary64:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok += add tonearest binary64:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add towardzero binary64:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok += add upward binary64:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add downward intel96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add tonearest intel96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add towardzero intel96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add upward intel96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add downward m68k96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add tonearest m68k96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add towardzero m68k96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add upward m68k96:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add downward binary128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add tonearest binary128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add towardzero binary128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffffp+16380 : inexact += add upward binary128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.fffffffffffffff0000000000008p+16380 : inexact += add downward ibm128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.ffffffffffffbffffffffffffcp+1020 : xfail:ibm128-libgcc inexact overflow errno-erange-ok += add tonearest ibm128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : inexact overflow errno-erange += add towardzero ibm128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : 0xf.ffffffffffffbffffffffffffcp+1020 : xfail:ibm128-libgcc inexact overflow errno-erange-ok += add upward ibm128:arg_fmt(16383,64,104,64) 0xf.fffffp+124 0xf.fffffffffffffffp+16380 : plus_infty : xfail:ibm128-libgcc inexact overflow errno-erange += add downward binary32:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add tonearest binary32:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : plus_infty : inexact overflow errno-erange += add towardzero binary32:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.fffffp+124 : inexact overflow errno-erange-ok += add upward binary32:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : plus_infty : inexact overflow errno-erange += add downward binary64:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok += add tonearest binary64:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : plus_infty : inexact overflow errno-erange += add towardzero binary64:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok += add upward binary64:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : plus_infty : inexact overflow errno-erange += add downward intel96:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.fffffffffffffffp+16380 : inexact += add tonearest intel96:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : plus_infty : inexact overflow errno-erange += add towardzero intel96:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffffffffffff8p+16380 : 0xf.fffffffffffffffp+16380 : inexact += add upward intel96:arg_fmt(16383,113,104,113) 0xf.fffffp+124 0xf.fffffffffffffffffff |
