Add float128 support for x86_64, x86

Message ID alpine.DEB.2.20.1706232054421.16335@digraph.polyomino.org.uk
State New, archived
Headers

Commit Message

Joseph Myers June 23, 2017, 8:58 p.m. UTC
  This patch enables float128 support for x86_64 and x86.  All GCC
versions that can build glibc provide the required support, but since
GCC 6 and before don't provide __builtin_nanq / __builtin_nansq, sNaN
tests and some tests of NaN payloads need to be disabled with such
compilers (this does not affect the generated glibc binaries at all,
just the tests).  bits/floatn.h declares float128 support to be
available for GCC versions that provide the required libgcc support
(4.3 for x86_64, 4.4 for i386 GNU/Linux, 4.5 for i386 GNU/Hurd);
compilation-only support was present some time before then, but not
really useful without the libgcc functions.

fenv_private.h needed updating to avoid trying to put _Float128 values
in registers.  I make no assertion of optimality of the
math_opt_barrier / math_force_eval definitions for this case; they are
simply intended to be sufficient to work correctly.

Tested for x86_64 and x86, with GCC 7 and GCC 6.  (Testing for x32 was
compilation tests only with build-many-glibcs.py to verify the ABI
baseline updates.  I have not done any testing for Hurd, although the
float128 support is enabled there as for GNU/Linux.)

This patch is relative to a tree with Gabriel's patches applied (at this 
point, the only dependence is fairly trivial - it updates the NEWS entry 
and manual text to add x86_64 and x86 to the architectures for which 
float128 is supported).  Once those patches are in I intend to retest and 
commit this patch.  (And probably to make the similar changes for ia64, 
but with compilation testing only, so that all systems with ABI-distinct 
float128 support in GCC also get it in glibc.)

2017-06-23  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/i386/Implies: Add ieee754/float128.
	* sysdeps/x86_64/Implies: Likewise.
	* sysdeps/x86/bits/floatn.h: New file.
	* sysdeps/x86/float128-abi.h: Likewise.
	* manual/math.texi (Mathematics): Document support for _Float128
	on x86_64 and x86.
	* sysdeps/i386/fpu/fenv_private.h: Include <bits/floatn.h>.
	(math_opt_barrier): Do not put _Float128 values in floating-point
	registers.
	(math_force_eval): Likewise.
	[__x86_64__] (SET_RESTORE_ROUNDF128): New macro.
	* sysdeps/x86/fpu/Makefile [$(subdir) = math] (CPPFLAGS): Append
	to Makefile variable.
	* sysdeps/x86/fpu/e_sqrtf128.c: New file.
	* sysdeps/x86/fpu/sfp-machine.h: Likewise.  Based on libgcc.
	* sysdeps/x86/math-tests.h: New file.
	* math/libm-test-support.h (XFAIL_FLOAT128_PAYLOAD): New macro.
	* math/libm-test-getpayload.inc (getpayload_test_data): Use
	XFAIL_FLOAT128_PAYLOAD.
	* math/libm-test-setpayload.inc (setpayload_test_data): Likewise.
	* math/libm-test-totalorder.inc (totalorder_test_data): Likewise.
	* math/libm-test-totalordermag.inc (totalordermag_test_data):
	Likewise.
	* sysdeps/unix/sysv/linux/i386/libc.abilist: Update.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
	* sysdeps/i386/fpu/libm-test-ulps: Likewise.
	* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
  

Comments

Florian Weimer June 24, 2017, 6:18 p.m. UTC | #1
* Joseph Myers:

> 	* sysdeps/x86/fpu/e_sqrtf128.c: New file.

Why is this file x86-specific?  I find that rather odd.
  
Joseph Myers June 26, 2017, 10:48 a.m. UTC | #2
On Sat, 24 Jun 2017, Florian Weimer wrote:

> * Joseph Myers:
> 
> > 	* sysdeps/x86/fpu/e_sqrtf128.c: New file.
> 
> Why is this file x86-specific?  I find that rather odd.

There's no generic ldbl-128 sqrtl implementation in glibc - each ldbl-128 
architecture has its own - meaning the usual approach of #including an 
ldbl-128 implementation with appropriate #defines doesn't apply.  The 
powerpc64le implementation of sqrtf128 is not applicable here because it 
has its own special-case defines to use KFmode instead of TFmode.
  
Gabriel F T Gomes June 26, 2017, 5:34 p.m. UTC | #3
On Fri, 23 Jun 2017 20:58:09 +0000
Joseph Myers <joseph@codesourcery.com> wrote:

> This patch is relative to a tree with Gabriel's patches applied (at this 
> point, the only dependence is fairly trivial - it updates the NEWS entry 
> and manual text to add x86_64 and x86 to the architectures for which 
> float128 is supported).  Once those patches are in I intend to retest and 
> commit this patch.  (And probably to make the similar changes for ia64, 
> but with compilation testing only, so that all systems with ABI-distinct 
> float128 support in GCC also get it in glibc.)

I plan to push this today.

> 2017-06-23  Joseph Myers  <joseph@codesourcery.com>
> 	* sysdeps/i386/Implies: Add ieee754/float128.
> 	* sysdeps/x86_64/Implies: Likewise.
> (...)

The ChangeLog entries for NEWS and manual/math.texi are missing?

Other than that, lgtm.
  
Joseph Myers June 26, 2017, 5:46 p.m. UTC | #4
On Mon, 26 Jun 2017, Gabriel F. T. Gomes wrote:

> > 2017-06-23  Joseph Myers  <joseph@codesourcery.com>
> > 	* sysdeps/i386/Implies: Add ieee754/float128.
> > 	* sysdeps/x86_64/Implies: Likewise.
> > (...)
> 
> The ChangeLog entries for NEWS and manual/math.texi are missing?

The ChangeLog entry for math.texi is present.  We don't write ChangeLog 
entries for NEWS.
  
Gabriel F T Gomes June 26, 2017, 8:15 p.m. UTC | #5
On Mon, 26 Jun 2017 17:46:19 +0000
Joseph Myers <joseph@codesourcery.com> wrote:

> On Mon, 26 Jun 2017, Gabriel F. T. Gomes wrote:
> 
> > > 2017-06-23  Joseph Myers  <joseph@codesourcery.com>
> > > 	* sysdeps/i386/Implies: Add ieee754/float128.
> > > 	* sysdeps/x86_64/Implies: Likewise.
> > > (...)  
> > 
> > The ChangeLog entries for NEWS and manual/math.texi are missing?  
> 
> The ChangeLog entry for math.texi is present.  We don't write ChangeLog 
> entries for NEWS.

Thanks for pointing that out...  I was mistakenly writing NEWS changes to
the ChangeLog.

The patches for powerpc64le are now committed.
  

Patch

diff --git a/NEWS b/NEWS
index 027f09b..960c9f8 100644
--- a/NEWS
+++ b/NEWS
@@ -121,13 +121,13 @@  Version 2.26
   C Library is GCC 4.9.  Older GCC versions, and non-GNU compilers, can
   still be used to compile programs using the GNU C Library.
 
-* Support is added, on powerpc64le, for interfaces supporting the _Float128
-  type from ISO/IEC TS 18661-3:2015.  Most of the interfaces are taken from
-  TS 18661-3.  The type-generic macros in <math.h> support this type, but
-  those in <tgmath.h> do not.  The GNU C Library now requires GCC 6.2 or
-  later to build for powerpc64le.  When used with GCC versions before GCC
-  7, these interfaces may be used with the type under the non-standard name
-  __float128.
+* Support is added, on powerpc64le, x86_64 and x86, for interfaces
+  supporting the _Float128 type from ISO/IEC TS 18661-3:2015.  Most of the
+  interfaces are taken from TS 18661-3.  The type-generic macros in <math.h>
+  support this type, but those in <tgmath.h> do not.  The GNU C Library now
+  requires GCC 6.2 or later to build for powerpc64le.  When used with GCC
+  versions before GCC 7, these interfaces may be used with the type under
+  the non-standard name __float128.
 
   New <stdlib.h> functions from ISO/IEC TS 18661-3:
 
diff --git a/manual/math.texi b/manual/math.texi
index 17579d8..efaa78f 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -67,7 +67,7 @@  these functions are described along with the @code{double},
 
 Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
 types is only provided for @code{_Float128} on powerpc64le (PowerPC
-64-bits little-endian).
+64-bits little-endian), x86_64 and x86.
 
 @menu
 * Mathematical Constants::      Precise numeric values for often-used
