diff options
-rw-r--r-- | sysdeps/powerpc/bits/floatn.h | 88 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/libm-test-ulps | 578 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/math_private.h | 11 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64le/Implies-before | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64le/Makefile | 48 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c | 57 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h | 158 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c | 36 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist | 137 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h | 2 |
11 files changed, 1123 insertions, 0 deletions
diff --git a/sysdeps/powerpc/bits/floatn.h b/sysdeps/powerpc/bits/floatn.h new file mode 100644 index 0000000000..d5a8b74efc --- /dev/null +++ b/sysdeps/powerpc/bits/floatn.h @@ -0,0 +1,88 @@ +/* Macros to control TS 18661-3 glibc features on powerpc. + 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/>. */ + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include <bits/libc-header-start.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. */ +#if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) \ + && defined __FLOAT128__ +# 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) +/* The literal suffix (f128) exist for powerpc 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) +/* Add a typedef for older GCC compilers which don't natively support + _Complex _Float128. */ +typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__KC__))); +# 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 exist for powerpc only since GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) +typedef __float128 _Float128; +# endif + +/* Builtin __builtin_huge_valf128 doesn't exist before GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ()) +# endif + +/* The following builtins (suffixed with 'q') are available in GCC >= 6.2, + which is the minimum version required for float128 support on powerpc64le. + Since GCC 7.0 the builtins suffixed with f128 are also available, then + there is no need to redefined them. */ +# if !__GNUC_PREREQ (7, 0) +# define __builtin_copysignf128 __builtin_copysignq +# define __builtin_fabsf128 __builtin_fabsq +# define __builtin_inff128 __builtin_infq +# define __builtin_nanf128 __builtin_nanq +# define __builtin_nansf128 __builtin_nansq +# endif + +#endif diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps index 72eb2b1e5a..65715383f1 100644 --- a/sysdeps/powerpc/fpu/libm-test-ulps +++ b/sysdeps/powerpc/fpu/libm-test-ulps @@ -6,6 +6,8 @@ float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "acos_downward": double: 1 @@ -14,6 +16,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "acos_towardzero": double: 1 @@ -22,6 +26,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "acos_upward": double: 1 @@ -30,6 +36,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "acosh": double: 2 @@ -38,6 +46,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "acosh_downward": double: 2 @@ -46,6 +56,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: "acosh_towardzero": double: 2 @@ -54,6 +66,8 @@ idouble: 2 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: "acosh_upward": double: 2 @@ -62,12 +76,16 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 4 +ifloat128: 2 +float128: 2 Function: "asin": float: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "asin_downward": double: 1 @@ -76,6 +94,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "asin_towardzero": double: 1 @@ -84,6 +104,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "asin_upward": double: 1 @@ -92,6 +114,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "asinh": double: 1 @@ -100,6 +124,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 3 +float128: 3 Function: "asinh_downward": double: 3 @@ -108,6 +134,8 @@ idouble: 3 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 4 +float128: 4 Function: "asinh_towardzero": double: 2 @@ -116,6 +144,8 @@ idouble: 2 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: "asinh_upward": double: 3 @@ -124,6 +154,8 @@ idouble: 3 ifloat: 3 ildouble: 7 ldouble: 7 +ifloat128: 4 +float128: 4 Function: "atan": double: 1 @@ -132,12 +164,16 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "atan2": float: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "atan2_downward": double: 1 @@ -146,6 +182,8 @@ idouble: 1 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: "atan2_towardzero": double: 1 @@ -154,6 +192,8 @@ idouble: 1 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "atan2_upward": double: 1 @@ -162,6 +202,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "atan_downward": double: 1 @@ -170,6 +212,8 @@ idouble: 1 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "atan_towardzero": double: 1 @@ -178,6 +222,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "atan_upward": double: 1 @@ -186,6 +232,8 @@ idouble: 1 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "atanh": double: 2 @@ -194,6 +242,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 3 +float128: 3 Function: "atanh_downward": double: 3 @@ -202,6 +252,8 @@ idouble: 3 ifloat: 3 ildouble: 3 ldouble: 3 +ifloat128: 4 +float128: 4 Function: "atanh_towardzero": double: 2 @@ -210,6 +262,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "atanh_upward": double: 3 @@ -218,30 +272,40 @@ idouble: 3 ifloat: 3 ildouble: 4 ldouble: 4 +ifloat128: 4 +float128: 4 Function: "cabs": double: 1 idouble: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "cabs_downward": double: 1 idouble: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "cabs_towardzero": double: 1 idouble: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "cabs_upward": double: 1 idouble: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "cacos": double: 1 @@ -250,6 +314,8 @@ idouble: 1 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Imaginary part of "cacos": double: 2 @@ -258,6 +324,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: Real part of "cacos_downward": double: 3 @@ -266,6 +334,8 @@ idouble: 3 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: Imaginary part of "cacos_downward": double: 5 @@ -274,6 +344,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 6 +float128: 6 Function: Real part of "cacos_towardzero": double: 3 @@ -282,6 +354,8 @@ idouble: 3 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: Imaginary part of "cacos_towardzero": double: 5 @@ -290,6 +364,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: Real part of "cacos_upward": double: 2 @@ -298,6 +374,8 @@ idouble: 2 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: Imaginary part of "cacos_upward": double: 5 @@ -306,6 +384,8 @@ idouble: 5 ifloat: 5 ildouble: 13 ldouble: 13 +ifloat128: 7 +float128: 7 Function: Real part of "cacosh": double: 2 @@ -314,6 +394,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: Imaginary part of "cacosh": double: 1 @@ -322,6 +404,8 @@ idouble: 1 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Real part of "cacosh_downward": double: 5 @@ -330,6 +414,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: Imaginary part of "cacosh_downward": double: 3 @@ -338,6 +424,8 @@ idouble: 3 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 4 +float128: 4 Function: Real part of "cacosh_towardzero": double: 5 @@ -346,6 +434,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: Imaginary part of "cacosh_towardzero": double: 3 @@ -354,6 +444,8 @@ idouble: 3 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: Real part of "cacosh_upward": double: 4 @@ -362,6 +454,8 @@ idouble: 4 ifloat: 4 ildouble: 12 ldouble: 12 +ifloat128: 6 +float128: 6 Function: Imaginary part of "cacosh_upward": double: 3 @@ -370,6 +464,8 @@ idouble: 3 ifloat: 2 ildouble: 8 ldouble: 8 +ifloat128: 4 +float128: 4 Function: "carg": double: 1 @@ -378,6 +474,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "carg_downward": double: 1 @@ -386,6 +484,8 @@ idouble: 1 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: "carg_towardzero": double: 1 @@ -394,6 +494,8 @@ idouble: 1 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "carg_upward": double: 1 @@ -402,6 +504,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Real part of "casin": double: 1 @@ -410,6 +514,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Imaginary part of "casin": double: 2 @@ -418,6 +524,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: Real part of "casin_downward": double: 3 @@ -426,6 +534,8 @@ idouble: 3 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: Imaginary part of "casin_downward": double: 5 @@ -434,6 +544,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 6 +float128: 6 Function: Real part of "casin_towardzero": double: 3 @@ -442,6 +554,8 @@ idouble: 3 ifloat: 1 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: Imaginary part of "casin_towardzero": double: 5 @@ -450,6 +564,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: Real part of "casin_upward": double: 3 @@ -458,6 +574,8 @@ idouble: 3 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: Imaginary part of "casin_upward": double: 5 @@ -466,6 +584,8 @@ idouble: 5 ifloat: 5 ildouble: 13 ldouble: 13 +ifloat128: 7 +float128: 7 Function: Real part of "casinh": double: 2 @@ -474,6 +594,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: Imaginary part of "casinh": double: 1 @@ -482,6 +604,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Real part of "casinh_downward": double: 5 @@ -490,6 +614,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 6 +float128: 6 Function: Imaginary part of "casinh_downward": double: 3 @@ -498,6 +624,8 @@ idouble: 3 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: Real part of "casinh_towardzero": double: 5 @@ -506,6 +634,8 @@ idouble: 5 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: Imaginary part of "casinh_towardzero": double: 3 @@ -514,6 +644,8 @@ idouble: 3 ifloat: 1 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: Real part of "casinh_upward": double: 5 @@ -522,6 +654,8 @@ idouble: 5 ifloat: 5 ildouble: 13 ldouble: 13 +ifloat128: 7 +float128: 7 Function: Imaginary part of "casinh_upward": double: 3 @@ -530,6 +664,8 @@ idouble: 3 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: Real part of "catan": double: 1 @@ -538,6 +674,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: Imaginary part of "catan": double: 1 @@ -546,6 +684,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "catan_downward": double: 1 @@ -554,6 +694,8 @@ idouble: 1 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "catan_downward": double: 2 @@ -562,6 +704,8 @@ idouble: 2 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 2 +float128: 2 Function: Real part of "catan_towardzero": double: 1 @@ -570,6 +714,8 @@ idouble: 1 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 2 +float128: 2 Function: Imaginary part of "catan_towardzero": double: 2 @@ -578,6 +724,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Real part of "catan_upward": double: 1 @@ -586,6 +734,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "catan_upward": double: 3 @@ -594,6 +744,8 @@ idouble: 3 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 3 +float128: 3 Function: Real part of "catanh": double: 1 @@ -602,6 +754,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Imaginary part of "catanh": double: 1 @@ -610,6 +764,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: Real part of "catanh_downward": double: 2 @@ -618,6 +774,8 @@ idouble: 2 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: Imaginary part of "catanh_downward": double: 1 @@ -626,6 +784,8 @@ idouble: 1 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "catanh_towardzero": double: 2 @@ -634,6 +794,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Imaginary part of "catanh_towardzero": double: 1 @@ -642,6 +804,8 @@ idouble: 1 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 2 +float128: 2 Function: Real part of "catanh_upward": double: 4 @@ -650,6 +814,8 @@ idouble: 4 ifloat: 4 ildouble: 8 ldouble: 8 +ifloat128: 4 +float128: 4 Function: Imaginary part of "catanh_upward": double: 1 @@ -658,6 +824,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: "cbrt": double: 3 @@ -666,6 +834,8 @@ idouble: 3 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "cbrt_downward": double: 4 @@ -674,6 +844,8 @@ idouble: 4 ifloat: 1 ildouble: 5 ldouble: 5 +ifloat128: 1 +float128: 1 Function: "cbrt_towardzero": double: 3 @@ -682,6 +854,8 @@ idouble: 3 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "cbrt_upward": double: 5 @@ -690,6 +864,8 @@ idouble: 5 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "ccos": double: 1 @@ -698,6 +874,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: Imaginary part of "ccos": double: 1 @@ -706,6 +884,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "ccos_downward": double: 1 @@ -714,6 +894,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "ccos_downward": double: 2 @@ -722,6 +904,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "ccos_towardzero": double: 1 @@ -730,6 +914,8 @@ idouble: 1 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "ccos_towardzero": double: 2 @@ -738,6 +924,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "ccos_upward": double: 1 @@ -746,6 +934,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "ccos_upward": double: 2 @@ -754,6 +944,8 @@ idouble: 2 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: Real part of "ccosh": double: 1 @@ -762,6 +954,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: Imaginary part of "ccosh": double: 1 @@ -770,6 +964,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "ccosh_downward": double: 1 @@ -778,6 +974,8 @@ idouble: 1 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "ccosh_downward": double: 2 @@ -786,6 +984,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "ccosh_towardzero": double: 1 @@ -794,6 +994,8 @@ idouble: 1 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "ccosh_towardzero": double: 2 @@ -802,6 +1004,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "ccosh_upward": double: 1 @@ -810,6 +1014,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "ccosh_upward": double: 2 @@ -818,6 +1024,8 @@ idouble: 2 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: Real part of "cexp": double: 2 @@ -826,6 +1034,8 @@ idouble: 2 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Imaginary part of "cexp": double: 1 @@ -834,6 +1044,8 @@ idouble: 1 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "cexp_downward": double: 1 @@ -842,6 +1054,8 @@ idouble: 1 ifloat: 2 ildouble: 11 ldouble: 11 +ifloat128: 2 +float128: 2 Function: Imaginary part of "cexp_downward": double: 1 @@ -850,6 +1064,8 @@ idouble: 1 ifloat: 3 ildouble: 11 ldouble: 11 +ifloat128: 2 +float128: 2 Function: Real part of "cexp_towardzero": double: 1 @@ -858,6 +1074,8 @@ idouble: 1 ifloat: 2 ildouble: 11 ldouble: 11 +ifloat128: 2 +float128: 2 Function: Imaginary part of "cexp_towardzero": double: 1 @@ -866,6 +1084,8 @@ idouble: 1 ifloat: 3 ildouble: 11 ldouble: 11 +ifloat128: 2 +float128: 2 Function: Real part of "cexp_upward": double: 1 @@ -874,6 +1094,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "cexp_upward": double: 1 @@ -882,6 +1104,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Real part of "clog": double: 3 @@ -890,6 +1114,8 @@ idouble: 3 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: Imaginary part of "clog": double: 1 @@ -898,6 +1124,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "clog10": double: 3 @@ -906,6 +1134,8 @@ idouble: 3 ifloat: 4 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Imaginary part of "clog10": double: 2 @@ -914,6 +1144,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: Real part of "clog10_downward": double: 6 @@ -922,6 +1154,8 @@ idouble: 6 ifloat: 6 ildouble: 10 ldouble: 10 +ifloat128: 3 +float128: 3 Function: Imaginary part of "clog10_downward": double: 2 @@ -930,6 +1164,8 @@ idouble: 2 ifloat: 4 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: Real part of "clog10_towardzero": double: 5 @@ -938,6 +1174,8 @@ idouble: 5 ifloat: 5 ildouble: 9 ldouble: 9 +ifloat128: 4 +float128: 4 Function: Imaginary part of "clog10_towardzero": double: 2 @@ -946,6 +1184,8 @@ idouble: 2 ifloat: 4 ildouble: 8 ldouble: 8 +ifloat128: 3 +float128: 3 Function: Real part of "clog10_upward": double: 8 @@ -954,6 +1194,8 @@ idouble: 8 ifloat: 5 ildouble: 10 ldouble: 10 +ifloat128: 4 +float128: 4 Function: Imaginary part of "clog10_upward": double: 2 @@ -962,6 +1204,8 @@ idouble: 2 ifloat: 4 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: Real part of "clog_downward": double: 7 @@ -970,6 +1214,8 @@ idouble: 7 ifloat: 5 ildouble: 11 ldouble: 11 +ifloat128: 3 +float128: 3 Function: Imaginary part of "clog_downward": double: 1 @@ -978,6 +1224,8 @@ idouble: 1 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: Real part of "clog_towardzero": double: 7 @@ -986,6 +1234,8 @@ idouble: 7 ifloat: 5 ildouble: 10 ldouble: 10 +ifloat128: 3 +float128: 3 Function: Imaginary part of "clog_towardzero": double: 1 @@ -994,6 +1244,8 @@ idouble: 1 ifloat: 3 ildouble: 7 ldouble: 7 +ifloat128: 2 +float128: 2 Function: Real part of "clog_upward": double: 8 @@ -1002,6 +1254,8 @@ idouble: 8 ifloat: 5 ildouble: 10 ldouble: 10 +ifloat128: 4 +float128: 4 Function: Imaginary part of "clog_upward": double: 1 @@ -1010,12 +1264,16 @@ idouble: 1 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: "cos": float: 3 ifloat: 3 ildouble: 4 ldouble: 4 +ifloat128: 1 +float128: 1 Function: "cos_downward": double: 1 @@ -1024,6 +1282,8 @@ idouble: 1 ifloat: 4 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: "cos_towardzero": double: 1 @@ -1032,6 +1292,8 @@ idouble: 1 ifloat: 3 ildouble: 4 ldouble: 4 +ifloat128: 1 +float128: 1 Function: "cos_upward": double: 1 @@ -1040,6 +1302,8 @@ idouble: 1 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 2 +float128: 2 Function: "cosh": double: 1 @@ -1048,6 +1312,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "cosh_downward": double: 1 @@ -1056,6 +1322,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 2 Function: "cosh_towardzero": double: 1 @@ -1064,6 +1332,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 2 Function: "cosh_upward": double: 1 @@ -1072,6 +1342,8 @@ idouble: 1 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 3 Function: Real part of "cpow": double: 2 @@ -1080,12 +1352,16 @@ idouble: 2 ifloat: 5 ildouble: 4 ldouble: 4 +ifloat128: 4 +float128: 4 Function: Imaginary part of "cpow": float: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 9 +float128: 9 Function: Real part of "cpow_downward": double: 4 @@ -1094,6 +1370,8 @@ idouble: 4 ifloat: 8 ildouble: 7 ldouble: 7 +ifloat128: 6 +float128: 6 Function: Imaginary part of "cpow_downward": double: 1 @@ -1102,6 +1380,8 @@ idouble: 1 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: Real part of "cpow_towardzero": double: 4 @@ -1110,6 +1390,8 @@ idouble: 4 ifloat: 8 ildouble: 8 ldouble: 8 +ifloat128: 6 +float128: 6 Function: Imaginary part of "cpow_towardzero": double: 1 @@ -1118,6 +1400,8 @@ idouble: 1 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: Real part of "cpow_upward": double: 4 @@ -1126,6 +1410,8 @@ idouble: 4 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "cpow_upward": double: 1 @@ -1134,6 +1420,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Real part of "csin": double: 1 @@ -1142,10 +1430,14 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Imaginary part of "csin": ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: Real part of "csin_downward": double: 2 @@ -1154,6 +1446,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csin_downward": double: 1 @@ -1162,6 +1456,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "csin_towardzero": double: 2 @@ -1170,6 +1466,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csin_towardzero": double: 1 @@ -1178,6 +1476,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "csin_upward": double: 2 @@ -1186,6 +1486,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csin_upward": double: 1 @@ -1194,12 +1496,16 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Real part of "csinh": float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: Imaginary part of "csinh": double: 1 @@ -1208,6 +1514,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: Real part of "csinh_downward": double: 2 @@ -1216,6 +1524,8 @@ idouble: 2 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csinh_downward": double: 2 @@ -1224,6 +1534,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "csinh_towardzero": double: 2 @@ -1232,6 +1544,8 @@ idouble: 2 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csinh_towardzero": double: 2 @@ -1240,6 +1554,8 @@ idouble: 2 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 2 +float128: 2 Function: Real part of "csinh_upward": double: 1 @@ -1248,6 +1564,8 @@ idouble: 1 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "csinh_upward": double: 2 @@ -1256,6 +1574,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: Real part of "csqrt": double: 2 @@ -1264,6 +1584,8 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Imaginary part of "csqrt": double: 2 @@ -1272,6 +1594,8 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: Real part of "csqrt_downward": double: 5 @@ -1280,6 +1604,8 @@ idouble: 5 ifloat: 4 ildouble: 4 ldouble: 4 +ifloat128: 4 +float128: 4 Function: Imaginary part of "csqrt_downward": double: 4 @@ -1288,6 +1614,8 @@ idouble: 4 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: Real part of "csqrt_towardzero": double: 4 @@ -1296,6 +1624,8 @@ idouble: 4 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: Imaginary part of "csqrt_towardzero": double: 4 @@ -1304,6 +1634,8 @@ idouble: 4 ifloat: 3 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: Real part of "csqrt_upward": double: 5 @@ -1312,6 +1644,8 @@ idouble: 5 ifloat: 4 ildouble: 12 ldouble: 12 +ifloat128: 4 +float128: 4 Function: Imaginary part of "csqrt_upward": double: 3 @@ -1320,6 +1654,8 @@ idouble: 3 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 3 +float128: 3 Function: Real part of "ctan": double: 1 @@ -1328,6 +1664,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "ctan": double: 2 @@ -1336,6 +1674,8 @@ idouble: 2 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 3 +float128: 3 Function: Real part of "ctan_downward": double: 6 @@ -1344,6 +1684,8 @@ idouble: 6 ifloat: 5 ildouble: 6 ldouble: 6 +ifloat128: 4 +float128: 4 Function: Imaginary part of "ctan_downward": double: 2 @@ -1352,6 +1694,8 @@ idouble: 2 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 5 +float128: 5 Function: Real part of "ctan_towardzero": double: 5 @@ -1360,6 +1704,8 @@ idouble: 5 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 4 +float128: 4 Function: Imaginary part of "ctan_towardzero": double: 2 @@ -1368,6 +1714,8 @@ idouble: 2 ifloat: 2 ildouble: 13 ldouble: 13 +ifloat128: 5 +float128: 5 Function: Real part of "ctan_upward": double: 2 @@ -1376,6 +1724,8 @@ idouble: 2 ifloat: 3 ildouble: 7 ldouble: 7 +ifloat128: 5 +float128: 5 Function: Imaginary part of "ctan_upward": double: 2 @@ -1384,6 +1734,8 @@ idouble: 2 ifloat: 3 ildouble: 10 ldouble: 10 +ifloat128: 5 +float128: 5 Function: Real part of "ctanh": double: 2 @@ -1392,6 +1744,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Imaginary part of "ctanh": double: 2 @@ -1400,6 +1754,8 @@ idouble: 2 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: Real part of "ctanh_downward": double: 4 @@ -1408,6 +1764,8 @@ idouble: 4 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 5 +float128: 5 Function: Imaginary part of "ctanh_downward": double: 6 @@ -1416,6 +1774,8 @@ idouble: 6 ifloat: 5 ildouble: 6 ldouble: 6 +ifloat128: 4 +float128: 4 Function: Real part of "ctanh_towardzero": double: 2 @@ -1424,6 +1784,8 @@ idouble: 2 ifloat: 2 ildouble: 13 ldouble: 13 +ifloat128: 5 +float128: 5 Function: Imaginary part of "ctanh_towardzero": double: 5 @@ -1432,6 +1794,8 @@ idouble: 5 ifloat: 2 ildouble: 10 ldouble: 10 +ifloat128: 3 +float128: 3 Function: Real part of "ctanh_upward": double: 2 @@ -1440,6 +1804,8 @@ idouble: 2 ifloat: 3 ildouble: 10 ldouble: 10 +ifloat128: 5 +float128: 5 Function: Imaginary part of "ctanh_upward": double: 2 @@ -1448,6 +1814,8 @@ idouble: 2 ifloat: 3 ildouble: 10 ldouble: 10 +ifloat128: 5 +float128: 5 Function: "erf": double: 1 @@ -1456,6 +1824,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "erf_downward": double: 1 @@ -1464,6 +1834,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "erf_towardzero": double: 1 @@ -1472,6 +1844,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "erf_upward": double: 1 @@ -1480,6 +1854,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "erfc": double: 2 @@ -1488,6 +1864,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "erfc_downward": double: 3 @@ -1496,6 +1874,8 @@ idouble: 3 ifloat: 4 ildouble: 10 ldouble: 10 +ifloat128: 5 +float128: 5 Function: "erfc_towardzero": double: 3 @@ -1504,6 +1884,8 @@ idouble: 3 ifloat: 3 ildouble: 9 ldouble: 9 +ifloat128: 4 +float128: 4 Function: "erfc_upward": double: 3 @@ -1512,6 +1894,8 @@ idouble: 3 ifloat: 4 ildouble: 7 ldouble: 7 +ifloat128: 5 +float128: 5 Function: "exp": double: 1 @@ -1520,12 +1904,16 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "exp10": double: 2 idouble: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "exp10_downward": double: 2 @@ -1534,6 +1922,8 @@ idouble: 2 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 3 +float128: 3 Function: "exp10_towardzero": double: 2 @@ -1542,6 +1932,8 @@ idouble: 2 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 3 +float128: 3 Function: "exp10_upward": double: 2 @@ -1550,6 +1942,8 @@ idouble: 2 ifloat: 1 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: "exp2": double: 1 @@ -1558,6 +1952,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "exp2_downward": double: 1 @@ -1566,6 +1962,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "exp2_towardzero": double: 1 @@ -1574,6 +1972,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "exp2_upward": double: 1 @@ -1582,6 +1982,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "exp_downward": double: 1 @@ -1610,6 +2012,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "expm1_downward": double: 1 @@ -1618,6 +2022,8 @@ idouble: 1 ifloat: 1 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "expm1_towardzero": double: 1 @@ -1626,6 +2032,8 @@ idouble: 1 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 4 +float128: 4 Function: "expm1_upward": double: 1 @@ -1634,6 +2042,8 @@ idouble: 1 ifloat: 1 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "fma": ildouble: 1 @@ -1674,6 +2084,8 @@ idouble: 3 ifloat: 4 ildouble: 3 ldouble: 3 +ifloat128: 9 +float128: 9 Function: "gamma_downward": double: 4 @@ -1682,6 +2094,8 @@ idouble: 4 ifloat: 4 ildouble: 15 ldouble: 15 +ifloat128: 9 +float128: 9 Function: "gamma_towardzero": double: 4 @@ -1690,6 +2104,8 @@ idouble: 4 ifloat: 3 ildouble: 16 ldouble: 16 +ifloat128: 9 +float128: 9 Function: "gamma_upward": double: 4 @@ -1698,30 +2114,40 @@ idouble: 4 ifloat: 5 ildouble: 11 ldouble: 11 +ifloat128: 9 +float128: 9 Function: "hypot": double: 1 idouble: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "hypot_downward": double: 1 idouble: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "hypot_towardzero": double: 1 idouble: 1 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "hypot_upward": double: 1 idouble: 1 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "j0": double: 2 @@ -1730,6 +2156,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "j0_downward": double: 2 @@ -1738,6 +2166,8 @@ idouble: 2 ifloat: 3 ildouble: 11 ldouble: 11 +ifloat128: 4 +float128: 4 Function: "j0_towardzero": double: 2 @@ -1746,6 +2176,8 @@ idouble: 2 ifloat: 1 ildouble: 8 ldouble: 8 +ifloat128: 2 +float128: 2 Function: "j0_upward": double: 3 @@ -1754,6 +2186,8 @@ idouble: 3 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 5 +float128: 5 Function: "j1": double: 1 @@ -1762,6 +2196,8 @@ idouble: 1 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 4 +float128: 4 Function: "j1_downward": double: 3 @@ -1770,6 +2206,8 @@ idouble: 3 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 4 +float128: 4 Function: "j1_towardzero": double: 3 @@ -1778,6 +2216,8 @@ idouble: 3 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 4 +float128: 4 Function: "j1_upward": double: 3 @@ -1786,6 +2226,8 @@ idouble: 3 ifloat: 4 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "jn": double: 4 @@ -1794,6 +2236,8 @@ idouble: 4 ifloat: 4 ildouble: 4 ldouble: 4 +ifloat128: 7 +float128: 7 Function: "jn_downward": double: 4 @@ -1802,6 +2246,8 @@ idouble: 4 ifloat: 5 ildouble: 7 ldouble: 7 +ifloat128: 8 +float128: 8 Function: "jn_towardzero": double: 4 @@ -1810,6 +2256,8 @@ idouble: 4 ifloat: 5 ildouble: 7 ldouble: 7 +ifloat128: 8 +float128: 8 Function: "jn_upward": double: 5 @@ -1818,6 +2266,8 @@ idouble: 5 ifloat: 4 ildouble: 5 ldouble: 5 +ifloat128: 7 +float128: 7 Function: "lgamma": double: 3 @@ -1826,6 +2276,8 @@ idouble: 3 ifloat: 4 ildouble: 3 ldouble: 3 +ifloat128: 9 +float128: 9 Function: "lgamma_downward": double: 4 @@ -1834,6 +2286,8 @@ idouble: 4 ifloat: 4 ildouble: 15 ldouble: 15 +ifloat128: 9 +float128: 9 Function: "lgamma_towardzero": double: 4 @@ -1842,6 +2296,8 @@ idouble: 4 ifloat: 3 ildouble: 16 ldouble: 16 +ifloat128: 9 +float128: 9 Function: "lgamma_upward": double: 4 @@ -1850,12 +2306,16 @@ idouble: 4 ifloat: 5 ildouble: 11 ldouble: 11 +ifloat128: 9 +float128: 9 Function: "log": float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "log10": double: 2 @@ -1864,6 +2324,8 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "log10_downward": double: 2 @@ -1872,6 +2334,8 @@ idouble: 2 ifloat: 3 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "log10_towardzero": double: 2 @@ -1880,6 +2344,8 @@ idouble: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "log10_upward": double: 2 @@ -1888,6 +2354,8 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "log1p": double: 1 @@ -1896,6 +2364,8 @@ idouble: 1 ifloat: 1 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "log1p_downward": double: 1 @@ -1904,6 +2374,8 @@ idouble: 1 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 3 +float128: 3 Function: "log1p_towardzero": double: 2 @@ -1912,6 +2384,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 3 +float128: 3 Function: "log1p_upward": double: 2 @@ -1920,6 +2394,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "log2": double: 1 @@ -1928,6 +2404,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "log2_downward": double: 3 @@ -1936,6 +2414,8 @@ idouble: 3 ifloat: 3 ildouble: 2 ldouble: 2 +ifloat128: 3 +float128: 3 Function: "log2_towardzero": double: 2 @@ -1944,6 +2424,8 @@ idouble: 2 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 1 +float128: 1 Function: "log2_upward": double: 3 @@ -1952,18 +2434,24 @@ idouble: 3 ifloat: 3 ildouble: 4 ldouble: 4 +ifloat128: 1 +float128: 1 Function: "log_downward": float: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "log_towardzero": float: 2 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "log_upward": double: 1 @@ -1972,6 +2460,8 @@ idouble: 1 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "nextafter_downward": ildouble: 1 @@ -1986,12 +2476,16 @@ float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "pow10": double: 2 idouble: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "pow10_downward": double: 2 @@ -2000,6 +2494,8 @@ idouble: 2 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 3 +float128: 3 Function: "pow10_towardzero": double: 2 @@ -2008,6 +2504,8 @@ idouble: 2 ifloat: 1 ildouble: 9 ldouble: 9 +ifloat128: 3 +float128: 3 Function: "pow10_upward": double: 2 @@ -2016,6 +2514,8 @@ idouble: 2 ifloat: 1 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: "pow_downward": double: 1 @@ -2024,6 +2524,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "pow_towardzero": double: 1 @@ -2032,6 +2534,8 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "pow_upward": double: 1 @@ -2040,12 +2544,16 @@ idouble: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "sin": float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "sin_downward": double: 1 @@ -2054,6 +2562,8 @@ idouble: 1 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: "sin_towardzero": double: 1 @@ -2062,6 +2572,8 @@ idouble: 1 ifloat: 1 ildouble: 4 ldouble: 4 +ifloat128: 2 +float128: 2 Function: "sin_upward": double: 1 @@ -2070,12 +2582,16 @@ idouble: 1 ifloat: 2 ildouble: 5 ldouble: 5 +ifloat128: 3 +float128: 3 Function: "sincos": float: 1 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 1 +float128: 1 Function: "sincos_downward": double: 1 @@ -2084,6 +2600,8 @@ idouble: 1 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: "sincos_towardzero": double: 1 @@ -2092,6 +2610,8 @@ idouble: 1 ifloat: 1 ildouble: 7 ldouble: 7 +ifloat128: 2 +float128: 2 Function: "sincos_upward": double: 1 @@ -2100,6 +2620,8 @@ idouble: 1 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 3 +float128: 3 Function: "sinh": double: 2 @@ -2108,6 +2630,8 @@ idouble: 2 ifloat: 2 ildouble: 3 ldouble: 3 +ifloat128: 2 +float128: 2 Function: "sinh_downward": double: 3 @@ -2116,6 +2640,8 @@ idouble: 3 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "sinh_towardzero": double: 2 @@ -2124,6 +2650,8 @@ idouble: 2 ifloat: 2 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "sinh_upward": double: 3 @@ -2132,6 +2660,8 @@ idouble: 3 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 4 +float128: 4 Function: "sqrt": ildouble: 1 @@ -2154,6 +2684,8 @@ float: 3 ifloat: 3 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "tan_downward": double: 1 @@ -2162,6 +2694,8 @@ idouble: 1 ifloat: 3 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "tan_towardzero": double: 1 @@ -2170,6 +2704,8 @@ idouble: 1 ifloat: 3 ildouble: 2 ldouble: 2 +ifloat128: 1 +float128: 1 Function: "tan_upward": double: 1 @@ -2178,6 +2714,8 @@ idouble: 1 ifloat: 3 ildouble: 3 ldouble: 3 +ifloat128: 1 +float128: 1 Function: "tanh": double: 2 @@ -2186,6 +2724,8 @@ idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 +ifloat128: 2 +float128: 2 Function: "tanh_downward": double: 3 @@ -2194,6 +2734,8 @@ idouble: 3 ifloat: 3 ildouble: 4 ldouble: 4 +ifloat128: 4 +float128: 4 Function: "tanh_towardzero": double: 2 @@ -2202,6 +2744,8 @@ idouble: 2 ifloat: 2 ildouble: 4 ldouble: 4 +ifloat128: 3 +float128: 3 Function: "tanh_upward": double: 3 @@ -2210,6 +2754,8 @@ idouble: 3 ifloat: 3 ildouble: 6 ldouble: 6 +ifloat128: 3 +float128: 3 Function: "tgamma": double: 5 @@ -2218,6 +2764,8 @@ idouble: 5 ifloat: 4 ildouble: 5 ldouble: 5 +ifloat128: 4 +float128: 4 Function: "tgamma_downward": double: 5 @@ -2226,6 +2774,8 @@ idouble: 5 ifloat: 5 ildouble: 6 ldouble: 6 +ifloat128: 5 +float128: 5 Function: "tgamma_towardzero": double: 5 @@ -2234,6 +2784,8 @@ idouble: 5 ifloat: 4 ildouble: 5 ldouble: 5 +ifloat128: 5 +float128: 5 Function: "tgamma_upward": double: 4 @@ -2242,6 +2794,8 @@ idouble: 4 ifloat: 4 ildouble: 5 ldouble: 5 +ifloat128: 4 +float128: 4 Function: "y0": double: 2 @@ -2250,6 +2804,8 @@ idouble: 2 ifloat: 1 ildouble: 1 ldouble: 1 +ifloat128: 3 +float128: 3 Function: "y0_downward": double: 3 @@ -2258,6 +2814,8 @@ idouble: 3 ifloat: 2 ildouble: 10 ldouble: 10 +ifloat128: 4 +float128: 4 Function: "y0_towardzero": double: 3 @@ -2266,6 +2824,8 @@ idouble: 3 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 3 +float128: 3 Function: "y0_upward": double: 2 @@ -2274,6 +2834,8 @@ idouble: 2 ifloat: 3 ildouble: 9 ldouble: 9 +ifloat128: 3 +float128: 3 Function: "y1": double: 3 @@ -2282,6 +2844,8 @@ idouble: 3 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 2 +float128: 2 Function: "y1_downward": double: 3 @@ -2290,6 +2854,8 @@ idouble: 3 ifloat: 2 ildouble: 7 ldouble: 7 +ifloat128: 4 +float128: 4 Function: "y1_towardzero": double: 3 @@ -2298,6 +2864,8 @@ idouble: 3 ifloat: 2 ildouble: 9 ldouble: 9 +ifloat128: 2 +float128: 2 Function: "y1_upward": double: 5 @@ -2306,6 +2874,8 @@ idouble: 5 ifloat: 2 ildouble: 9 ldouble: 9 +ifloat128: 5 +float128: 5 Function: "yn": double: 3 @@ -2314,6 +2884,8 @@ idouble: 3 ifloat: 2 ildouble: 2 ldouble: 2 +ifloat128: 5 +float128: 5 Function: "yn_downward": double: 3 @@ -2322,6 +2894,8 @@ idouble: 3 ifloat: 2 ildouble: 10 ldouble: 10 +ifloat128: 5 +float128: 5 Function: "yn_towardzero": double: 3 @@ -2330,6 +2904,8 @@ idouble: 3 ifloat: 3 ildouble: 8 ldouble: 8 +ifloat128: 5 +float128: 5 Function: "yn_upward": double: 4 @@ -2338,5 +2914,7 @@ idouble: 4 ifloat: 3 ildouble: 9 ldouble: 9 +ifloat128: 5 +float128: 5 # end of automatic generation diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h index 3c71275392..35b0d8e9be 100644 --- a/sysdeps/powerpc/fpu/math_private.h +++ b/sysdeps/powerpc/fpu/math_private.h @@ -23,8 +23,19 @@ #include <ldsodefs.h> #include <dl-procinfo.h> #include <fenv_private.h> + #include_next <math_private.h> +#if defined _ARCH_PWR9 && __HAVE_DISTINCT_FLOAT128 +extern __always_inline _Float128 +__ieee754_sqrtf128 (_Float128 __x) +{ + _Float128 __z; + asm ("xssqrtqp %0,%1" : "=wq" (__z) : "wq" (__x)); + return __z; +} +#endif + extern double __slow_ieee754_sqrt (double); extern __always_inline double __ieee754_sqrt (double __x) diff --git a/sysdeps/powerpc/powerpc64le/Implies-before b/sysdeps/powerpc/powerpc64le/Implies-before new file mode 100644 index 0000000000..48065141a9 --- /dev/null +++ b/sysdeps/powerpc/powerpc64le/Implies-before @@ -0,0 +1 @@ +ieee754/float128 diff --git a/sysdeps/powerpc/powerpc64le/Makefile b/sysdeps/powerpc/powerpc64le/Makefile new file mode 100644 index 0000000000..0e3c449b2d --- /dev/null +++ b/sysdeps/powerpc/powerpc64le/Makefile @@ -0,0 +1,48 @@ +# When building float128 we need to ensure -mfloat128 is +# passed to all such object files. + +ifeq ($(subdir),math) +# sqrtf128 requires emulation on POWER8 and below. +CPPFLAGS += -I../soft-fp + +# float128 requires adding a handful of extra flags. +%f128.o %f128.os %f128_r.o %f128_r.os: CFLAGS += -mfloat128 +$(objpfx)test-float128%.o $(objpfx)test-float128%.os: CFLAGS += -mfloat128 +$(objpfx)test-ifloat128%.o $(objpfx)test-ifloat128%.os: CFLAGS += -mfloat128 +CFLAGS-libm-test-support-float128.c += -mfloat128 +endif + +# Append flags to string <-> _Float128 routines. +ifneq ($(filter $(subdir),wcsmbs stdlib),) +%f128.o %f128.os %f128_l.o %f128_l.os %f128_nan.o %f128_nan.os %float1282mpn.o %float1282mpn.os %mpn2float128.o %mpn2float128.os: CFLAGS += -mfloat128 +CFLAGS-bug-strtod.c += -mfloat128 +CFLAGS-bug-strtod2.c += -mfloat128 +CFLAGS-tst-strtod-round.c += -mfloat128 +CFLAGS-tst-wcstod-round.c += -mfloat128 +CFLAGS-tst-strtod6.c += -mfloat128 +CFLAGS-tst-strfrom.c += -mfloat128 +CFLAGS-tst-strfrom-locale.c += -mfloat128 +CFLAGS-strfrom-skeleton.c += -mfloat128 + +# The strfrom class of functions call __printf_fp in order to convert the +# floating-point value to characters. This requires the value of IO_MTSAFE_IO. +CFLAGS-strfromf128.c += $(libio-mtsafe) + +# When building glibc with support for _Float128, the powers of ten tables in +# fpioconst.c and in the string conversion functions must be extended. +sysdep-CFLAGS += $(sysdep-CFLAGS-$(<F)) +sysdep-CFLAGS-fpioconst.c += -mfloat128 +sysdep-CFLAGS-strtod_l.c += -mfloat128 +sysdep-CFLAGS-strtof_l.c += -mfloat128 +sysdep-CFLAGS-strtold_l.c += -mfloat128 +sysdep-CFLAGS-wcstod_l.c += -mfloat128 +sysdep-CFLAGS-wcstof_l.c += -mfloat128 +sysdep-CFLAGS-wcstold_l.c += -mfloat128 +endif + +# Append flags to printf routines. +ifeq ($(subdir),stdio-common) +CFLAGS-printf_fp.c = -mfloat128 +CFLAGS-printf_fphex.c = -mfloat128 +CFLAGS-printf_size.c = -mfloat128 +endif diff --git a/sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c b/sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c new file mode 100644 index 0000000000..1ed58e5732 --- /dev/null +++ b/sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c @@ -0,0 +1,57 @@ +/* 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/>. */ + +/* Unavoidable hacks since TFmode is assumed to be binary128. */ +#define TFtype KFtype +#define TF KF + +#include <soft-fp.h> +#include <quad.h> + +__float128 +__ieee754_sqrtf128 (__float128 a) +{ +#ifndef _ARCH_PWR9 + 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; +#else + __float128 z; + asm ("xssqrtqp %0,%1" : "=wq" (z) : "wq" (a)); + return z; +#endif +} +strong_alias (__ieee754_sqrtf128, __sqrtf128_finite) diff --git a/sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h b/sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h new file mode 100644 index 0000000000..b5448d891b --- /dev/null +++ b/sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h @@ -0,0 +1,158 @@ +/* Decide whether to use 64 or 32-bit types to do the emulation. If we are + doing IEEE-128 with VSX, use 64-bit emulation even if we are compiling for a + 32-bit target. */ + +#if defined(_ARCH_PPC64) || defined(__VSX__) || defined(__FLOAT128__) +#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 + +#ifdef _ARCH_PPC64 +typedef int TItype __attribute__ ((mode (TI))); +typedef unsigned int UTItype __attribute__ ((mode (TI))); + +#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype)) +#endif + +#else /* 32-bits */ +#define _FP_W_TYPE_SIZE 32 +#define _FP_W_TYPE unsigned int +#define _FP_WS_TYPE signed int +#define _FP_I_TYPE int +#endif /* 32-bits */ + +/* 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 + +#define _FP_MUL_MEAT_S(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) + +#if (_FP_W_TYPE_SIZE==64) +#define _FP_MUL_MEAT_D(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_Q(R,X,Y) \ + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) +#else +#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) +#endif + +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) + +#if (_FP_W_TYPE_SIZE==64) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) +#else +#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) +#endif + +#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) + +#if (_FP_W_TYPE_SIZE==64) +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 +#else +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 +#endif + +#define _FP_NANSIGN_S 0 +#define _FP_NANSIGN_D 0 +#define _FP_NANSIGN_Q 0 + +#define _FP_KEEPNANFRACP 1 +#define _FP_QNANNEGATEDP 0 + +/* Someone please check this. */ +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ + && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ + { \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc(R,Y); \ + } \ + else \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +#define _FP_TININESS_AFTER_ROUNDING 0 + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 + +#if defined __BIG_ENDIAN__ || defined _BIG_ENDIAN +# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN +# error "Both BIG_ENDIAN and LITTLE_ENDIAN defined!" +# endif +# define __BYTE_ORDER __BIG_ENDIAN +#else +# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN +# define __BYTE_ORDER __LITTLE_ENDIAN +# else +# error "Cannot determine current byte order" +# endif +#endif + +/* Only provide exception support if we have hardware floating point using + floating point registers and we can execute the mtfsf instruction. This + would only be true if we are using the emulation routines for IEEE 128-bit + floating point on pre-ISA 3.0 machines without the IEEE 128-bit floating + point support. */ + +#ifdef __FLOAT128__ +#define ISA_BIT(x) (1LL << (63 - x)) + +/* Use the same bits of the FPSCR. */ +# define FP_EX_INVALID ISA_BIT(34) +# define FP_EX_OVERFLOW ISA_BIT(35) +# define FP_EX_UNDERFLOW ISA_BIT(36) +# define FP_EX_DIVZERO ISA_BIT(37) +# define FP_EX_INEXACT ISA_BIT(38) +# define FP_EX_ALL (FP_EX_INVALID | FP_EX_OVERFLOW \ + | FP_EX_UNDERFLOW | FP_EX_DIVZERO \ + | FP_EX_INEXACT) + +void __sfp_handle_exceptions (int); + +# define FP_HANDLE_EXCEPTIONS \ + do { \ + if (__builtin_expect (_fex, 0)) \ + __sfp_handle_exceptions (_fex); \ + } while (0); + +/* The FP_EX_* bits track whether the exception has occurred. This macro + must set the FP_EX_* bits of those exceptions which are configured to + trap. The FPSCR bit which indicates this is 22 ISA bits above the + respective FP_EX_* bit. Note, the ISA labels bits from msb to lsb, + so 22 ISA bits above is 22 bits below when counted from the lsb. */ +# define FP_TRAPPING_EXCEPTIONS ((_fpscr.i << 22) & FP_EX_ALL) + +# define FP_RND_NEAREST 0x0 +# define FP_RND_ZERO 0x1 +# define FP_RND_PINF 0x2 +# define FP_RND_MINF 0x3 +# define FP_RND_MASK 0x3 + +# define _FP_DECL_EX \ + union { unsigned long long i; double d; } _fpscr __attribute__ ((unused)) = \ + { .i = FP_RND_NEAREST } + +#define FP_INIT_ROUNDMODE \ + do { \ + __asm__ __volatile__ ("mffs %0" \ + : "=f" (_fpscr.d)); \ + } while (0) + +# define FP_ROUNDMODE (_fpscr.i & FP_RND_MASK) +#endif /* !__FLOAT128__ */ diff --git a/sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c b/sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c new file mode 100644 index 0000000000..769d3f8922 --- /dev/null +++ b/sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c @@ -0,0 +1,36 @@ +/* POWER9 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/>. */ + +__float128 +__ieee754_sqrtf128 (__float128 a) +{ + __float128 z; + asm ("xssqrtqp %0,%1" : "=wq" (z) : "wq" (a)); + return z; +} +strong_alias (__ieee754_sqrtf128, __sqrtf128_finite) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist index c761221ffe..c36bed2e32 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist @@ -2179,9 +2179,16 @@ GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F GLIBC_2.25 GLIBC_2.25 A GLIBC_2.25 __explicit_bzero_chk F +GLIBC_2.25 __strtof128_internal F +GLIBC_2.25 __wcstof128_internal F GLIBC_2.25 explicit_bzero F GLIBC_2.25 getentropy F GLIBC_2.25 getrandom F GLIBC_2.25 strfromd F GLIBC_2.25 strfromf F +GLIBC_2.25 strfromf128 F GLIBC_2.25 strfroml F +GLIBC_2.25 strtof128 F +GLIBC_2.25 strtof128_l F +GLIBC_2.25 wcstof128 F +GLIBC_2.25 wcstof128_l F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist index 9658ded223..68fab09be0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist @@ -416,54 +416,191 @@ GLIBC_2.24 nextup F GLIBC_2.24 nextupf F GLIBC_2.24 nextupl F GLIBC_2.25 GLIBC_2.25 A +GLIBC_2.25 __acosf128_finite F +GLIBC_2.25 __acoshf128_finite F +GLIBC_2.25 __asinf128_finite F +GLIBC_2.25 __atan2f128_finite F +GLIBC_2.25 __atanhf128_finite F +GLIBC_2.25 __coshf128_finite F +GLIBC_2.25 __exp10f128_finite F +GLIBC_2.25 __exp2f128_finite F +GLIBC_2.25 __expf128_finite F GLIBC_2.25 __fe_dfl_mode D 0x8 +GLIBC_2.25 __finitef128 F +GLIBC_2.25 __fmodf128_finite F +GLIBC_2.25 __fpclassifyf128 F +GLIBC_2.25 __gammaf128_r_finite F +GLIBC_2.25 __hypotf128_finite F GLIBC_2.25 __iscanonicall F GLIBC_2.25 __iseqsig F GLIBC_2.25 __iseqsigf F +GLIBC_2.25 __iseqsigf128 F GLIBC_2.25 __iseqsigl F +GLIBC_2.25 __isinff128 F +GLIBC_2.25 __isnanf128 F +GLIBC_2.25 __issignalingf128 F +GLIBC_2.25 __j0f128_finite F +GLIBC_2.25 __j1f128_finite F +GLIBC_2.25 __jnf128_finite F +GLIBC_2.25 __lgammaf128_r_finite F +GLIBC_2.25 __log10f128_finite F +GLIBC_2.25 __log2f128_finite F +GLIBC_2.25 __logf128_finite F +GLIBC_2.25 __powf128_finite F +GLIBC_2.25 __remainderf128_finite F +GLIBC_2.25 __signbitf128 F +GLIBC_2.25 __sinhf128_finite F +GLIBC_2.25 __sqrtf128_finite F +GLIBC_2.25 __y0f128_finite F +GLIBC_2.25 __y1f128_finite F +GLIBC_2.25 __ynf128_finite F +GLIBC_2.25 acosf128 F +GLIBC_2.25 acoshf128 F +GLIBC_2.25 asinf128 F +GLIBC_2.25 asinhf128 F +GLIBC_2.25 atan2f128 F +GLIBC_2.25 atanf128 F +GLIBC_2.25 atanhf128 F +GLIBC_2.25 cabsf128 F +GLIBC_2.25 cacosf128 F +GLIBC_2.25 cacoshf128 F GLIBC_2.25 canonicalize F GLIBC_2.25 canonicalizef F +GLIBC_2.25 canonicalizef128 F GLIBC_2.25 canonicalizel F +GLIBC_2.25 cargf128 F +GLIBC_2.25 casinf128 F +GLIBC_2.25 casinhf128 F +GLIBC_2.25 catanf128 F +GLIBC_2.25 catanhf128 F +GLIBC_2.25 cbrtf128 F +GLIBC_2.25 ccosf128 F +GLIBC_2.25 ccoshf128 F +GLIBC_2.25 ceilf128 F +GLIBC_2.25 cexpf128 F +GLIBC_2.25 cimagf128 F +GLIBC_2.25 clog10f128 F +GLIBC_2.25 clogf128 F +GLIBC_2.25 conjf128 F +GLIBC_2.25 copysignf128 F +GLIBC_2.25 cosf128 F +GLIBC_2.25 coshf128 F +GLIBC_2.25 cpowf128 F +GLIBC_2.25 cprojf128 F +GLIBC_2.25 crealf128 F +GLIBC_2.25 csinf128 F +GLIBC_2.25 csinhf128 F +GLIBC_2.25 csqrtf128 F +GLIBC_2.25 ctanf128 F +GLIBC_2.25 ctanhf128 F +GLIBC_2.25 erfcf128 F +GLIBC_2.25 erff128 F +GLIBC_2.25 exp10f128 F +GLIBC_2.25 exp2f128 F +GLIBC_2.25 expf128 F +GLIBC_2.25 expm1f128 F +GLIBC_2.25 fabsf128 F +GLIBC_2.25 fdimf128 F GLIBC_2.25 fegetmode F GLIBC_2.25 fesetexcept F GLIBC_2.25 fesetmode F GLIBC_2.25 fetestexceptflag F +GLIBC_2.25 floorf128 F +GLIBC_2.25 fmaf128 F +GLIBC_2.25 fmaxf128 F GLIBC_2.25 fmaxmag F GLIBC_2.25 fmaxmagf F +GLIBC_2.25 fmaxmagf128 F GLIBC_2.25 fmaxmagl F +GLIBC_2.25 fminf128 F GLIBC_2.25 fminmag F GLIBC_2.25 fminmagf F +GLIBC_2.25 fminmagf128 F GLIBC_2.25 fminmagl F +GLIBC_2.25 fmodf128 F +GLIBC_2.25 frexpf128 F GLIBC_2.25 fromfp F GLIBC_2.25 fromfpf F +GLIBC_2.25 fromfpf128 F GLIBC_2.25 fromfpl F GLIBC_2.25 fromfpx F GLIBC_2.25 fromfpxf F +GLIBC_2.25 fromfpxf128 F GLIBC_2.25 fromfpxl F GLIBC_2.25 getpayload F GLIBC_2.25 getpayloadf F +GLIBC_2.25 getpayloadf128 F GLIBC_2.25 getpayloadl F +GLIBC_2.25 hypotf128 F +GLIBC_2.25 ilogbf128 F +GLIBC_2.25 j0f128 F +GLIBC_2.25 j1f128 F +GLIBC_2.25 jnf128 F +GLIBC_2.25 ldexpf128 F +GLIBC_2.25 lgammaf128 F +GLIBC_2.25 lgammaf128_r F GLIBC_2.25 llogb F GLIBC_2.25 llogbf F +GLIBC_2.25 llogbf128 F GLIBC_2.25 llogbl F +GLIBC_2.25 llrintf128 F +GLIBC_2.25 llroundf128 F +GLIBC_2.25 log10f128 F +GLIBC_2.25 log1pf128 F +GLIBC_2.25 log2f128 F +GLIBC_2.25 logbf128 F +GLIBC_2.25 logf128 F +GLIBC_2.25 lrintf128 F +GLIBC_2.25 lroundf128 F +GLIBC_2.25 modff128 F +GLIBC_2.25 nanf128 F +GLIBC_2.25 nearbyintf128 F +GLIBC_2.25 nextafterf128 F +GLIBC_2.25 nextdownf128 F +GLIBC_2.25 nextupf128 F +GLIBC_2.25 powf128 F +GLIBC_2.25 remainderf128 F +GLIBC_2.25 remquof128 F +GLIBC_2.25 rintf128 F GLIBC_2.25 roundeven F GLIBC_2.25 roundevenf F +GLIBC_2.25 roundevenf128 F GLIBC_2.25 roundevenl F +GLIBC_2.25 roundf128 F +GLIBC_2.25 scalblnf128 F +GLIBC_2.25 scalbnf128 F GLIBC_2.25 setpayload F GLIBC_2.25 setpayloadf F +GLIBC_2.25 setpayloadf128 F GLIBC_2.25 setpayloadl F GLIBC_2.25 setpayloadsig F GLIBC_2.25 setpayloadsigf F +GLIBC_2.25 setpayloadsigf128 F GLIBC_2.25 setpayloadsigl F +GLIBC_2.25 sincosf128 F +GLIBC_2.25 sinf128 F +GLIBC_2.25 sinhf128 F +GLIBC_2.25 sqrtf128 F +GLIBC_2.25 tanf128 F +GLIBC_2.25 tanhf128 F +GLIBC_2.25 tgammaf128 F GLIBC_2.25 totalorder F GLIBC_2.25 totalorderf F +GLIBC_2.25 totalorderf128 F GLIBC_2.25 totalorderl F GLIBC_2.25 totalordermag F GLIBC_2.25 totalordermagf F +GLIBC_2.25 totalordermagf128 F GLIBC_2.25 totalordermagl F +GLIBC_2.25 truncf128 F GLIBC_2.25 ufromfp F GLIBC_2.25 ufromfpf F +GLIBC_2.25 ufromfpf128 F GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F +GLIBC_2.25 ufromfpxf128 F GLIBC_2.25 ufromfpxl F +GLIBC_2.25 y0f128 F +GLIBC_2.25 y1f128 F +GLIBC_2.25 ynf128 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h new file mode 100644 index 0000000000..c47621c9c9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h @@ -0,0 +1,2 @@ +/* ABI version for _Float128 ABI introduction. */ +#define FLOAT128_VERSION GLIBC_2.25 |