about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/math-narrow-alias.h135
-rw-r--r--sysdeps/generic/math-type-macros-double.h5
-rw-r--r--sysdeps/generic/math-type-macros-float.h4
-rw-r--r--sysdeps/generic/math-type-macros-float128.h5
-rw-r--r--sysdeps/generic/math-type-macros-ldouble.h5
-rw-r--r--sysdeps/generic/math-type-macros.h7
-rw-r--r--sysdeps/i386/fpu/w_sqrt.c2
-rw-r--r--sysdeps/i386/fpu/w_sqrt_compat.c2
-rw-r--r--sysdeps/ia64/fpu/e_sqrt.S1
-rw-r--r--sysdeps/ia64/fpu/libm-symbols.h1
-rw-r--r--sysdeps/ieee754/dbl-64/s_f32xsqrtf64.c1
-rw-r--r--sysdeps/ieee754/dbl-64/s_fsqrt.c34
-rw-r--r--sysdeps/ieee754/float128/float128_private.h5
-rw-r--r--sysdeps/ieee754/float128/s_f32sqrtf128.c6
-rw-r--r--sysdeps/ieee754/float128/s_f64sqrtf128.c10
-rw-r--r--sysdeps/ieee754/float128/s_f64xsqrtf128.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_dsqrtl.c37
-rw-r--r--sysdeps/ieee754/ldbl-128/s_f64xsqrtf128.c38
-rw-r--r--sysdeps/ieee754/ldbl-128/s_fsqrtl.c33
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/Versions4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_dsqrtl.c28
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_fsqrtl.c28
-rw-r--r--sysdeps/ieee754/ldbl-96/s_dsqrtl.c33
-rw-r--r--sysdeps/ieee754/ldbl-96/s_fsqrtl.c31
-rw-r--r--sysdeps/ieee754/ldbl-opt/Makefile4
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-dsqrt.c28
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-fsqrt.c28
-rw-r--r--sysdeps/ieee754/soft-fp/s_dsqrtl.c67
-rw-r--r--sysdeps/ieee754/soft-fp/s_fsqrt.c54
-rw-r--r--sysdeps/ieee754/soft-fp/s_fsqrtl.c53
-rw-r--r--sysdeps/mach/hurd/i386/libm.abilist13
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps3
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc-macros.h2
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc.h6
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/arc/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/csky/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/i386/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist15
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libm.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist13
64 files changed, 994 insertions, 1 deletions
diff --git a/sysdeps/generic/math-narrow-alias.h b/sysdeps/generic/math-narrow-alias.h
new file mode 100644
index 0000000000..44c4ab6f06
--- /dev/null
+++ b/sysdeps/generic/math-narrow-alias.h
@@ -0,0 +1,135 @@
+/* Alias macros for functions returning a narrower type.
+   Copyright (C) 2018-2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef	_MATH_NARROW_ALIAS_H
+#define	_MATH_NARROW_ALIAS_H	1
+
+#include <bits/floatn.h>
+#include <bits/long-double.h>
+
+/* The following macros declare aliases for a narrowing function.  The
+   sole argument is the base name of a family of functions, such as
+   "add".  If any platform changes long double format after the
+   introduction of narrowing functions, in a way requiring symbol
+   versioning compatibility, additional variants of these macros will
+   be needed.  */
+
+#define libm_alias_float_double_main(func)	\
+  weak_alias (__f ## func, f ## func)		\
+  weak_alias (__f ## func, f32 ## func ## f64)	\
+  weak_alias (__f ## func, f32 ## func ## f32x)
+
+#ifdef NO_LONG_DOUBLE
+# define libm_alias_float_double(func)		\
+  libm_alias_float_double_main (func)		\
+  weak_alias (__f ## func, f ## func ## l)
+#else
+# define libm_alias_float_double(func)		\
+  libm_alias_float_double_main (func)
+#endif
+
+#define libm_alias_float32x_float64_main(func)			\
+  weak_alias (__f32x ## func ## f64, f32x ## func ## f64)
+
+#ifdef NO_LONG_DOUBLE
+# define libm_alias_float32x_float64(func)		\
+  libm_alias_float32x_float64_main (func)		\
+  weak_alias (__f32x ## func ## f64, d ## func ## l)
+#elif defined __LONG_DOUBLE_MATH_OPTIONAL
+# define libm_alias_float32x_float64(func)			\
+  libm_alias_float32x_float64_main (func)			\
+  weak_alias (__f32x ## func ## f64, __nldbl_d ## func ## l)
+#else
+# define libm_alias_float32x_float64(func)	\
+  libm_alias_float32x_float64_main (func)
+#endif
+
+#if __HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128
+# define libm_alias_float_ldouble_f128(func)		\
+  weak_alias (__f ## func ## l, f32 ## func ## f128)
+# define libm_alias_double_ldouble_f128(func)		\
+  weak_alias (__d ## func ## l, f32x ## func ## f128)	\
+  weak_alias (__d ## func ## l, f64 ## func ## f128)
+#else
+# define libm_alias_float_ldouble_f128(func)
+# define libm_alias_double_ldouble_f128(func)
+#endif
+
+#if __HAVE_FLOAT64X_LONG_DOUBLE
+# define libm_alias_float_ldouble_f64x(func)		\
+  weak_alias (__f ## func ## l, f32 ## func ## f64x)
+# define libm_alias_double_ldouble_f64x(func)		\
+  weak_alias (__d ## func ## l, f32x ## func ## f64x)	\
+  weak_alias (__d ## func ## l, f64 ## func ## f64x)
+#else
+# define libm_alias_float_ldouble_f64x(func)
+# define libm_alias_double_ldouble_f64x(func)
+#endif
+
+#define libm_alias_float_ldouble(func)		\
+  weak_alias (__f ## func ## l, f ## func ## l) \
+  libm_alias_float_ldouble_f128 (func)		\
+  libm_alias_float_ldouble_f64x (func)
+
+#define libm_alias_double_ldouble(func)		\
+  weak_alias (__d ## func ## l, d ## func ## l) \
+  libm_alias_double_ldouble_f128 (func)		\
+  libm_alias_double_ldouble_f64x (func)
+
+#define libm_alias_float64x_float128(func)			\
+  weak_alias (__f64x ## func ## f128, f64x ## func ## f128)
+
+#define libm_alias_float32_float128_main(func)			\
+  weak_alias (__f32 ## func ## f128, f32 ## func ## f128)
+
+#define libm_alias_float64_float128_main(func)			\
+  weak_alias (__f64 ## func ## f128, f64 ## func ## f128)	\
+  weak_alias (__f64 ## func ## f128, f32x ## func ## f128)
+
+#include <math-narrow-alias-float128.h>
+
+/* The following macros declare narrowing-named aliases for a
+   non-narrowing function.  */
+
+#define libm_alias_double_narrow_main(from, to)	\
+  weak_alias (from, f32x ## to ## f64)
+
+#ifdef NO_LONG_DOUBLE
+# define libm_alias_double_narrow(from, to)	\
+  libm_alias_double_narrow_main (from, to)	\
+  weak_alias (from, d ## to ## l)
+#else
+# define libm_alias_double_narrow(from, to)	\
+  libm_alias_double_narrow_main (from, to)
+#endif
+
+#if __HAVE_FLOAT64X_LONG_DOUBLE && __HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128
+# define libm_alias_ldouble_narrow(from, to)	\
+  weak_alias (from ## l, f64x ## to ## f128)
+#else
+# define libm_alias_ldouble_narrow(from, to)
+#endif
+
+#if __HAVE_DISTINCT_FLOAT128 && __HAVE_FLOAT64X && !__HAVE_FLOAT64X_LONG_DOUBLE
+# define libm_alias_float128_narrow(from, to)	\
+  weak_alias (from ## f128, f64x ## to ## f128)
+#else
+# define libm_alias_float128_narrow(from, to)
+#endif
+
+#endif /* math-narrow-alias.h.  */
diff --git a/sysdeps/generic/math-type-macros-double.h b/sysdeps/generic/math-type-macros-double.h
index 7abab18af3..8d2d8362cc 100644
--- a/sysdeps/generic/math-type-macros-double.h
+++ b/sysdeps/generic/math-type-macros-double.h
@@ -38,6 +38,11 @@
 # define declare_mgen_alias_r(from, to) libm_alias_double_r (from, to, _r)
 #endif
 
+#ifndef declare_mgen_alias_narrow
+# define declare_mgen_alias_narrow(from, to)	\
+  libm_alias_double_narrow (from, to)
+#endif
+
 /* Supply the generic macros.  */
 #include <math-type-macros.h>
 
diff --git a/sysdeps/generic/math-type-macros-float.h b/sysdeps/generic/math-type-macros-float.h
index e0a6a51492..fb84d62909 100644
--- a/sysdeps/generic/math-type-macros-float.h
+++ b/sysdeps/generic/math-type-macros-float.h
@@ -41,6 +41,10 @@
 # define declare_mgen_alias_r(from, to) libm_alias_float_r (from, to, _r)
 #endif
 
+#ifndef declare_mgen_alias_narrow
+# define declare_mgen_alias_narrow(from, to)
+#endif
+
 /* Supply the generic macros.  */
 #include <math-type-macros.h>
 
diff --git a/sysdeps/generic/math-type-macros-float128.h b/sysdeps/generic/math-type-macros-float128.h
index 5cdce15a4e..5c190606f5 100644
--- a/sysdeps/generic/math-type-macros-float128.h
+++ b/sysdeps/generic/math-type-macros-float128.h
@@ -40,6 +40,11 @@
 # define declare_mgen_alias_r(from, to) libm_alias_float128_r (from, to, _r)
 #endif
 
+#ifndef declare_mgen_alias_narrow
+# define declare_mgen_alias_narrow(from, to)	\
+  libm_alias_float128_narrow (from, to)
+#endif
+
 /* Supply the generic macros.  */
 #include <math-type-macros.h>
 
diff --git a/sysdeps/generic/math-type-macros-ldouble.h b/sysdeps/generic/math-type-macros-ldouble.h
index 2372195ef1..a2f282500e 100644
--- a/sysdeps/generic/math-type-macros-ldouble.h
+++ b/sysdeps/generic/math-type-macros-ldouble.h
@@ -38,6 +38,11 @@
 # define declare_mgen_alias_r(from, to) libm_alias_ldouble_r (from, to, _r)
 #endif
 
+#ifndef declare_mgen_alias_narrow
+# define declare_mgen_alias_narrow(from, to)	\
+  libm_alias_ldouble_narrow (from, to)
+#endif
+
 /* Supply the generic macros.  */
 #include <math-type-macros.h>
 
diff --git a/sysdeps/generic/math-type-macros.h b/sysdeps/generic/math-type-macros.h
index 007b14449d..188e39bc1f 100644
--- a/sysdeps/generic/math-type-macros.h
+++ b/sysdeps/generic/math-type-macros.h
@@ -42,6 +42,10 @@
       This exposes the appropriate symbol(s) for a
       function f_r of type FLOAT.
 
+  declare_mgen_alias_narrow(from,to)
+      This exposes the appropriate symbol(s) for narrowing aliases of a
+      function f of type FLOAT.
+
   SET_NAN_PAYLOAD(flt, mant)
       Set the NaN payload bits of the variable FLT of type FLOAT to
       the mantissa MANT.  */
@@ -70,6 +74,9 @@
 #ifndef declare_mgen_alias_r
 # error "declare_mgen_alias_r must be defined."
 #endif
+#ifndef declare_mgen_alias_narrow
+# error "declare_mgen_alias_narrow must be defined."
+#endif
 #ifndef SET_NAN_PAYLOAD
 # error "SET_NAN_PAYLOAD must be defined."
 #endif
diff --git a/sysdeps/i386/fpu/w_sqrt.c b/sysdeps/i386/fpu/w_sqrt.c
index 8bef04e68a..644c7c870c 100644
--- a/sysdeps/i386/fpu/w_sqrt.c
+++ b/sysdeps/i386/fpu/w_sqrt.c
@@ -2,7 +2,9 @@
    most internal uses in glibc, but not for sqrt itself.  */
 #define NO_MATH_REDIRECT
 #define __ieee754_sqrt __avoid_ieee754_sqrt
+#define f32xsqrtf64 __hide_f32xsqrtf64
 #include <math.h>
+#undef f32xsqrtf64
 #include <math_private.h>
 #undef __ieee754_sqrt
 extern double __ieee754_sqrt (double);
diff --git a/sysdeps/i386/fpu/w_sqrt_compat.c b/sysdeps/i386/fpu/w_sqrt_compat.c
index dd485f4b88..f5d3cf91d1 100644
--- a/sysdeps/i386/fpu/w_sqrt_compat.c
+++ b/sysdeps/i386/fpu/w_sqrt_compat.c
@@ -2,7 +2,9 @@
    most internal uses in glibc, but not for sqrt itself.  */
 #define NO_MATH_REDIRECT
 #define __ieee754_sqrt __avoid_ieee754_sqrt
+#define f32xsqrtf64 __hide_f32xsqrtf64
 #include <math.h>
+#undef f32xsqrtf64
 #include <math_private.h>
 #undef __ieee754_sqrt
 extern double __ieee754_sqrt (double);
diff --git a/sysdeps/ia64/fpu/e_sqrt.S b/sysdeps/ia64/fpu/e_sqrt.S
index 750183772b..3b9c17059e 100644
--- a/sysdeps/ia64/fpu/e_sqrt.S
+++ b/sysdeps/ia64/fpu/e_sqrt.S
@@ -252,6 +252,7 @@ GLOBAL_IEEE754_ENTRY(sqrt)
 // END DOUBLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM
 GLOBAL_IEEE754_END(sqrt)
 libm_alias_double_other (__sqrt, sqrt)
+libm_alias_double_narrow (__sqrt, sqrt)
 
 // Stack operations when calling error support.
 //       (1)               (2)                          (3) (call)              (4)
diff --git a/sysdeps/ia64/fpu/libm-symbols.h b/sysdeps/ia64/fpu/libm-symbols.h
index 4a551c9f17..56503cfe4e 100644
--- a/sysdeps/ia64/fpu/libm-symbols.h
+++ b/sysdeps/ia64/fpu/libm-symbols.h
@@ -5,6 +5,7 @@
 # include <libm-alias-float.h>
 # include <libm-alias-double.h>
 # include <libm-alias-ldouble.h>
+# include <math-narrow-alias.h>
 
 /* Support for compatible assembler handling.  */
 
diff --git a/sysdeps/ieee754/dbl-64/s_f32xsqrtf64.c b/sysdeps/ieee754/dbl-64/s_f32xsqrtf64.c
new file mode 100644
index 0000000000..9af76a25b0
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/s_f32xsqrtf64.c
@@ -0,0 +1 @@
+/* Defined as an alias of sqrt.  */
diff --git a/sysdeps/ieee754/dbl-64/s_fsqrt.c b/sysdeps/ieee754/dbl-64/s_fsqrt.c
new file mode 100644
index 0000000000..0354ba9fbf
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/s_fsqrt.c
@@ -0,0 +1,34 @@
+/* Square root of double value, narrowing the result to float.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32sqrtf64 __hide_f32sqrtf64
+#define f32sqrtf32x __hide_f32sqrtf32x
+#define fsqrtl __hide_fsqrtl
+#include <math.h>
+#undef f32sqrtf64
+#undef f32sqrtf32x
+#undef fsqrtl
+
+#include <math-narrow.h>
+
+float
+__fsqrt (double x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, float, union ieee754_double, , mantissa1);
+}
+libm_alias_float_double (sqrt)
diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
index b6b6d3d5fd..13d1d63baf 100644
--- a/sysdeps/ieee754/float128/float128_private.h
+++ b/sysdeps/ieee754/float128/float128_private.h
@@ -138,6 +138,9 @@
 #define libm_alias_float_ldouble(func) libm_alias_float32_float128 (func)
 #undef libm_alias_double_ldouble
 #define libm_alias_double_ldouble(func) libm_alias_float64_float128 (func)
+#undef libm_alias_ldouble_narrow
+#define libm_alias_ldouble_narrow(from, to)	\
+  libm_alias_float128_narrow (from, to)
 
 #include <math-use-builtins.h>
 #undef USE_NEARBYINTL_BUILTIN
@@ -284,6 +287,8 @@
 #define __ddivl __f64divf128
 #define __fmull __f32mulf128
 #define __dmull __f64mulf128
+#define __fsqrtl __f32sqrtf128
+#define __dsqrtl __f64sqrtf128
 #define __fsubl __f32subf128
 #define __dsubl __f64subf128
 
diff --git a/sysdeps/ieee754/float128/s_f32sqrtf128.c b/sysdeps/ieee754/float128/s_f32sqrtf128.c
new file mode 100644
index 0000000000..74e91abd4d
--- /dev/null
+++ b/sysdeps/ieee754/float128/s_f32sqrtf128.c
@@ -0,0 +1,6 @@
+#define f32sqrtf64x __hide_f32sqrtf64x
+#define f32sqrtf128 __hide_f32sqrtf128
+#include <float128_private.h>
+#undef f32sqrtf64x
+#undef f32sqrtf128
+#include "../ldbl-128/s_fsqrtl.c"
diff --git a/sysdeps/ieee754/float128/s_f64sqrtf128.c b/sysdeps/ieee754/float128/s_f64sqrtf128.c
new file mode 100644
index 0000000000..8373879d42
--- /dev/null
+++ b/sysdeps/ieee754/float128/s_f64sqrtf128.c
@@ -0,0 +1,10 @@
+#define f32xsqrtf64x __hide_f32xsqrtf64x
+#define f32xsqrtf128 __hide_f32xsqrtf128
+#define f64sqrtf64x __hide_f64sqrtf64x
+#define f64sqrtf128 __hide_f64sqrtf128
+#include <float128_private.h>
+#undef f32xsqrtf64x
+#undef f32xsqrtf128
+#undef f64sqrtf64x
+#undef f64sqrtf128
+#include "../ldbl-128/s_dsqrtl.c"
diff --git a/sysdeps/ieee754/float128/s_f64xsqrtf128.c b/sysdeps/ieee754/float128/s_f64xsqrtf128.c
new file mode 100644
index 0000000000..383f92a94e
--- /dev/null
+++ b/sysdeps/ieee754/float128/s_f64xsqrtf128.c
@@ -0,0 +1,2 @@
+#include <float128_private.h>
+#include "../ldbl-128/s_f64xsqrtf128.c"
diff --git a/sysdeps/ieee754/ldbl-128/s_dsqrtl.c b/sysdeps/ieee754/ldbl-128/s_dsqrtl.c
new file mode 100644
index 0000000000..b0d0162467
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/s_dsqrtl.c
@@ -0,0 +1,37 @@
+/* Square root of long double (ldbl-128) value, narrowing the result to double.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32xsqrtf64x __hide_f32xsqrtf64x
+#define f32xsqrtf128 __hide_f32xsqrtf128
+#define f64sqrtf64x __hide_f64sqrtf64x
+#define f64sqrtf128 __hide_f64sqrtf128
+#include <math.h>
+#undef f32xsqrtf64x
+#undef f32xsqrtf128
+#undef f64sqrtf64x
+#undef f64sqrtf128
+
+#include <math-narrow.h>
+
+double
+__dsqrtl (_Float128 x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, double, union ieee854_long_double, l,
+			    mantissa3);
+}
+libm_alias_double_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-128/s_f64xsqrtf128.c b/sysdeps/ieee754/ldbl-128/s_f64xsqrtf128.c
new file mode 100644
index 0000000000..2f1898d48c
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/s_f64xsqrtf128.c
@@ -0,0 +1,38 @@
+/* Square root of _Float128 value, converting the result to _Float64x.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <math-narrow.h>
+
+/* math_ldbl.h defines _Float128 to long double for this directory,
+   but when they are different, this function must be defined with
+   _Float128 arguments to avoid defining an alias with an incompatible
+   type.  */
+#undef _Float128
+
+#if __HAVE_FLOAT64X_LONG_DOUBLE && __HAVE_DISTINCT_FLOAT128
+_Float64x
+__f64xsqrtf128 (_Float128 x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, _Float64x, union ieee854_long_double, l,
+			    mantissa3);
+}
+libm_alias_float64x_float128 (sqrt)
+#else
+/* Defined as an alias of sqrtl.  */
+#endif
diff --git a/sysdeps/ieee754/ldbl-128/s_fsqrtl.c b/sysdeps/ieee754/ldbl-128/s_fsqrtl.c
new file mode 100644
index 0000000000..95afe7b7ad
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/s_fsqrtl.c
@@ -0,0 +1,33 @@
+/* Square root of long double (ldbl-128) value, narrowing the result to float.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32sqrtf64x __hide_f32sqrtf64x
+#define f32sqrtf128 __hide_f32sqrtf128
+#include <math.h>
+#undef f32sqrtf64x
+#undef f32sqrtf128
+
+#include <math-narrow.h>
+
+float
+__fsqrtl (_Float128 x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, float, union ieee854_long_double, l,
+			    mantissa3);
+}
+libm_alias_float_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Versions b/sysdeps/ieee754/ldbl-128ibm-compat/Versions
index 07e6a5b08a..885ffb977f 100644
--- a/sysdeps/ieee754/ldbl-128ibm-compat/Versions
+++ b/sysdeps/ieee754/ldbl-128ibm-compat/Versions
@@ -123,6 +123,10 @@ libm {
     __y1ieee128;
     __ynieee128;
   }
+  GLIBC_2.35 {
+    __f32sqrtieee128;
+    __f64sqrtieee128;
+  }
 }
 libc {
   LDBL_IBM128_VERSION {
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_dsqrtl.c b/sysdeps/ieee754/ldbl-128ibm/s_dsqrtl.c
new file mode 100644
index 0000000000..786ea7001b
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128ibm/s_dsqrtl.c
@@ -0,0 +1,28 @@
+/* Square root of long double (ldbl-128ibm) value, narrowing the result to
+   double.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <math-narrow.h>
+
+double
+__dsqrtl (long double x)
+{
+  NARROW_SQRT_TRIVIAL (x, double, l);
+}
+libm_alias_double_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fsqrtl.c b/sysdeps/ieee754/ldbl-128ibm/s_fsqrtl.c
new file mode 100644
index 0000000000..abfc0d69fe
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128ibm/s_fsqrtl.c
@@ -0,0 +1,28 @@
+/* Square root of long double (ldbl-128ibm) value, narrowing the result to
+   float.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <math-narrow.h>
+
+float
+__fsqrtl (long double x)
+{
+  NARROW_SQRT_TRIVIAL (x, float, l);
+}
+libm_alias_float_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-96/s_dsqrtl.c b/sysdeps/ieee754/ldbl-96/s_dsqrtl.c
new file mode 100644
index 0000000000..8bfc9624c2
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/s_dsqrtl.c
@@ -0,0 +1,33 @@
+/* Square root of long double (ldbl-96) value, narrowing the result to double.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32xsqrtf64x __hide_f32xsqrtf64x
+#define f64sqrtf64x __hide_f64sqrtf64x
+#include <math.h>
+#undef f32xsqrtf64x
+#undef f64sqrtf64x
+
+#include <math-narrow.h>
+
+double
+__dsqrtl (long double x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, double, union ieee854_long_double, l,
+			    mantissa1);
+}
+libm_alias_double_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-96/s_fsqrtl.c b/sysdeps/ieee754/ldbl-96/s_fsqrtl.c
new file mode 100644
index 0000000000..026add5d03
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/s_fsqrtl.c
@@ -0,0 +1,31 @@
+/* Square root of long double (ldbl-96) value, narrowing the result to float.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32sqrtf64x __hide_f32sqrtf64x
+#include <math.h>
+#undef f32sqrtf64x
+
+#include <math-narrow.h>
+
+float
+__fsqrtl (long double x)
+{
+  NARROW_SQRT_ROUND_TO_ODD (x, float, union ieee854_long_double, l,
+			    mantissa1);
+}
+libm_alias_float_ldouble (sqrt)
diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile
index 4e41a27e80..dff53cc0d8 100644
--- a/sysdeps/ieee754/ldbl-opt/Makefile
+++ b/sysdeps/ieee754/ldbl-opt/Makefile
@@ -45,7 +45,7 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \
 		 nextup nextdown totalorder totalordermag getpayload \
 		 canonicalize setpayload setpayloadsig llogb fmaxmag fminmag \
 		 roundeven fromfp ufromfp fromfpx ufromfpx fadd dadd \
-		 fdiv ddiv fmul dmul fsub dsub
+		 fdiv ddiv fmul dmul fsqrt dsqrt fsub dsub
 libnldbl-routines = $(libnldbl-calls:%=nldbl-%)
 libnldbl-inhibit-o = $(object-suffixes)
 libnldbl-static-only-routines = $(libnldbl-routines)
@@ -90,6 +90,7 @@ CFLAGS-nldbl-ctanh.c = -fno-builtin-ctanhl
 CFLAGS-nldbl-dadd.c = -fno-builtin-daddl
 CFLAGS-nldbl-ddiv.c = -fno-builtin-ddivl
 CFLAGS-nldbl-dmul.c = -fno-builtin-dmull
+CFLAGS-nldbl-dsqrt.c = -fno-builtin-dsqrtl
 CFLAGS-nldbl-dsub.c = -fno-builtin-dsubl
 CFLAGS-nldbl-erf.c = -fno-builtin-erfl
 CFLAGS-nldbl-erfc.c = -fno-builtin-erfcl
@@ -113,6 +114,7 @@ CFLAGS-nldbl-fmul.c = -fno-builtin-fmull
 CFLAGS-nldbl-frexp.c = -fno-builtin-frexpl
 CFLAGS-nldbl-fromfp.c = -fno-builtin-fromfpl
 CFLAGS-nldbl-fromfpx.c = -fno-builtin-fromfpxl
+CFLAGS-nldbl-fsqrt.c = -fno-builtin-fsqrtl
 CFLAGS-nldbl-fsub.c = -fno-builtin-fsubl
 CFLAGS-nldbl-gamma.c = -fno-builtin-gammal
 CFLAGS-nldbl-getpayload.c = -fno-builtin-getpayloadl
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-dsqrt.c b/sysdeps/ieee754/ldbl-opt/nldbl-dsqrt.c
new file mode 100644
index 0000000000..1d131f083d
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-dsqrt.c
@@ -0,0 +1,28 @@
+/* Compatibility routine for IEEE double as long double for dsqrt.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define dsqrtl __hide_dsqrtl
+#include "nldbl-compat.h"
+#undef dsqrtl
+
+double
+attribute_hidden
+dsqrtl (double x)
+{
+  return sqrt (x);
+}
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fsqrt.c b/sysdeps/ieee754/ldbl-opt/nldbl-fsqrt.c
new file mode 100644
index 0000000000..bcdf1aa556
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-fsqrt.c
@@ -0,0 +1,28 @@
+/* Compatibility routine for IEEE double as long double for fsqrt.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define fsqrtl __hide_fsqrtl
+#include "nldbl-compat.h"
+#undef fsqrtl
+
+float
+attribute_hidden
+fsqrtl (double x)
+{
+  return fsqrt (x);
+}
diff --git a/sysdeps/ieee754/soft-fp/s_dsqrtl.c b/sysdeps/ieee754/soft-fp/s_dsqrtl.c
new file mode 100644
index 0000000000..85ea8538a5
--- /dev/null
+++ b/sysdeps/ieee754/soft-fp/s_dsqrtl.c
@@ -0,0 +1,67 @@
+/* Square root of long double (ldbl-128) value, narrowing the result to
+   double, using soft-fp.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32xsqrtf64x __hide_f32xsqrtf64x
+#define f32xsqrtf128 __hide_f32xsqrtf128
+#define f64sqrtf64x __hide_f64sqrtf64x
+#define f64sqrtf128 __hide_f64sqrtf128
+#include <math.h>
+#undef f32xsqrtf64x
+#undef f32xsqrtf128
+#undef f64sqrtf64x
+#undef f64sqrtf128
+
+#include <math-narrow.h>
+#include <libc-diag.h>
+
+/* Some components of the result's significand and exponent are not
+   set in cases where they are not used in packing, but the compiler
+   does not see that they are set in all cases where they are used,
+   resulting in warnings that they may be used uninitialized.  */
+DIAG_PUSH_NEEDS_COMMENT;
+DIAG_IGNORE_NEEDS_COMMENT (7, "-Wmaybe-uninitialized");
+#include <soft-fp.h>
+#include <double.h>
+#include <quad.h>
+
+double
+__dsqrtl (_Float128 x)
+{
+  FP_DECL_EX;
+  FP_DECL_Q (X);
+  FP_DECL_Q (R);
+  FP_DECL_D (RN);
+  double ret;
+
+  FP_INIT_ROUNDMODE;
+  FP_UNPACK_Q (X, x);
+  FP_SQRT_Q (R, X);
+#if _FP_W_TYPE_SIZE < 64
+  FP_TRUNC_COOKED (D, Q, 2, 4, RN, R);
+#else
+  FP_TRUNC_COOKED (D, Q, 1, 2, RN, R);
+#endif
+  FP_PACK_D (ret, RN);
+  FP_HANDLE_EXCEPTIONS;
+  CHECK_NARROW_SQRT (ret, x);
+  return ret;
+}
+DIAG_POP_NEEDS_COMMENT;
+
+libm_alias_double_ldouble (sqrt)
diff --git a/sysdeps/ieee754/soft-fp/s_fsqrt.c b/sysdeps/ieee754/soft-fp/s_fsqrt.c
new file mode 100644
index 0000000000..b6f7c4e962
--- /dev/null
+++ b/sysdeps/ieee754/soft-fp/s_fsqrt.c
@@ -0,0 +1,54 @@
+/* Square root of double value, narrowing the result to float, using soft-fp.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32sqrtf64 __hide_f32sqrtf64
+#define f32sqrtf32x __hide_f32sqrtf32x
+#define fsqrtl __hide_fsqrtl
+#include <math.h>
+#undef f32sqrtf64
+#undef f32sqrtf32x
+#undef fsqrtl
+
+#include <math-narrow.h>
+#include <soft-fp.h>
+#include <single.h>
+#include <double.h>
+
+float
+__fsqrt (double x)
+{
+  FP_DECL_EX;
+  FP_DECL_D (X);
+  FP_DECL_D (R);
+  FP_DECL_S (RN);
+  float ret;
+
+  FP_INIT_ROUNDMODE;
+  FP_UNPACK_D (X, x);
+  FP_SQRT_D (R, X);
+#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
+  FP_TRUNC_COOKED (S, D, 1, 2, RN, R);
+#else
+  FP_TRUNC_COOKED (S, D, 1, 1, RN, R);
+#endif
+  FP_PACK_S (ret, RN);
+  FP_HANDLE_EXCEPTIONS;
+  CHECK_NARROW_SQRT (ret, x);
+  return ret;
+}
+libm_alias_float_double (sqrt)
diff --git a/sysdeps/ieee754/soft-fp/s_fsqrtl.c b/sysdeps/ieee754/soft-fp/s_fsqrtl.c
new file mode 100644
index 0000000000..618e734744
--- /dev/null
+++ b/sysdeps/ieee754/soft-fp/s_fsqrtl.c
@@ -0,0 +1,53 @@
+/* Square root of long double (ldbl-128) value, narrowing the result to
+   float, using soft-fp.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define f32sqrtf64x __hide_f32sqrtf64x
+#define f32sqrtf128 __hide_f32sqrtf128
+#include <math.h>
+#undef f32sqrtf64x
+#undef f32sqrtf128
+
+#include <math-narrow.h>
+#include <soft-fp.h>
+#include <single.h>
+#include <quad.h>
+
+float
+__fsqrtl (_Float128 x)
+{
+  FP_DECL_EX;
+  FP_DECL_Q (X);
+  FP_DECL_Q (R);
+  FP_DECL_S (RN);
+  float ret;
+
+  FP_INIT_ROUNDMODE;
+  FP_UNPACK_Q (X, x);
+  FP_SQRT_Q (R, X);
+#if _FP_W_TYPE_SIZE < 64
+  FP_TRUNC_COOKED (S, Q, 1, 4, RN, R);
+#else
+  FP_TRUNC_COOKED (S, Q, 1, 2, RN, R);
+#endif
+  FP_PACK_S (ret, RN);
+  FP_HANDLE_EXCEPTIONS;
+  CHECK_NARROW_SQRT (ret, x);
+  return ret;
+}
+libm_alias_float_ldouble (sqrt)
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index bb077b9030..1a107a67dc 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1089,3 +1089,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
index 513c4343ee..a605aebfc5 100644
--- a/sysdeps/powerpc/fpu/libm-test-ulps
+++ b/sysdeps/powerpc/fpu/libm-test-ulps
@@ -1623,6 +1623,9 @@ ldouble: 1
 Function: "sqrt_downward":
 ldouble: 1
 
+Function: "sqrt_ldouble":
+double: 1
+
 Function: "sqrt_towardzero":
 ldouble: 1
 
diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc-macros.h b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc-macros.h
index b03870070f..abab686aa9 100644
--- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc-macros.h
+++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc-macros.h
@@ -32,6 +32,7 @@
 #undef declare_mgen_finite_alias
 #undef declare_mgen_alias
 #undef declare_mgen_alias_r
+#undef declare_mgen_alias_narrow
 
 #define libm_alias_finite(from, to)
 #define libm_alias_float128_r(from, to, r)
@@ -40,6 +41,7 @@
 #define declare_mgen_finite_alias(from, to)
 #define declare_mgen_alias(from, to)
 #define declare_mgen_alias_r(from, to)
+#define declare_mgen_alias_narrow(from, to)
 
 /*  Likewise, disable hidden symbol support.  This is not needed
     for the implementation objects as the redirects already give
diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc.h b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc.h
index 001cbf70b9..392c66b63d 100644
--- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc.h
+++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128-ifunc.h
@@ -27,7 +27,9 @@
 
 /* Include the real math.h to avoid optimizations caused by include/math.h
    (e.x fabsf128 prototype is masked by an inline definition).*/
+#define f64xsqrtf128 __hide_f64xsqrtf128
 #include <math/math.h>
+#undef f64xsqrtf128
 #include <math_private.h>
 #include <complex.h>
 #include <first-versions.h>
@@ -36,6 +38,7 @@
 
 #include <libm-alias-float128.h>
 #include <libm-alias-finite.h>
+#include <math-narrow-alias.h>
 
 /* _F128_IFUNC2(func, from, r)
       Generate an ifunc symbol func ## r from the symbols
@@ -149,6 +152,9 @@
 /* scalbnf128 is an alias of ldexpf128.  */
 #define DECL_ALIAS_s_ldexp(f) MAKE_IFUNCP_R (f,) MAKE_IFUNCP_WRAP_R (wrap_, scalbn,)
 
+/* f64xsqrtf128 is an alias of sqrtf128.  */
+#define DECL_ALIAS_w_sqrt(f) MAKE_IFUNCP_R (f,) libm_alias_float128_narrow (__sqrt, sqrt)
+
 /* Declare an IFUNC for a symbol which only exists
    to provide long double == ieee128 ABI.  */
 #define DECL_LDOUBLE_ALIAS(func, RTYPE, ARGS) \
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 5362c24e4c..74f203575f 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1054,3 +1054,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 650d10ec8e..e3c619e77a 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1111,6 +1111,19 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/arc/libm.abilist b/sysdeps/unix/sysv/linux/arc/libm.abilist
index 4338563657..cedb2ffcc4 100644
--- a/sysdeps/unix/sysv/linux/arc/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libm.abilist
@@ -697,3 +697,9 @@ GLIBC_2.32 ynf32 F
 GLIBC_2.32 ynf32x F
 GLIBC_2.32 ynf64 F
 GLIBC_2.32 ynl F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index 6914b58d76..97f328dbbd 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -471,6 +471,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index 6914b58d76..97f328dbbd 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -471,6 +471,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/csky/libm.abilist b/sysdeps/unix/sysv/linux/csky/libm.abilist
index 88cdf00342..88761113e6 100644
--- a/sysdeps/unix/sysv/linux/csky/libm.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libm.abilist
@@ -763,3 +763,9 @@ GLIBC_2.31 totalordermagf32 F
 GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index 6ac2295b05..c32ff03983 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -782,4 +782,10 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 335b5e7aa2..2a2b290dc9 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1096,3 +1096,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index ec82b83e6f..47511731f8 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -1026,3 +1026,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 6914b58d76..97f328dbbd 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -471,6 +471,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
index c60fdc6298..6925a90820 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -822,3 +822,9 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index adea0fe4c0..65ade6d272 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -783,3 +783,9 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index adea0fe4c0..65ade6d272 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -783,3 +783,9 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 272969a26f..f53f8d86c5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -782,4 +782,10 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index dd0dc6689c..1abb41514c 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1054,3 +1054,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 4941deefa6..8cac2ab005 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -783,3 +783,9 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index fc2d142bd5..6c70bd6de3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -828,6 +828,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index e6feaf7ec7..dd7f2c30c9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -827,6 +827,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index 972c9bc597..aac3ff683f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -821,6 +821,12 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 8266bc32f4..7fe920d4d4 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1214,3 +1214,18 @@ GLIBC_2.32 __y0ieee128 F
 GLIBC_2.32 __y1ieee128 F
 GLIBC_2.32 __ynieee128 F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 __f32sqrtieee128 F
+GLIBC_2.35 __f64sqrtieee128 F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist
index c701b07a9a..a8638faa6f 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist
@@ -938,3 +938,16 @@ GLIBC_2.33 ynf32x F
 GLIBC_2.33 ynf64 F
 GLIBC_2.33 ynf64x F
 GLIBC_2.33 ynl F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist
index 90d9073188..dc682a7c52 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist
@@ -1035,3 +1035,16 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 321810d5a4..5d2abaa2db 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1055,6 +1055,19 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 451a860a83..f41c9f7a29 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1055,6 +1055,19 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index a5fb514eae..6a379eced4 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -782,4 +782,10 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index a5fb514eae..6a379eced4 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -782,4 +782,10 @@ GLIBC_2.31 totalordermagf32x F
 GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index d81e8a726b..e06572a3f9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1062,6 +1062,19 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index 3d12376d33..6d1e4ae31a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1054,3 +1054,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index b6a088ca64..7185df2a42 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1087,3 +1087,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index dfb5a7fa79..9b29d72d2e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1087,3 +1087,16 @@ GLIBC_2.31 totalordermagf64 F
 GLIBC_2.31 totalordermagf64x F
 GLIBC_2.31 totalordermagl F
 GLIBC_2.32 exp10f F
+GLIBC_2.35 dsqrtl F
+GLIBC_2.35 f32sqrtf128 F
+GLIBC_2.35 f32sqrtf32x F
+GLIBC_2.35 f32sqrtf64 F
+GLIBC_2.35 f32sqrtf64x F
+GLIBC_2.35 f32xsqrtf128 F
+GLIBC_2.35 f32xsqrtf64 F
+GLIBC_2.35 f32xsqrtf64x F
+GLIBC_2.35 f64sqrtf128 F
+GLIBC_2.35 f64sqrtf64x F
+GLIBC_2.35 f64xsqrtf128 F
+GLIBC_2.35 fsqrt F
+GLIBC_2.35 fsqrtl F