diff --git a/math/libm-test-getpayload.inc b/math/libm-test-getpayload.inc
index def4d8b..142ef45 100644
--- a/math/libm-test-getpayload.inc
+++ b/math/libm-test-getpayload.inc
@@ -38,35 +38,35 @@  static const struct test_f_f_data getpayload_test_data[] =
     TEST_fp_f (getpayload, qnan_value_pl ("0x0"), plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
     TEST_fp_f (getpayload, -qnan_value_pl ("0x0"), plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
-    TEST_fp_f (getpayload, qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #if PAYLOAD_DIG >= 51
-    TEST_fp_f (getpayload, qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #endif
 #if PAYLOAD_DIG >= 62
-    TEST_fp_f (getpayload, qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #endif
 #if PAYLOAD_DIG >= 111
-    TEST_fp_f (getpayload, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_fp_f (getpayload, -snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_fp_f (getpayload, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_fp_f (getpayload, -snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #endif
   };
 
diff --git a/math/libm-test-setpayload.inc b/math/libm-test-setpayload.inc
index c5ae6fd..411b0ea 100644
--- a/math/libm-test-setpayload.inc
+++ b/math/libm-test-setpayload.inc
@@ -25,21 +25,21 @@  static const struct test_Ff_b1_data setpayload_test_data[] =
 #else
     TEST_Ff_b1 (setpayload, plus_zero, 0, qnan_value_pl ("0x0"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
 #endif
-    TEST_Ff_b1 (setpayload, 0x1p0, 0, qnan_value_pl ("0x1"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
-    TEST_Ff_b1 (setpayload, 0x2p0, 0, qnan_value_pl ("0x2"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
-    TEST_Ff_b1 (setpayload, 0x3fffffp0, 0, qnan_value_pl ("0x3fffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x1p0, 0, qnan_value_pl ("0x1"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x2p0, 0, qnan_value_pl ("0x2"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x3fffffp0, 0, qnan_value_pl ("0x3fffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #if PAYLOAD_DIG >= 51
-    TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 0, qnan_value_pl ("0x7ffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 0, qnan_value_pl ("0x7ffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 62
-    TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 0, qnan_value_pl ("0x3fffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 0, qnan_value_pl ("0x3fffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 111
-    TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 0, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 0, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
@@ -74,17 +74,17 @@  static const struct test_Ff_b1_data setpayload_test_data[] =
     TEST_Ff_b1 (setpayload, 0x1ffffffffffffffffffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 23
-    TEST_Ff_b1 (setpayload, 0x1p22, 0, qnan_value_pl ("0x400000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x1p22, 0, qnan_value_pl ("0x400000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x1p22, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 52
-    TEST_Ff_b1 (setpayload, 0x1p51, 0, qnan_value_pl ("0x8000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x1p51, 0, qnan_value_pl ("0x8000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x1p51, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 63
-    TEST_Ff_b1 (setpayload, 0x1p62, 0, qnan_value_pl ("0x4000000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
+    TEST_Ff_b1 (setpayload, 0x1p62, 0, qnan_value_pl ("0x4000000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
 #else
     TEST_Ff_b1 (setpayload, 0x1p62, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
diff --git a/math/libm-test-support.h b/math/libm-test-support.h
index 2cdc5fe..24e3cce 100644
--- a/math/libm-test-support.h
+++ b/math/libm-test-support.h
@@ -115,6 +115,15 @@  extern const char doc[];
    appropriately for each rounding mode.  */
 #define XFAIL_IBM128_LIBGCC (TEST_COND_ibm128_libgcc ? XFAIL_TEST : 0)
 
+/* On some architectures, glibc can be built with compilers that do
+   not have suitable built-in functions for setting the payload of a
+   _Float128 NaN.  */
+#if (defined __x86_64__ || defined __i386__) && !__GNUC_PREREQ (7, 0)
+# define XFAIL_FLOAT128_PAYLOAD (TEST_COND_binary128 ? XFAIL_TEST : 0)
+#else
+# define XFAIL_FLOAT128_PAYLOAD 0
+#endif
+
 /* Number of bits in NaN payload.  */
 #if TEST_COND_ibm128
 # define PAYLOAD_DIG (DBL_MANT_DIG - 2)
diff --git a/math/libm-test-totalorder.inc b/math/libm-test-totalorder.inc
index d92e2aa..9941aab 100644
--- a/math/libm-test-totalorder.inc
+++ b/math/libm-test-totalorder.inc
@@ -212,22 +212,22 @@  static const struct test_ff_i_data totalorder_test_data[] =
     TEST_ff_b (totalorder, -snan_value_pl ("0x200000000"), -snan_value_pl ("0x100000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 66
-    TEST_ff_b (totalorder, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalorder, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_ff_b (totalorder, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalorder, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #endif
     TEST_ff_b (totalorder, 1, 0x1.000002p0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
     TEST_ff_b (totalorder, 0x1.000002p0, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
diff --git a/math/libm-test-totalordermag.inc b/math/libm-test-totalordermag.inc
index 2ebf1d0..1402af4 100644
--- a/math/libm-test-totalordermag.inc
+++ b/math/libm-test-totalordermag.inc
@@ -212,22 +212,22 @@  static const struct test_ff_i_data totalordermag_test_data[] =
     TEST_ff_b (totalordermag, -snan_value_pl ("0x200000000"), -snan_value_pl ("0x100000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 #if PAYLOAD_DIG >= 66
-    TEST_ff_b (totalordermag, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-    TEST_ff_b (totalordermag, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_ff_b (totalordermag, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
+    TEST_ff_b (totalordermag, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
 #endif
     TEST_ff_b (totalordermag, 1, 0x1.000002p0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
     TEST_ff_b (totalordermag, 0x1.000002p0, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
diff --git a/sysdeps/i386/Implies b/sysdeps/i386/Implies
index 20b2dff..76cb207 100644
--- a/sysdeps/i386/Implies
+++ b/sysdeps/i386/Implies
@@ -1,5 +1,6 @@ 
 x86
 wordsize-32
+ieee754/float128
 ieee754/ldbl-96
 ieee754/dbl-64
 ieee754/flt-32
diff --git a/sysdeps/i386/fpu/fenv_private.h b/sysdeps/i386/fpu/fenv_private.h
index e20e1f1..38fd0b9 100644
--- a/sysdeps/i386/fpu/fenv_private.h
+++ b/sysdeps/i386/fpu/fenv_private.h
@@ -1,36 +1,46 @@ 
 #ifndef FENV_PRIVATE_H
 #define FENV_PRIVATE_H 1
 
+#include <bits/floatn.h>
 #include <fenv.h>
 #include <fpu_control.h>
 
 #ifdef __SSE2_MATH__
-# define math_opt_barrier(x) \
-  ({ __typeof(x) __x;					\
-     if (sizeof (x) <= sizeof (double))			\
-       __asm ("" : "=x" (__x) : "0" (x));		\
-     else						\
-       __asm ("" : "=t" (__x) : "0" (x));		\
+# define math_opt_barrier(x)						\
+  ({ __typeof(x) __x;							\
+     if (sizeof (x) <= sizeof (double)					\
+	|| __builtin_types_compatible_p (__typeof (x), _Float128))	\
+       __asm ("" : "=x" (__x) : "0" (x));				\
+     else								\
+       __asm ("" : "=t" (__x) : "0" (x));				\
      __x; })
-# define math_force_eval(x) \
-  do {							\
-    if (sizeof (x) <= sizeof (double))			\
-      __asm __volatile ("" : : "x" (x));		\
-    else						\
-      __asm __volatile ("" : : "f" (x));		\
+# define math_force_eval(x)						\
+  do {									\
+    if (sizeof (x) <= sizeof (double)					\
+	|| __builtin_types_compatible_p (__typeof (x), _Float128))	\
+      __asm __volatile ("" : : "x" (x));				\
+    else								\
+      __asm __volatile ("" : : "f" (x));				\
   } while (0)
 #else
-# define math_opt_barrier(x) \
-  ({ __typeof (x) __x;					\
-     __asm ("" : "=t" (__x) : "0" (x));			\
+# define math_opt_barrier(x)						\
+  ({ __typeof (x) __x;							\
+     if (__builtin_types_compatible_p (__typeof (x), _Float128))	\
+       {								\
+	 __x = (x);							\
+	 __asm ("" : "+m" (__x));					\
+       }								\
+     else								\
+       __asm ("" : "=t" (__x) : "0" (x));				\
      __x; })
-# define math_force_eval(x) \
-  do {							\
-    __typeof (x) __x = (x);				\
-    if (sizeof (x) <= sizeof (double))			\
-      __asm __volatile ("" : : "m" (__x));		\
-    else						\
-      __asm __volatile ("" : : "f" (__x));		\
+# define math_force_eval(x)						\
+  do {									\
+    __typeof (x) __x = (x);						\
+    if (sizeof (x) <= sizeof (double)					\
+	|| __builtin_types_compatible_p (__typeof (x), _Float128))	\
+      __asm __volatile ("" : : "m" (__x));				\
+    else								\
+      __asm __volatile ("" : : "f" (__x));				\
   } while (0)
 #endif
 
@@ -322,6 +332,13 @@  libc_feresetround_387 (fenv_t *e)
 # define libc_feholdsetround_53bit	libc_feholdsetround_387_53bit
 #endif
 
+#ifdef __x86_64__
+/* The SSE rounding mode is used by soft-fp (libgcc and glibc) on
+   x86_64, so that must be set for float128 computations.  */
+# define SET_RESTORE_ROUNDF128(RM) \
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_sse, libc_feresetround_sse)
+#endif
+
 /* We have support for rounding mode context.  */
 #define HAVE_RM_CTX 1
 
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
index 5ab1589..ed685de 100644
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ b/sysdeps/i386/fpu/libm-test-ulps
@@ -3,1524 +3,1926 @@ 
 # Maximal error of functions:
 Function: "acos":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "acos_downward":
+float128: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_towardzero":
+float128: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acosh":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 2
 
 Function: "acosh_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 6
 ldouble: 4
 
 Function: "acosh_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 6
 ldouble: 4
 
 Function: "acosh_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 3
 
 Function: "asin":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_downward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "asin_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "asinh":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "asinh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "asinh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "asinh_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "atan":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atanh":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "atanh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 3
 ldouble: 4
 
 Function: "atanh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 5
 ldouble: 3
 
 Function: "atanh_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "cabs":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacos":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cacos":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacos_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "cacos_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "cacos_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "cacosh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacosh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacosh_downward":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cacosh_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacosh_upward":
 double: 4
 float: 4
+float128: 6
 idouble: 4
 ifloat: 4
+ifloat128: 6
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_upward":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: "carg":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "carg_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casin":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "casin":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "casin_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "casin_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "casin_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casin_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "casinh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casinh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casinh_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Imaginary part of "casinh_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "casinh_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "casinh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "catan":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catan_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "catanh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catanh":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_upward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "cbrt_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: "cbrt_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "cbrt_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccos_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccos_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccosh_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccosh_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cexp":
 double: 2
 float: 1
+float128: 1
 idouble: 2
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cexp":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cexp_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cexp_upward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "clog":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog10":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog10":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "clog10_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_towardzero":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "clog10_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_towardzero":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_upward":
 double: 2
 float: 3
+float128: 4
 idouble: 2
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cos":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cos_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "cos_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cos_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "cosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_upward":
 double: 4
 float: 2
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: Real part of "cpow":
 double: 2
 float: 5
+float128: 4
 idouble: 2
 ifloat: 5
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cpow":
 float: 2
+float128: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "cpow_downward":
 double: 5
 float: 8
+float128: 6
 idouble: 5
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cpow_towardzero":
 double: 5
 float: 8
+float128: 6
 idouble: 5
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cpow_upward":
 double: 4
 float: 1
+float128: 3
 idouble: 4
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cpow_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csin":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "csin":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 
 Function: Real part of "csin_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "csin_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csinh":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "csinh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "csinh_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "csinh_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csqrt":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "csqrt":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csqrt_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "csqrt_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ctan":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ctan_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_downward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_towardzero":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_towardzero":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_upward":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctan_upward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ctanh":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ctanh_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_downward":
 double: 2
 float: 1
+float128: 4
 idouble: 2
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctanh_towardzero":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh_upward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctanh_upward":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: "erf":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erf_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erfc":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "erfc_downward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_towardzero":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_upward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "exp":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp10":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "exp10_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp2":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_downward":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_upward":
+float128: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -1544,31 +1946,39 @@  ldouble: 1
 
 Function: "expm1":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "expm1_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_towardzero":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
@@ -1606,271 +2016,345 @@  ldouble: 5
 
 Function: "hypot":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "j0":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "j0_downward":
 double: 1
 float: 2
+float128: 4
 idouble: 1
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j0_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "j0_upward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "j1":
 double: 2
 float: 1
+float128: 4
 idouble: 2
 ifloat: 1
+ifloat128: 4
 ildouble: 1
 ldouble: 1
 
 Function: "j1_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_towardzero":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_upward":
 double: 2
 float: 3
+float128: 3
 idouble: 2
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "jn":
 double: 2
 float: 3
+float128: 7
 idouble: 2
 ifloat: 3
+ifloat128: 7
 ildouble: 4
 ldouble: 4
 
 Function: "jn_downward":
 double: 2
 float: 3
+float128: 8
 idouble: 2
 ifloat: 3
+ifloat128: 8
 ildouble: 4
 ldouble: 4
 
 Function: "jn_towardzero":
 double: 2
 float: 3
+float128: 8
 idouble: 2
 ifloat: 3
+ifloat128: 8
 ildouble: 5
 ldouble: 5
 
 Function: "jn_upward":
 double: 2
 float: 3
+float128: 7
 idouble: 2
 ifloat: 3
+ifloat128: 7
 ildouble: 5
 ldouble: 5
 
 Function: "lgamma":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "lgamma_downward":
 double: 4
 float: 4
+float128: 8
 idouble: 4
 ifloat: 4
+ifloat128: 8
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_towardzero":
 double: 4
 float: 2
+float128: 5
 idouble: 4
 ifloat: 2
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_upward":
 double: 3
 float: 4
+float128: 8
 idouble: 3
 ifloat: 4
+ifloat128: 8
 ildouble: 5
 ldouble: 5
 
 Function: "log":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log1p":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log1p_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "log2":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "log2_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "log2_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log2_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "pow":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -1906,296 +2390,374 @@  ldouble: 2
 
 Function: "pow_downward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "sin":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sin_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sin_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sin_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sincos":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sincos_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sincos_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sincos_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sinh":
 double: 1
+float128: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sinh_downward":
 double: 2
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 5
 
 Function: "sinh_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 4
 
 Function: "sinh_upward":
 double: 4
 float: 2
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 5
 
 Function: "tan":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tan_downward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_towardzero":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_upward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tanh":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 7
 ldouble: 4
 
 Function: "tanh_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 5
 ldouble: 4
 
 Function: "tgamma":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_downward":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_towardzero":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "y0_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: "y0_upward":
 double: 1
 float: 3
+float128: 3
 idouble: 1
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "y1":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "y1_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 7
 ldouble: 7
 
 Function: "y1_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "y1_upward":
 double: 1
 float: 2
+float128: 5
 idouble: 1
 ifloat: 2
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "yn":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "yn_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_towardzero":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_upward":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
index 611ae2d..81dd1a0 100644
--- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
+++ b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
@@ -3,1524 +3,1926 @@ 
 # Maximal error of functions:
 Function: "acos":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "acos_downward":
+float128: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_towardzero":
+float128: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acosh":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 2
 
 Function: "acosh_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 6
 ldouble: 4
 
 Function: "acosh_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 6
 ldouble: 4
 
 Function: "acosh_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 3
 
 Function: "asin":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_downward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "asin_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "asinh":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "asinh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "asinh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "asinh_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "atan":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atanh":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "atanh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 3
 ldouble: 4
 
 Function: "atanh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 5
 ldouble: 3
 
 Function: "atanh_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "cabs":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacos":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cacos":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacos_downward":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "cacos_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "cacos_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "cacosh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacosh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacosh_downward":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cacosh_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacosh_upward":
 double: 4
 float: 4
+float128: 6
 idouble: 4
 ifloat: 4
+ifloat128: 6
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_upward":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: "carg":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "carg_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casin":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "casin":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "casin_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "casin_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "casin_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casin_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "casinh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casinh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casinh_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Imaginary part of "casinh_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_towardzero":
 double: 4
 float: 3
+float128: 5
 idouble: 4
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "casinh_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_upward":
 double: 7
 float: 7
+float128: 7
 idouble: 7
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "casinh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "catan":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catan_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "catanh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catanh":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_upward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "cbrt_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: "cbrt_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "cbrt_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccos_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccos_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccosh_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccosh_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cexp":
 double: 2
 float: 1
+float128: 1
 idouble: 2
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cexp":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cexp_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cexp_upward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "clog":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog10":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog10":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "clog10_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_towardzero":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "clog10_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_towardzero":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_upward":
 double: 2
 float: 3
+float128: 4
 idouble: 2
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cos":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cos_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "cos_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cos_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "cosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 2
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_upward":
 double: 4
 float: 2
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: Real part of "cpow":
 double: 2
 float: 5
+float128: 4
 idouble: 2
 ifloat: 5
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cpow":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "cpow_downward":
 double: 5
 float: 8
+float128: 6
 idouble: 5
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cpow_towardzero":
 double: 5
 float: 8
+float128: 6
 idouble: 5
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cpow_upward":
 double: 4
 float: 1
+float128: 3
 idouble: 4
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cpow_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csin":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "csin":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 
 Function: Real part of "csin_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "csinh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "csinh_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_downward":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_towardzero":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_upward":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csqrt":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "csqrt":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csqrt_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "csqrt_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_upward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ctan":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ctan_downward":
 double: 1
 float: 2
+float128: 4
 idouble: 1
 ifloat: 2
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_towardzero":
 double: 3
 float: 1
+float128: 4
 idouble: 3
 ifloat: 1
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_towardzero":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_upward":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctan_upward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ctanh":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ctanh_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_downward":
 double: 2
 float: 1
+float128: 4
 idouble: 2
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctanh_towardzero":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh_upward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctanh_upward":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: "erf":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erf_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erfc":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "erfc_downward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_towardzero":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_upward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "exp":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp10":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "exp10_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp2":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_downward":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_upward":
+float128: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -1546,31 +1948,39 @@  ldouble: 1
 
 Function: "expm1":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "expm1_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_towardzero":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
@@ -1608,271 +2018,345 @@  ldouble: 5
 
 Function: "hypot":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "j0":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "j0_downward":
 double: 1
 float: 3
+float128: 4
 idouble: 1
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j0_towardzero":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "j0_upward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "j1":
 double: 2
 float: 1
+float128: 4
 idouble: 2
 ifloat: 1
+ifloat128: 4
 ildouble: 1
 ldouble: 1
 
 Function: "j1_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_towardzero":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_upward":
 double: 2
 float: 3
+float128: 3
 idouble: 2
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "jn":
 double: 2
 float: 3
+float128: 7
 idouble: 2
 ifloat: 3
+ifloat128: 7
 ildouble: 4
 ldouble: 4
 
 Function: "jn_downward":
 double: 2
 float: 3
+float128: 8
 idouble: 2
 ifloat: 3
+ifloat128: 8
 ildouble: 4
 ldouble: 4
 
 Function: "jn_towardzero":
 double: 2
 float: 3
+float128: 8
 idouble: 2
 ifloat: 3
+ifloat128: 8
 ildouble: 5
 ldouble: 5
 
 Function: "jn_upward":
 double: 2
 float: 3
+float128: 7
 idouble: 2
 ifloat: 3
+ifloat128: 7
 ildouble: 5
 ldouble: 5
 
 Function: "lgamma":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "lgamma_downward":
 double: 4
 float: 4
+float128: 8
 idouble: 4
 ifloat: 4
+ifloat128: 8
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_towardzero":
 double: 4
 float: 4
+float128: 5
 idouble: 4
 ifloat: 4
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_upward":
 double: 3
 float: 4
+float128: 8
 idouble: 3
 ifloat: 4
+ifloat128: 8
 ildouble: 5
 ldouble: 5
 
 Function: "log":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log1p":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log1p_downward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "log2":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "log2_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "log2_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log2_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "pow":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -1908,280 +2392,358 @@  ldouble: 2
 
 Function: "pow_downward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "sin":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sin_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sin_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sin_upward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sincos":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sincos_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sincos_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sincos_upward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sinh":
 double: 1
+float128: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sinh_downward":
 double: 2
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 5
 
 Function: "sinh_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 4
 
 Function: "sinh_upward":
 double: 4
 float: 2
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 4
 ldouble: 5
 
 Function: "tan":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tan_downward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_towardzero":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_upward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tanh":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_downward":
 double: 1
 float: 1
+float128: 4
 idouble: 1
 ifloat: 1
+ifloat128: 4
 ildouble: 7
 ldouble: 4
 
 Function: "tanh_towardzero":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 5
 ldouble: 4
 
 Function: "tgamma":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_downward":
 double: 3
 float: 4
+float128: 5
 idouble: 3
 ifloat: 4
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_towardzero":
 double: 4
 float: 4
+float128: 5
 idouble: 4
 ifloat: 4
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_upward":
 double: 4
 float: 4
+float128: 4
 idouble: 4
 ifloat: 4
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "y0_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: "y0_upward":
 double: 1
 float: 3
+float128: 3
 idouble: 1
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "y1":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "y1_downward":
 double: 2
 float: 2
+float128: 4
 idouble: 2
 ifloat: 2
+ifloat128: 4
 ildouble: 7
 ldouble: 7
 
 Function: "y1_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "y1_upward":
 double: 1
 float: 3
+float128: 5
 idouble: 1
 ifloat: 3
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "yn":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "yn_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_towardzero":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_upward":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 2ff1998..12e77bd 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2021,11 +2021,18 @@  GLIBC_2.25 strfromd F
 GLIBC_2.25 strfromf F
 GLIBC_2.25 strfroml F
 GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __strtof128_internal F
+GLIBC_2.26 __wcstof128_internal F
 GLIBC_2.26 preadv2 F
 GLIBC_2.26 preadv64v2 F
 GLIBC_2.26 pwritev2 F
 GLIBC_2.26 pwritev64v2 F
 GLIBC_2.26 reallocarray F
+GLIBC_2.26 strfromf128 F
+GLIBC_2.26 strtof128 F
+GLIBC_2.26 strtof128_l F
+GLIBC_2.26 wcstof128 F
+GLIBC_2.26 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 761e442..2aef7e5 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -473,4 +473,142 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __acosf128_finite F
+GLIBC_2.26 __acoshf128_finite F
+GLIBC_2.26 __asinf128_finite F
+GLIBC_2.26 __atan2f128_finite F
+GLIBC_2.26 __atanhf128_finite F
+GLIBC_2.26 __coshf128_finite F
+GLIBC_2.26 __exp10f128_finite F
+GLIBC_2.26 __exp2f128_finite F
+GLIBC_2.26 __expf128_finite F
+GLIBC_2.26 __finitef128 F
+GLIBC_2.26 __fmodf128_finite F
+GLIBC_2.26 __fpclassifyf128 F
+GLIBC_2.26 __gammaf128_r_finite F
+GLIBC_2.26 __hypotf128_finite F
+GLIBC_2.26 __iseqsigf128 F
+GLIBC_2.26 __isinff128 F
+GLIBC_2.26 __isnanf128 F
+GLIBC_2.26 __issignalingf128 F
+GLIBC_2.26 __j0f128_finite F
+GLIBC_2.26 __j1f128_finite F
+GLIBC_2.26 __jnf128_finite F
+GLIBC_2.26 __lgammaf128_r_finite F
+GLIBC_2.26 __log10f128_finite F
+GLIBC_2.26 __log2f128_finite F
+GLIBC_2.26 __logf128_finite F
+GLIBC_2.26 __powf128_finite F
+GLIBC_2.26 __remainderf128_finite F
+GLIBC_2.26 __signbitf128 F
+GLIBC_2.26 __sinhf128_finite F
+GLIBC_2.26 __sqrtf128_finite F
+GLIBC_2.26 __y0f128_finite F
+GLIBC_2.26 __y1f128_finite F
+GLIBC_2.26 __ynf128_finite F
+GLIBC_2.26 acosf128 F
+GLIBC_2.26 acoshf128 F
+GLIBC_2.26 asinf128 F
+GLIBC_2.26 asinhf128 F
+GLIBC_2.26 atan2f128 F
+GLIBC_2.26 atanf128 F
+GLIBC_2.26 atanhf128 F
+GLIBC_2.26 cabsf128 F
+GLIBC_2.26 cacosf128 F
+GLIBC_2.26 cacoshf128 F
+GLIBC_2.26 canonicalizef128 F
+GLIBC_2.26 cargf128 F
+GLIBC_2.26 casinf128 F
+GLIBC_2.26 casinhf128 F
+GLIBC_2.26 catanf128 F
+GLIBC_2.26 catanhf128 F
+GLIBC_2.26 cbrtf128 F
+GLIBC_2.26 ccosf128 F
+GLIBC_2.26 ccoshf128 F
+GLIBC_2.26 ceilf128 F
+GLIBC_2.26 cexpf128 F
+GLIBC_2.26 cimagf128 F
+GLIBC_2.26 clog10f128 F
+GLIBC_2.26 clogf128 F
+GLIBC_2.26 conjf128 F
+GLIBC_2.26 copysignf128 F
+GLIBC_2.26 cosf128 F
+GLIBC_2.26 coshf128 F
+GLIBC_2.26 cpowf128 F
+GLIBC_2.26 cprojf128 F
+GLIBC_2.26 crealf128 F
+GLIBC_2.26 csinf128 F
+GLIBC_2.26 csinhf128 F
+GLIBC_2.26 csqrtf128 F
+GLIBC_2.26 ctanf128 F
+GLIBC_2.26 ctanhf128 F
+GLIBC_2.26 erfcf128 F
+GLIBC_2.26 erff128 F
+GLIBC_2.26 exp10f128 F
+GLIBC_2.26 exp2f128 F
+GLIBC_2.26 expf128 F
+GLIBC_2.26 expm1f128 F
+GLIBC_2.26 fabsf128 F
+GLIBC_2.26 fdimf128 F
+GLIBC_2.26 floorf128 F
+GLIBC_2.26 fmaf128 F
+GLIBC_2.26 fmaxf128 F
+GLIBC_2.26 fmaxmagf128 F
+GLIBC_2.26 fminf128 F
+GLIBC_2.26 fminmagf128 F
+GLIBC_2.26 fmodf128 F
+GLIBC_2.26 frexpf128 F
+GLIBC_2.26 fromfpf128 F
+GLIBC_2.26 fromfpxf128 F
+GLIBC_2.26 getpayloadf128 F
+GLIBC_2.26 hypotf128 F
+GLIBC_2.26 ilogbf128 F
+GLIBC_2.26 j0f128 F
+GLIBC_2.26 j1f128 F
+GLIBC_2.26 jnf128 F
+GLIBC_2.26 ldexpf128 F
+GLIBC_2.26 lgammaf128 F
+GLIBC_2.26 lgammaf128_r F
+GLIBC_2.26 llogbf128 F
+GLIBC_2.26 llrintf128 F
+GLIBC_2.26 llroundf128 F
+GLIBC_2.26 log10f128 F
+GLIBC_2.26 log1pf128 F
+GLIBC_2.26 log2f128 F
+GLIBC_2.26 logbf128 F
+GLIBC_2.26 logf128 F
+GLIBC_2.26 lrintf128 F
+GLIBC_2.26 lroundf128 F
+GLIBC_2.26 modff128 F
+GLIBC_2.26 nanf128 F
+GLIBC_2.26 nearbyintf128 F
+GLIBC_2.26 nextafterf128 F
+GLIBC_2.26 nextdownf128 F
+GLIBC_2.26 nextupf128 F
+GLIBC_2.26 powf128 F
+GLIBC_2.26 remainderf128 F
+GLIBC_2.26 remquof128 F
+GLIBC_2.26 rintf128 F
+GLIBC_2.26 roundevenf128 F
+GLIBC_2.26 roundf128 F
+GLIBC_2.26 scalblnf128 F
+GLIBC_2.26 scalbnf128 F
+GLIBC_2.26 setpayloadf128 F
+GLIBC_2.26 setpayloadsigf128 F
+GLIBC_2.26 sincosf128 F
+GLIBC_2.26 sinf128 F
+GLIBC_2.26 sinhf128 F
+GLIBC_2.26 sqrtf128 F
+GLIBC_2.26 tanf128 F
+GLIBC_2.26 tanhf128 F
+GLIBC_2.26 tgammaf128 F
+GLIBC_2.26 totalorderf128 F
+GLIBC_2.26 totalordermagf128 F
+GLIBC_2.26 truncf128 F
+GLIBC_2.26 ufromfpf128 F
+GLIBC_2.26 ufromfpxf128 F
+GLIBC_2.26 y0f128 F
+GLIBC_2.26 y1f128 F
+GLIBC_2.26 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 513524d..8bff2b2 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -1862,11 +1862,18 @@  GLIBC_2.25 strfromd F
 GLIBC_2.25 strfromf F
 GLIBC_2.25 strfroml F
 GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __strtof128_internal F
+GLIBC_2.26 __wcstof128_internal F
 GLIBC_2.26 preadv2 F
 GLIBC_2.26 preadv64v2 F
 GLIBC_2.26 pwritev2 F
 GLIBC_2.26 pwritev64v2 F
 GLIBC_2.26 reallocarray F
+GLIBC_2.26 strfromf128 F
+GLIBC_2.26 strtof128 F
+GLIBC_2.26 strtof128_l F
+GLIBC_2.26 wcstof128 F
+GLIBC_2.26 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index fc68ef6..44473c2 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -462,4 +462,142 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __acosf128_finite F
+GLIBC_2.26 __acoshf128_finite F
+GLIBC_2.26 __asinf128_finite F
+GLIBC_2.26 __atan2f128_finite F
+GLIBC_2.26 __atanhf128_finite F
+GLIBC_2.26 __coshf128_finite F
+GLIBC_2.26 __exp10f128_finite F
+GLIBC_2.26 __exp2f128_finite F
+GLIBC_2.26 __expf128_finite F
+GLIBC_2.26 __finitef128 F
+GLIBC_2.26 __fmodf128_finite F
+GLIBC_2.26 __fpclassifyf128 F
+GLIBC_2.26 __gammaf128_r_finite F
+GLIBC_2.26 __hypotf128_finite F
+GLIBC_2.26 __iseqsigf128 F
+GLIBC_2.26 __isinff128 F
+GLIBC_2.26 __isnanf128 F
+GLIBC_2.26 __issignalingf128 F
+GLIBC_2.26 __j0f128_finite F
+GLIBC_2.26 __j1f128_finite F
+GLIBC_2.26 __jnf128_finite F
+GLIBC_2.26 __lgammaf128_r_finite F
+GLIBC_2.26 __log10f128_finite F
+GLIBC_2.26 __log2f128_finite F
+GLIBC_2.26 __logf128_finite F
+GLIBC_2.26 __powf128_finite F
+GLIBC_2.26 __remainderf128_finite F
+GLIBC_2.26 __signbitf128 F
+GLIBC_2.26 __sinhf128_finite F
+GLIBC_2.26 __sqrtf128_finite F
+GLIBC_2.26 __y0f128_finite F
+GLIBC_2.26 __y1f128_finite F
+GLIBC_2.26 __ynf128_finite F
+GLIBC_2.26 acosf128 F
+GLIBC_2.26 acoshf128 F
+GLIBC_2.26 asinf128 F
+GLIBC_2.26 asinhf128 F
+GLIBC_2.26 atan2f128 F
+GLIBC_2.26 atanf128 F
+GLIBC_2.26 atanhf128 F
+GLIBC_2.26 cabsf128 F
+GLIBC_2.26 cacosf128 F
+GLIBC_2.26 cacoshf128 F
+GLIBC_2.26 canonicalizef128 F
+GLIBC_2.26 cargf128 F
+GLIBC_2.26 casinf128 F
+GLIBC_2.26 casinhf128 F
+GLIBC_2.26 catanf128 F
+GLIBC_2.26 catanhf128 F
+GLIBC_2.26 cbrtf128 F
+GLIBC_2.26 ccosf128 F
+GLIBC_2.26 ccoshf128 F
+GLIBC_2.26 ceilf128 F
+GLIBC_2.26 cexpf128 F
+GLIBC_2.26 cimagf128 F
+GLIBC_2.26 clog10f128 F
+GLIBC_2.26 clogf128 F
+GLIBC_2.26 conjf128 F
+GLIBC_2.26 copysignf128 F
+GLIBC_2.26 cosf128 F
+GLIBC_2.26 coshf128 F
+GLIBC_2.26 cpowf128 F
+GLIBC_2.26 cprojf128 F
+GLIBC_2.26 crealf128 F
+GLIBC_2.26 csinf128 F
+GLIBC_2.26 csinhf128 F
+GLIBC_2.26 csqrtf128 F
+GLIBC_2.26 ctanf128 F
+GLIBC_2.26 ctanhf128 F
+GLIBC_2.26 erfcf128 F
+GLIBC_2.26 erff128 F
+GLIBC_2.26 exp10f128 F
+GLIBC_2.26 exp2f128 F
+GLIBC_2.26 expf128 F
+GLIBC_2.26 expm1f128 F
+GLIBC_2.26 fabsf128 F
+GLIBC_2.26 fdimf128 F
+GLIBC_2.26 floorf128 F
+GLIBC_2.26 fmaf128 F
+GLIBC_2.26 fmaxf128 F
+GLIBC_2.26 fmaxmagf128 F
+GLIBC_2.26 fminf128 F
+GLIBC_2.26 fminmagf128 F
+GLIBC_2.26 fmodf128 F
+GLIBC_2.26 frexpf128 F
+GLIBC_2.26 fromfpf128 F
+GLIBC_2.26 fromfpxf128 F
+GLIBC_2.26 getpayloadf128 F
+GLIBC_2.26 hypotf128 F
+GLIBC_2.26 ilogbf128 F
+GLIBC_2.26 j0f128 F
+GLIBC_2.26 j1f128 F
+GLIBC_2.26 jnf128 F
+GLIBC_2.26 ldexpf128 F
+GLIBC_2.26 lgammaf128 F
+GLIBC_2.26 lgammaf128_r F
+GLIBC_2.26 llogbf128 F
+GLIBC_2.26 llrintf128 F
+GLIBC_2.26 llroundf128 F
+GLIBC_2.26 log10f128 F
+GLIBC_2.26 log1pf128 F
+GLIBC_2.26 log2f128 F
+GLIBC_2.26 logbf128 F
+GLIBC_2.26 logf128 F
+GLIBC_2.26 lrintf128 F
+GLIBC_2.26 lroundf128 F
+GLIBC_2.26 modff128 F
+GLIBC_2.26 nanf128 F
+GLIBC_2.26 nearbyintf128 F
+GLIBC_2.26 nextafterf128 F
+GLIBC_2.26 nextdownf128 F
+GLIBC_2.26 nextupf128 F
+GLIBC_2.26 powf128 F
+GLIBC_2.26 remainderf128 F
+GLIBC_2.26 remquof128 F
+GLIBC_2.26 rintf128 F
+GLIBC_2.26 roundevenf128 F
+GLIBC_2.26 roundf128 F
+GLIBC_2.26 scalblnf128 F
+GLIBC_2.26 scalbnf128 F
+GLIBC_2.26 setpayloadf128 F
+GLIBC_2.26 setpayloadsigf128 F
+GLIBC_2.26 sincosf128 F
+GLIBC_2.26 sinf128 F
+GLIBC_2.26 sinhf128 F
+GLIBC_2.26 sqrtf128 F
+GLIBC_2.26 tanf128 F
+GLIBC_2.26 tanhf128 F
+GLIBC_2.26 tgammaf128 F
+GLIBC_2.26 totalorderf128 F
+GLIBC_2.26 totalordermagf128 F
+GLIBC_2.26 truncf128 F
+GLIBC_2.26 ufromfpf128 F
+GLIBC_2.26 ufromfpxf128 F
+GLIBC_2.26 y0f128 F
+GLIBC_2.26 y1f128 F
+GLIBC_2.26 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 0c557e9..d91a038 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2105,8 +2105,15 @@  GLIBC_2.25 strfromd F
 GLIBC_2.25 strfromf F
 GLIBC_2.25 strfroml F
 GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __strtof128_internal F
+GLIBC_2.26 __wcstof128_internal F
 GLIBC_2.26 preadv2 F
 GLIBC_2.26 preadv64v2 F
 GLIBC_2.26 pwritev2 F
 GLIBC_2.26 pwritev64v2 F
 GLIBC_2.26 reallocarray F
+GLIBC_2.26 strfromf128 F
+GLIBC_2.26 strtof128 F
+GLIBC_2.26 strtof128_l F
+GLIBC_2.26 wcstof128 F
+GLIBC_2.26 wcstof128_l F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index a24ff7e..cc19a73 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -461,3 +461,141 @@  GLIBC_2.25 ufromfpl F
 GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
+GLIBC_2.26 GLIBC_2.26 A
+GLIBC_2.26 __acosf128_finite F
+GLIBC_2.26 __acoshf128_finite F
+GLIBC_2.26 __asinf128_finite F
+GLIBC_2.26 __atan2f128_finite F
+GLIBC_2.26 __atanhf128_finite F
+GLIBC_2.26 __coshf128_finite F
+GLIBC_2.26 __exp10f128_finite F
+GLIBC_2.26 __exp2f128_finite F
+GLIBC_2.26 __expf128_finite F
+GLIBC_2.26 __finitef128 F
+GLIBC_2.26 __fmodf128_finite F
+GLIBC_2.26 __fpclassifyf128 F
+GLIBC_2.26 __gammaf128_r_finite F
+GLIBC_2.26 __hypotf128_finite F
+GLIBC_2.26 __iseqsigf128 F
+GLIBC_2.26 __isinff128 F
+GLIBC_2.26 __isnanf128 F
+GLIBC_2.26 __issignalingf128 F
+GLIBC_2.26 __j0f128_finite F
+GLIBC_2.26 __j1f128_finite F
+GLIBC_2.26 __jnf128_finite F
+GLIBC_2.26 __lgammaf128_r_finite F
+GLIBC_2.26 __log10f128_finite F
+GLIBC_2.26 __log2f128_finite F
+GLIBC_2.26 __logf128_finite F
+GLIBC_2.26 __powf128_finite F
+GLIBC_2.26 __remainderf128_finite F
+GLIBC_2.26 __signbitf128 F
+GLIBC_2.26 __sinhf128_finite F
+GLIBC_2.26 __sqrtf128_finite F
+GLIBC_2.26 __y0f128_finite F
+GLIBC_2.26 __y1f128_finite F
+GLIBC_2.26 __ynf128_finite F
+GLIBC_2.26 acosf128 F
+GLIBC_2.26 acoshf128 F
+GLIBC_2.26 asinf128 F
+GLIBC_2.26 asinhf128 F
+GLIBC_2.26 atan2f128 F
+GLIBC_2.26 atanf128 F
+GLIBC_2.26 atanhf128 F
+GLIBC_2.26 cabsf128 F
+GLIBC_2.26 cacosf128 F
+GLIBC_2.26 cacoshf128 F
+GLIBC_2.26 canonicalizef128 F
+GLIBC_2.26 cargf128 F
+GLIBC_2.26 casinf128 F
+GLIBC_2.26 casinhf128 F
+GLIBC_2.26 catanf128 F
+GLIBC_2.26 catanhf128 F
+GLIBC_2.26 cbrtf128 F
+GLIBC_2.26 ccosf128 F
+GLIBC_2.26 ccoshf128 F
+GLIBC_2.26 ceilf128 F
+GLIBC_2.26 cexpf128 F
+GLIBC_2.26 cimagf128 F
+GLIBC_2.26 clog10f128 F
+GLIBC_2.26 clogf128 F
+GLIBC_2.26 conjf128 F
+GLIBC_2.26 copysignf128 F
+GLIBC_2.26 cosf128 F
+GLIBC_2.26 coshf128 F
+GLIBC_2.26 cpowf128 F
+GLIBC_2.26 cprojf128 F
+GLIBC_2.26 crealf128 F
+GLIBC_2.26 csinf128 F
+GLIBC_2.26 csinhf128 F
+GLIBC_2.26 csqrtf128 F
+GLIBC_2.26 ctanf128 F
+GLIBC_2.26 ctanhf128 F
+GLIBC_2.26 erfcf128 F
+GLIBC_2.26 erff128 F
+GLIBC_2.26 exp10f128 F
+GLIBC_2.26 exp2f128 F
+GLIBC_2.26 expf128 F
+GLIBC_2.26 expm1f128 F
+GLIBC_2.26 fabsf128 F
+GLIBC_2.26 fdimf128 F
+GLIBC_2.26 floorf128 F
+GLIBC_2.26 fmaf128 F
+GLIBC_2.26 fmaxf128 F
+GLIBC_2.26 fmaxmagf128 F
+GLIBC_2.26 fminf128 F
+GLIBC_2.26 fminmagf128 F
+GLIBC_2.26 fmodf128 F
+GLIBC_2.26 frexpf128 F
+GLIBC_2.26 fromfpf128 F
+GLIBC_2.26 fromfpxf128 F
+GLIBC_2.26 getpayloadf128 F
+GLIBC_2.26 hypotf128 F
+GLIBC_2.26 ilogbf128 F
+GLIBC_2.26 j0f128 F
+GLIBC_2.26 j1f128 F
+GLIBC_2.26 jnf128 F
+GLIBC_2.26 ldexpf128 F
+GLIBC_2.26 lgammaf128 F
+GLIBC_2.26 lgammaf128_r F
+GLIBC_2.26 llogbf128 F
+GLIBC_2.26 llrintf128 F
+GLIBC_2.26 llroundf128 F
+GLIBC_2.26 log10f128 F
+GLIBC_2.26 log1pf128 F
+GLIBC_2.26 log2f128 F
+GLIBC_2.26 logbf128 F
+GLIBC_2.26 logf128 F
+GLIBC_2.26 lrintf128 F
+GLIBC_2.26 lroundf128 F
+GLIBC_2.26 modff128 F
+GLIBC_2.26 nanf128 F
+GLIBC_2.26 nearbyintf128 F
+GLIBC_2.26 nextafterf128 F
+GLIBC_2.26 nextdownf128 F
+GLIBC_2.26 nextupf128 F
+GLIBC_2.26 powf128 F
+GLIBC_2.26 remainderf128 F
+GLIBC_2.26 remquof128 F
+GLIBC_2.26 rintf128 F
+GLIBC_2.26 roundevenf128 F
+GLIBC_2.26 roundf128 F
+GLIBC_2.26 scalblnf128 F
+GLIBC_2.26 scalbnf128 F
+GLIBC_2.26 setpayloadf128 F
+GLIBC_2.26 setpayloadsigf128 F
+GLIBC_2.26 sincosf128 F
+GLIBC_2.26 sinf128 F
+GLIBC_2.26 sinhf128 F
+GLIBC_2.26 sqrtf128 F
+GLIBC_2.26 tanf128 F
+GLIBC_2.26 tanhf128 F
+GLIBC_2.26 tgammaf128 F
+GLIBC_2.26 totalorderf128 F
+GLIBC_2.26 totalordermagf128 F
+GLIBC_2.26 truncf128 F
+GLIBC_2.26 ufromfpf128 F
+GLIBC_2.26 ufromfpxf128 F
+GLIBC_2.26 y0f128 F
+GLIBC_2.26 y1f128 F
+GLIBC_2.26 ynf128 F
diff --git a/sysdeps/x86/bits/floatn.h b/sysdeps/x86/bits/floatn.h
new file mode 100644
index 0000000..23f7478
--- /dev/null
+++ b/sysdeps/x86/bits/floatn.h
@@ -0,0 +1,96 @@ 
+/* Macros to control TS 18661-3 glibc features on x86.
+   Copyright (C) 2017 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/>.  */
+
+#ifndef _BITS_FLOATN_H
+#define _BITS_FLOATN_H
+
+#include <features.h>
+
+/* Defined to 1 if the current compiler invocation provides a
+   floating-point type with the IEEE 754 binary128 format, and this
+   glibc includes corresponding *f128 interfaces for it.  The required
+   libgcc support was added some time after the basic compiler
+   support, for x86_64 and x86.  */
+#if (defined __x86_64__							\
+     ? __GNUC_PREREQ (4, 3)						\
+     : (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4)))
+# define __HAVE_FLOAT128 1
+#else
+# define __HAVE_FLOAT128 0
+#endif
+
+/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
+   from the default float, double and long double types in this glibc.  */
+#if __HAVE_FLOAT128
+# define __HAVE_DISTINCT_FLOAT128 1
+#else
+# define __HAVE_DISTINCT_FLOAT128 0
+#endif
+
+/* Defined to concatenate the literal suffix to be used with _Float128
+   types, if __HAVE_FLOAT128 is 1. */
+#if __HAVE_FLOAT128
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+/* The literal suffix f128 exists only since GCC 7.0.  */
+#  define __f128(x) x##q
+# else
+#  define __f128(x) x##f128
+# endif
+#endif
+
+/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.  */
+#if __HAVE_FLOAT128
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+/* Add a typedef for older GCC compilers which don't natively support
+   _Complex _Float128.  */
+typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
+#  define __CFLOAT128 __cfloat128
+# else
+#  define __CFLOAT128 _Complex _Float128
+# endif
+#endif
+
+/* The remaining of this file provides support for older compilers.  */
+#if __HAVE_FLOAT128
+
+/* The type _Float128 exists only since GCC 7.0.  */
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef __float128 _Float128;
+# endif
+
+/* __builtin_huge_valf128 doesn't exist before GCC 7.0.  */
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ())
+# endif
+
+/* Older GCC has only a subset of built-in functions for _Float128 on
+   x86, and __builtin_infq is not usable in static initializers.
+   Converting a narrower sNaN to _Float128 produces a quiet NaN, so
+   attempts to use _Float128 sNaNs will not work properly with older
+   compilers.  */
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_copysignf128 __builtin_copysignq
+#  define __builtin_fabsf128 __builtin_fabsq
+#  define __builtin_inff128() ((_Float128) __builtin_inf ())
+#  define __builtin_nanf128(x) ((_Float128) __builtin_nan (x))
+#  define __builtin_nansf128(x) ((_Float128) __builtin_nans (x))
+# endif
+
+#endif
+
+#endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/x86/float128-abi.h b/sysdeps/x86/float128-abi.h
new file mode 100644
index 0000000..6b954cc
--- /dev/null
+++ b/sysdeps/x86/float128-abi.h
@@ -0,0 +1,2 @@ 
+/* ABI version for _Float128 ABI introduction.  */
+#define FLOAT128_VERSION GLIBC_2.26
diff --git a/sysdeps/x86/fpu/Makefile b/sysdeps/x86/fpu/Makefile
index a8047a4..600e42c 100644
--- a/sysdeps/x86/fpu/Makefile
+++ b/sysdeps/x86/fpu/Makefile
@@ -1,4 +1,7 @@ 
 ifeq ($(subdir),math)
+# sqrtf128 requires soft-fp.
+CPPFLAGS += -I../soft-fp
+
 libm-support += powl_helper
 tests += test-fenv-sse test-fenv-clear-sse test-fenv-x87 test-fenv-sse-2 \
 	 test-flt-eval-method-387 test-flt-eval-method-sse
diff --git a/sysdeps/x86/fpu/e_sqrtf128.c b/sysdeps/x86/fpu/e_sqrtf128.c
new file mode 100644
index 0000000..f6a62a8
--- /dev/null
+++ b/sysdeps/x86/fpu/e_sqrtf128.c
@@ -0,0 +1,47 @@ 
+/* soft-fp sqrt for _Float128
+   Return sqrt(a)
+   Copyright (C) 2017 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.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file into
+   combinations with other programs, and to distribute those
+   combinations without any restriction coming from the use of this
+   file.  (The Lesser General Public License restrictions do apply in
+   other respects; for example, they cover modification of the file,
+   and distribution when not linked into a combine executable.)
+
+   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 <soft-fp.h>
+#include <quad.h>
+
+__float128
+__ieee754_sqrtf128 (__float128 a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q (A);
+  FP_DECL_Q (R);
+  __float128 r;
+
+  FP_INIT_ROUNDMODE;
+  FP_UNPACK_Q (A, a);
+  FP_SQRT_Q (R, A);
+  FP_PACK_Q (r, R);
+  FP_HANDLE_EXCEPTIONS;
+  return r;
+}
+strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
diff --git a/sysdeps/x86/fpu/sfp-machine.h b/sysdeps/x86/fpu/sfp-machine.h
new file mode 100644
index 0000000..df8906a
--- /dev/null
+++ b/sysdeps/x86/fpu/sfp-machine.h
@@ -0,0 +1,209 @@ 
+/* Configure soft-fp for building sqrtf128.  Based on sfp-machine.h in
+   libgcc, with soft-float and other irrelevant parts removed.  */
+
+/* The type of the result of a floating point comparison.  This must
+   match `__libgcc_cmp_return__' in GCC for the target.  */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#ifdef __x86_64__
+# define _FP_W_TYPE_SIZE	64
+# define _FP_W_TYPE		unsigned long long
+# define _FP_WS_TYPE		signed long long
+# define _FP_I_TYPE		long long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+# define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+# define _FP_MUL_MEAT_Q(R,X,Y)				\
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+# define _FP_DIV_MEAT_Q(R,X,Y)   _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+# define _FP_NANFRAC_S		_FP_QNANBIT_S
+# define _FP_NANFRAC_D		_FP_QNANBIT_D
+# define _FP_NANFRAC_E		_FP_QNANBIT_E, 0
+# define _FP_NANFRAC_Q		_FP_QNANBIT_Q, 0
+
+# define FP_EX_SHIFT 7
+
+# define _FP_DECL_EX \
+  unsigned int _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
+
+# define FP_RND_NEAREST		0
+# define FP_RND_ZERO		0x6000
+# define FP_RND_PINF		0x4000
+# define FP_RND_MINF		0x2000
+
+# define FP_RND_MASK		0x6000
+
+# define FP_INIT_ROUNDMODE					\
+  do {								\
+    __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_fcw));	\
+  } while (0)
+#else
+# define _FP_W_TYPE_SIZE	32
+# define _FP_W_TYPE		unsigned int
+# define _FP_WS_TYPE		signed int
+# define _FP_I_TYPE		int
+
+# define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
+  __asm__ ("add{l} {%11,%3|%3,%11}\n\t"				\
+	   "adc{l} {%9,%2|%2,%9}\n\t"				\
+	   "adc{l} {%7,%1|%1,%7}\n\t"				\
+	   "adc{l} {%5,%0|%0,%5}"				\
+	   : "=r" ((USItype) (r3)),				\
+	     "=&r" ((USItype) (r2)),				\
+	     "=&r" ((USItype) (r1)),				\
+	     "=&r" ((USItype) (r0))				\
+	   : "%0" ((USItype) (x3)),				\
+	     "g" ((USItype) (y3)),				\
+	     "%1" ((USItype) (x2)),				\
+	     "g" ((USItype) (y2)),				\
+	     "%2" ((USItype) (x1)),				\
+	     "g" ((USItype) (y1)),				\
+	     "%3" ((USItype) (x0)),				\
+	     "g" ((USItype) (y0)))
+# define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
+  __asm__ ("add{l} {%8,%2|%2,%8}\n\t"				\
+	   "adc{l} {%6,%1|%1,%6}\n\t"				\
+	   "adc{l} {%4,%0|%0,%4}"				\
+	   : "=r" ((USItype) (r2)),				\
+	     "=&r" ((USItype) (r1)),				\
+	     "=&r" ((USItype) (r0))				\
+	   : "%0" ((USItype) (x2)),				\
+	     "g" ((USItype) (y2)),				\
+	     "%1" ((USItype) (x1)),				\
+	     "g" ((USItype) (y1)),				\
+	     "%2" ((USItype) (x0)),				\
+	     "g" ((USItype) (y0)))
+# define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
+  __asm__ ("sub{l} {%11,%3|%3,%11}\n\t"				\
+	   "sbb{l} {%9,%2|%2,%9}\n\t"				\
+	   "sbb{l} {%7,%1|%1,%7}\n\t"				\
+	   "sbb{l} {%5,%0|%0,%5}"				\
+	   : "=r" ((USItype) (r3)),				\
+	     "=&r" ((USItype) (r2)),				\
+	     "=&r" ((USItype) (r1)),				\
+	     "=&r" ((USItype) (r0))				\
+	   : "0" ((USItype) (x3)),				\
+	     "g" ((USItype) (y3)),				\
+	     "1" ((USItype) (x2)),				\
+	     "g" ((USItype) (y2)),				\
+	     "2" ((USItype) (x1)),				\
+	     "g" ((USItype) (y1)),				\
+	     "3" ((USItype) (x0)),				\
+	     "g" ((USItype) (y0)))
+# define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
+  __asm__ ("sub{l} {%8,%2|%2,%8}\n\t"				\
+	   "sbb{l} {%6,%1|%1,%6}\n\t"				\
+	   "sbb{l} {%4,%0|%0,%4}"				\
+	   : "=r" ((USItype) (r2)),				\
+	     "=&r" ((USItype) (r1)),				\
+	     "=&r" ((USItype) (r0))				\
+	   : "0" ((USItype) (x2)),				\
+	     "g" ((USItype) (y2)),				\
+	     "1" ((USItype) (x1)),				\
+	     "g" ((USItype) (y1)),				\
+	     "2" ((USItype) (x0)),				\
+	     "g" ((USItype) (y0)))
+# define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i)			\
+  __asm__ ("add{l} {%4,%3|%3,%4}\n\t"				\
+	   "adc{l} {$0,%2|%2,0}\n\t"				\
+	   "adc{l} {$0,%1|%1,0}\n\t"				\
+	   "adc{l} {$0,%0|%0,0}"				\
+	   : "+r" ((USItype) (x3)),				\
+	     "+&r" ((USItype) (x2)),				\
+	     "+&r" ((USItype) (x1)),				\
+	     "+&r" ((USItype) (x0))				\
+	   : "g" ((USItype) (i)))
+
+
+# define _FP_MUL_MEAT_S(R,X,Y)				\
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+# define _FP_MUL_MEAT_D(R,X,Y)				\
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+# define _FP_MUL_MEAT_Q(R,X,Y)				\
+  _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+# define _FP_DIV_MEAT_S(R,X,Y)   _FP_DIV_MEAT_1_loop(S,R,X,Y)
+# define _FP_DIV_MEAT_D(R,X,Y)   _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+# define _FP_DIV_MEAT_Q(R,X,Y)   _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+# define _FP_NANFRAC_S		_FP_QNANBIT_S
+# define _FP_NANFRAC_D		_FP_QNANBIT_D, 0
+/* Even if XFmode is 12byte,  we have to pad it to
+   16byte since soft-fp emulation is done in 16byte.  */
+# define _FP_NANFRAC_E		_FP_QNANBIT_E, 0, 0, 0
+# define _FP_NANFRAC_Q		_FP_QNANBIT_Q, 0, 0, 0
+
+# define FP_EX_SHIFT 0
+
+# define _FP_DECL_EX \
+  unsigned short _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
+
+# define FP_RND_NEAREST		0
+# define FP_RND_ZERO		0xc00
+# define FP_RND_PINF		0x800
+# define FP_RND_MINF		0x400
+
+# define FP_RND_MASK		0xc00
+
+# define FP_INIT_ROUNDMODE				\
+  do {							\
+    __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_fcw));	\
+  } while (0)
+#endif
+
+#define _FP_KEEPNANFRACP	1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_NANSIGN_S		1
+#define _FP_NANSIGN_D		1
+#define _FP_NANSIGN_E		1
+#define _FP_NANSIGN_Q		1
+
+/* Here is something Intel misdesigned: the specs don't define
+   the case where we have two NaNs with same mantissas, but
+   different sign. Different operations pick up different NaNs.  */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)			\
+  do {								\
+    if (_FP_FRAC_GT_##wc(X, Y)					\
+	|| (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*')))	\
+      {								\
+	R##_s = X##_s;						\
+	_FP_FRAC_COPY_##wc(R,X);				\
+      }								\
+    else							\
+      {								\
+	R##_s = Y##_s;						\
+	_FP_FRAC_COPY_##wc(R,Y);				\
+      }								\
+    R##_c = FP_CLS_NAN;						\
+  } while (0)
+
+#define FP_EX_INVALID		0x01
+#define FP_EX_DENORM		0x02
+#define FP_EX_DIVZERO		0x04
+#define FP_EX_OVERFLOW		0x08
+#define FP_EX_UNDERFLOW		0x10
+#define FP_EX_INEXACT		0x20
+#define FP_EX_ALL \
+	(FP_EX_INVALID | FP_EX_DENORM | FP_EX_DIVZERO | FP_EX_OVERFLOW \
+	 | FP_EX_UNDERFLOW | FP_EX_INEXACT)
+
+void __sfp_handle_exceptions (int);
+
+#define FP_HANDLE_EXCEPTIONS			\
+  do {						\
+    if (__builtin_expect (_fex, 0))		\
+      __sfp_handle_exceptions (_fex);		\
+  } while (0);
+
+#define FP_TRAPPING_EXCEPTIONS ((~_fcw >> FP_EX_SHIFT) & FP_EX_ALL)
+
+#define FP_ROUNDMODE		(_fcw & FP_RND_MASK)
+
+#define _FP_TININESS_AFTER_ROUNDING 1
diff --git a/sysdeps/x86/math-tests.h b/sysdeps/x86/math-tests.h
new file mode 100644
index 0000000..c0ab951
--- /dev/null
+++ b/sysdeps/x86/math-tests.h
@@ -0,0 +1,25 @@ 
+/* Configuration for math tests.  x86 version.
+   Copyright (C) 2017 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/>.  */
+
+/* Before GCC 7, there is no built-in function to provide a __float128
+   sNaN, so most sNaN tests for this type cannot work.  */
+#if !__GNUC_PREREQ (7, 0)
+# define SNAN_TESTS_float128	0
+#endif
+
+#include_next <math-tests.h>
diff --git a/sysdeps/x86_64/Implies b/sysdeps/x86_64/Implies
index 811c19a..3d7ded7 100644
--- a/sysdeps/x86_64/Implies
+++ b/sysdeps/x86_64/Implies
@@ -1,4 +1,5 @@ 
 x86
+ieee754/float128
 ieee754/ldbl-96
 ieee754/dbl-64/wordsize-64
 ieee754/dbl-64
diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
index 61da961..c347642 100644
--- a/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/sysdeps/x86_64/fpu/libm-test-ulps
@@ -3,1027 +3,1291 @@ 
 # Maximal error of functions:
 Function: "acos":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "acos_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acos_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "acosh":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "acosh_downward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "acosh_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "acosh_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "asin":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "asin_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "asin_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "asinh":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "asinh_downward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "asinh_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "asinh_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "atan":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_towardzero":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "atan2_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atan_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "atan_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "atanh":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "atanh_downward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "atanh_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "atanh_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "cabs":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cabs_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacos":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cacos":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacos_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "cacos_towardzero":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_towardzero":
 double: 5
 float: 3
+float128: 5
 idouble: 5
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "cacos_upward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacos_upward":
 double: 5
 float: 7
+float128: 7
 idouble: 5
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "cacosh":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cacosh":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cacosh_downward":
 double: 5
 float: 3
+float128: 5
 idouble: 5
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_downward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cacosh_towardzero":
 double: 5
 float: 3
+float128: 5
 idouble: 5
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_towardzero":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cacosh_upward":
 double: 4
 float: 4
+float128: 6
 idouble: 4
 ifloat: 4
+ifloat128: 6
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "cacosh_upward":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: "carg":
 float: 1
+float128: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "carg_towardzero":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "carg_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casin":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "casin":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "casin_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Real part of "casin_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "casin_towardzero":
 double: 5
 float: 3
+float128: 5
 idouble: 5
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Real part of "casin_upward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casin_upward":
 double: 5
 float: 7
+float128: 7
 idouble: 5
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Real part of "casinh":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "casinh":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "casinh_downward":
 double: 5
 float: 3
+float128: 6
 idouble: 5
 ifloat: 3
+ifloat128: 6
 ildouble: 6
 ldouble: 6
 
 Function: Imaginary part of "casinh_downward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_towardzero":
 double: 5
 float: 3
+float128: 5
 idouble: 5
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "casinh_towardzero":
 double: 3
 float: 1
+float128: 3
 idouble: 3
 ifloat: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "casinh_upward":
 double: 5
 float: 7
+float128: 7
 idouble: 5
 ifloat: 7
+ifloat128: 7
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "casinh_upward":
 double: 3
 float: 2
+float128: 3
 idouble: 3
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "catan":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catan_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "catan_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catan_upward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "catanh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "catanh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "catanh_upward":
 double: 4
 float: 4
+float128: 4
 idouble: 4
 ifloat: 4
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "catanh_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt":
 double: 3
 float: 1
+float128: 1
 idouble: 3
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt_downward":
 double: 4
 float: 1
+float128: 1
 idouble: 4
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt_towardzero":
 double: 3
 float: 1
+float128: 1
 idouble: 3
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cbrt_upward":
 double: 5
 float: 1
+float128: 1
 idouble: 5
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccos":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccos_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_downward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccos_towardzero":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccos_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccos_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ccosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ccosh_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_downward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_towardzero":
 double: 1
 float: 3
+float128: 2
 idouble: 1
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ccosh_towardzero":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ccosh_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ccosh_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cexp":
 double: 2
 float: 1
+float128: 1
 idouble: 2
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cexp":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cexp_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_downward":
 double: 1
 float: 3
+float128: 2
 idouble: 1
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cexp_towardzero":
 double: 1
 float: 3
+float128: 2
 idouble: 1
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "cexp_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cexp_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog":
 double: 3
 float: 3
+float128: 2
 idouble: 3
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "clog":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog10":
 double: 3
 float: 4
+float128: 2
 idouble: 3
 ifloat: 4
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog10":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "clog10_downward":
 double: 5
 float: 4
+float128: 3
 idouble: 5
 ifloat: 4
+ifloat128: 3
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_downward":
 double: 2
 float: 4
+float128: 3
 idouble: 2
 ifloat: 4
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_towardzero":
 double: 5
 float: 5
+float128: 4
 idouble: 5
 ifloat: 5
+ifloat128: 4
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_towardzero":
 double: 2
 float: 4
+float128: 3
 idouble: 2
 ifloat: 4
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog10_upward":
 double: 6
 float: 5
+float128: 4
 idouble: 6
 ifloat: 5
+ifloat128: 4
 ildouble: 8
 ldouble: 8
 
 Function: Imaginary part of "clog10_upward":
 double: 2
 float: 4
+float128: 3
 idouble: 2
 ifloat: 4
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "clog_downward":
 double: 4
 float: 3
+float128: 3
 idouble: 4
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_towardzero":
 double: 4
 float: 4
+float128: 3
 idouble: 4
 ifloat: 4
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "clog_towardzero":
 double: 1
 float: 3
+float128: 2
 idouble: 1
 ifloat: 3
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "clog_upward":
 double: 4
 float: 3
+float128: 4
 idouble: 4
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "clog_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "cos":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "cos_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "cos_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cos_upward":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
@@ -1050,534 +1314,674 @@  float: 1
 Function: "cosh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "cosh_upward":
 double: 1
 float: 2
+float128: 3
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 2
 ldouble: 3
 
 Function: Real part of "cpow":
 double: 2
 float: 5
+float128: 4
 idouble: 2
 ifloat: 5
+ifloat128: 4
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "cpow":
 float: 2
+float128: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "cpow_downward":
 double: 4
 float: 8
+float128: 6
 idouble: 4
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "cpow_towardzero":
 double: 4
 float: 8
+float128: 6
 idouble: 4
 ifloat: 8
+ifloat128: 6
 ildouble: 7
 ldouble: 7
 
 Function: Imaginary part of "cpow_towardzero":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "cpow_upward":
 double: 4
 float: 1
+float128: 3
 idouble: 4
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "cpow_upward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csin":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
+Function: Imaginary part of "csin":
+float128: 1
+ifloat128: 1
+
 Function: Real part of "csin_downward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_downward":
 double: 1
 float: 2
+float128: 2
 idouble: 1
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_towardzero":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_upward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csin_upward":
 double: 1
 float: 3
+float128: 3
 idouble: 1
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "csinh":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "csinh_downward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_downward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_towardzero":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_towardzero":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csinh_upward":
 double: 1
 float: 3
+float128: 3
 idouble: 1
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "csinh_upward":
 double: 2
 float: 3
+float128: 2
 idouble: 2
 ifloat: 3
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "csqrt":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "csqrt":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "csqrt_downward":
 double: 5
 float: 4
+float128: 4
 idouble: 5
 ifloat: 4
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_downward":
 double: 4
 float: 3
+float128: 3
 idouble: 4
 ifloat: 3
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_towardzero":
 double: 4
 float: 3
+float128: 3
 idouble: 4
 ifloat: 3
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "csqrt_towardzero":
 double: 4
 float: 3
+float128: 3
 idouble: 4
 ifloat: 3
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "csqrt_upward":
 double: 5
 float: 4
+float128: 4
 idouble: 5
 ifloat: 4
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "csqrt_upward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Imaginary part of "ctan":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Real part of "ctan_downward":
 double: 6
 float: 5
+float128: 4
 idouble: 6
 ifloat: 5
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_downward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_towardzero":
 double: 5
 float: 3
+float128: 4
 idouble: 5
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: Imaginary part of "ctan_towardzero":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctan_upward":
 double: 2
 float: 4
+float128: 5
 idouble: 2
 ifloat: 4
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctan_upward":
 double: 2
 float: 1
+float128: 5
 idouble: 2
 ifloat: 1
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "ctanh":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: Real part of "ctanh_downward":
 double: 4
 float: 2
+float128: 5
 idouble: 4
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_downward":
 double: 6
 float: 5
+float128: 4
 idouble: 6
 ifloat: 5
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: Real part of "ctanh_towardzero":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: Imaginary part of "ctanh_towardzero":
 double: 5
 float: 3
+float128: 3
 idouble: 5
 ifloat: 3
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: Real part of "ctanh_upward":
 double: 2
 float: 2
+float128: 5
 idouble: 2
 ifloat: 2
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: Imaginary part of "ctanh_upward":
 double: 2
 float: 3
+float128: 5
 idouble: 2
 ifloat: 3
+ifloat128: 5
 ildouble: 3
 ldouble: 3
 
 Function: "erf":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erf_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "erf_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "erfc":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "erfc_downward":
 double: 5
 float: 6
+float128: 5
 idouble: 5
 ifloat: 6
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_towardzero":
 double: 3
 float: 4
+float128: 4
 idouble: 3
 ifloat: 4
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "erfc_upward":
 double: 5
 float: 6
+float128: 5
 idouble: 5
 ifloat: 6
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "exp":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp10":
 double: 2
+float128: 2
 idouble: 2
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "exp10_downward":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_towardzero":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp10_upward":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 2
 ldouble: 2
 
 Function: "exp2":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_downward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "exp2_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -1624,32 +2028,40 @@  float: 1
 Function: "expm1":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "expm1_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_towardzero":
 double: 1
 float: 2
+float128: 4
 idouble: 1
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "expm1_upward":
 double: 1
 float: 1
+float128: 3
 idouble: 1
 ifloat: 1
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
@@ -1687,275 +2099,347 @@  ldouble: 6
 
 Function: "hypot":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_downward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_towardzero":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "hypot_upward":
 double: 1
+float128: 1
 idouble: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "j0":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "j0_downward":
 double: 2
 float: 4
+float128: 4
 idouble: 2
 ifloat: 4
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j0_towardzero":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "j0_upward":
 double: 3
 float: 2
+float128: 5
 idouble: 3
 ifloat: 2
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "j1":
 double: 1
 float: 2
+float128: 4
 idouble: 1
 ifloat: 2
+ifloat128: 4
 ildouble: 1
 ldouble: 1
 
 Function: "j1_downward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_towardzero":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "j1_upward":
 double: 3
 float: 5
+float128: 3
 idouble: 3
 ifloat: 5
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "jn":
 double: 4
 float: 4
+float128: 7
 idouble: 4
 ifloat: 4
+ifloat128: 7
 ildouble: 4
 ldouble: 4
 
 Function: "jn_downward":
 double: 5
 float: 5
+float128: 8
 idouble: 5
 ifloat: 5
+ifloat128: 8
 ildouble: 4
 ldouble: 4
 
 Function: "jn_towardzero":
 double: 5
 float: 5
+float128: 8
 idouble: 5
 ifloat: 5
+ifloat128: 8
 ildouble: 5
 ldouble: 5
 
 Function: "jn_upward":
 double: 5
 float: 5
+float128: 7
 idouble: 5
 ifloat: 5
+ifloat128: 7
 ildouble: 5
 ldouble: 5
 
 Function: "lgamma":
 double: 4
 float: 4
+float128: 5
 idouble: 4
 ifloat: 4
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "lgamma_downward":
 double: 5
 float: 4
+float128: 8
 idouble: 5
 ifloat: 4
+ifloat128: 8
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_towardzero":
 double: 5
 float: 4
+float128: 5
 idouble: 5
 ifloat: 4
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "lgamma_upward":
 double: 5
 float: 5
+float128: 8
 idouble: 5
 ifloat: 5
+ifloat128: 8
 ildouble: 6
 ldouble: 6
 
 Function: "log":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10":
 double: 2
 float: 2
+float128: 1
 idouble: 2
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log10_downward":
 double: 2
 float: 3
+float128: 1
 idouble: 2
 ifloat: 3
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_towardzero":
 double: 2
 float: 2
+float128: 1
 idouble: 2
 ifloat: 2
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log10_upward":
 double: 2
 float: 2
+float128: 1
 idouble: 2
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log1p":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log1p_downward":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "log1p_upward":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "log2":
 double: 2
 float: 1
+float128: 2
 idouble: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
 Function: "log2_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "log2_towardzero":
 double: 2
 float: 2
+float128: 1
 idouble: 2
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log2_upward":
 double: 3
 float: 3
+float128: 1
 idouble: 3
 ifloat: 3
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "log_downward":
 float: 2
+float128: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "log_towardzero":
 float: 2
+float128: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "log_upward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
@@ -1981,7 +2465,9 @@  float: 2
 
 Function: "pow":
 float: 1
+float128: 2
 ifloat: 1
+ifloat128: 2
 ildouble: 1
 ldouble: 1
 
@@ -2018,24 +2504,30 @@  ldouble: 2
 Function: "pow_downward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_towardzero":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
 Function: "pow_upward":
 double: 1
 float: 1
+float128: 2
 idouble: 1
 ifloat: 1
+ifloat128: 2
 ildouble: 4
 ldouble: 4
 
@@ -2060,24 +2552,32 @@  Function: "pow_vlen8_avx2":
 float: 3
 
 Function: "sin":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sin_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sin_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sin_upward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
@@ -2102,24 +2602,32 @@  Function: "sin_vlen8_avx2":
 float: 1
 
 Function: "sincos":
+float128: 1
+ifloat128: 1
 ildouble: 1
 ldouble: 1
 
 Function: "sincos_downward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "sincos_towardzero":
 double: 1
+float128: 2
 idouble: 1
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sincos_upward":
 double: 1
+float128: 3
 idouble: 1
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
@@ -2146,222 +2654,278 @@  float: 1
 Function: "sinh":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "sinh_downward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: "sinh_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "sinh_upward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "tan":
 float: 1
+float128: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tan_downward":
 double: 1
 float: 2
+float128: 1
 idouble: 1
 ifloat: 2
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_towardzero":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 3
 ldouble: 3
 
 Function: "tan_upward":
 double: 1
 float: 1
+float128: 1
 idouble: 1
 ifloat: 1
+ifloat128: 1
 ildouble: 2
 ldouble: 2
 
 Function: "tanh":
 double: 2
 float: 2
+float128: 2
 idouble: 2
 ifloat: 2
+ifloat128: 2
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_downward":
 double: 3
 float: 3
+float128: 4
 idouble: 3
 ifloat: 3
+ifloat128: 4
 ildouble: 4
 ldouble: 4
 
 Function: "tanh_towardzero":
 double: 2
 float: 2
+float128: 3
 idouble: 2
 ifloat: 2
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "tanh_upward":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 4
 ldouble: 4
 
 Function: "tgamma":
 double: 5
 float: 5
+float128: 4
 idouble: 5
 ifloat: 5
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_downward":
 double: 5
 float: 5
+float128: 5
 idouble: 5
 ifloat: 5
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_towardzero":
 double: 5
 float: 5
+float128: 5
 idouble: 5
 ifloat: 5
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "tgamma_upward":
 double: 5
 float: 5
+float128: 4
 idouble: 5
 ifloat: 5
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0":
 double: 2
 float: 1
+float128: 3
 idouble: 2
 ifloat: 1
+ifloat128: 3
 ildouble: 1
 ldouble: 1
 
 Function: "y0_downward":
 double: 3
 float: 4
+float128: 4
 idouble: 3
 ifloat: 4
+ifloat128: 4
 ildouble: 5
 ldouble: 5
 
 Function: "y0_towardzero":
 double: 3
 float: 3
+float128: 3
 idouble: 3
 ifloat: 3
+ifloat128: 3
 ildouble: 5
 ldouble: 5
 
 Function: "y0_upward":
 double: 3
 float: 5
+float128: 3
 idouble: 3
 ifloat: 5
+ifloat128: 3
 ildouble: 3
 ldouble: 3
 
 Function: "y1":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 2
 ldouble: 2
 
 Function: "y1_downward":
 double: 3
 float: 2
+float128: 4
 idouble: 3
 ifloat: 2
+ifloat128: 4
 ildouble: 7
 ldouble: 7
 
 Function: "y1_towardzero":
 double: 3
 float: 2
+float128: 2
 idouble: 3
 ifloat: 2
+ifloat128: 2
 ildouble: 5
 ldouble: 5
 
 Function: "y1_upward":
 double: 7
 float: 2
+float128: 5
 idouble: 7
 ifloat: 2
+ifloat128: 5
 ildouble: 7
 ldouble: 7
 
 Function: "yn":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 4
 ldouble: 4
 
 Function: "yn_downward":
 double: 3
 float: 4
+float128: 5
 idouble: 3
 ifloat: 4
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_towardzero":
 double: 3
 float: 3
+float128: 5
 idouble: 3
 ifloat: 3
+ifloat128: 5
 ildouble: 5
 ldouble: 5
 
 Function: "yn_upward":
 double: 4
 float: 5
+float128: 5
 idouble: 4
 ifloat: 5
+ifloat128: 5
 ildouble: 4
 ldouble: 4