diff --git a/math/cabs_template.c b/math/cabs_template.c
index c9592c1..21b8506 100644
--- a/math/cabs_template.c
+++ b/math/cabs_template.c
@@ -27,7 +27,3 @@ M_DECL_FUNC (__cabs) (CFLOAT z)
 }
 
 declare_mgen_alias (__cabs, cabs)
-
-#if M_LIBM_NEED_COMPAT (cabs)
-declare_mgen_libm_compat (__cabs, cabs)
-#endif
diff --git a/math/carg_template.c b/math/carg_template.c
index 5d60663..9f7ad14 100644
--- a/math/carg_template.c
+++ b/math/carg_template.c
@@ -27,7 +27,3 @@ M_DECL_FUNC (__carg) (CFLOAT x)
 }
 
 declare_mgen_alias (__carg, carg)
-
-#if M_LIBM_NEED_COMPAT (carg)
-declare_mgen_libm_compat (__carg, carg)
-#endif
diff --git a/math/cimag_template.c b/math/cimag_template.c
index 6284b57..b24f001 100644
--- a/math/cimag_template.c
+++ b/math/cimag_template.c
@@ -26,7 +26,3 @@ M_DECL_FUNC (__cimag) (CFLOAT z)
 }
 
 declare_mgen_alias (__cimag, cimag)
-
-#if M_LIBM_NEED_COMPAT (cimag)
-declare_mgen_libm_compat (__cimag, cimag)
-#endif
diff --git a/math/conj_template.c b/math/conj_template.c
index b71f338..c21a1f1 100644
--- a/math/conj_template.c
+++ b/math/conj_template.c
@@ -26,7 +26,3 @@ M_DECL_FUNC (__conj) (CFLOAT z)
 }
 
 declare_mgen_alias (__conj, conj)
-
-#if M_LIBM_NEED_COMPAT (conj)
-declare_mgen_libm_compat (__conj, conj)
-#endif
diff --git a/math/creal_template.c b/math/creal_template.c
index c658966..8ccbe6f 100644
--- a/math/creal_template.c
+++ b/math/creal_template.c
@@ -26,7 +26,3 @@ M_DECL_FUNC (__creal) (CFLOAT z)
 }
 
 declare_mgen_alias (__creal, creal)
-
-#if M_LIBM_NEED_COMPAT (creal)
-declare_mgen_libm_compat (__creal, creal)
-#endif
diff --git a/math/s_cacos_template.c b/math/s_cacos_template.c
index 7629e55..29cac62 100644
--- a/math/s_cacos_template.c
+++ b/math/s_cacos_template.c
@@ -53,7 +53,3 @@ M_DECL_FUNC (__cacos) (CFLOAT x)
 }
 
 declare_mgen_alias (__cacos, cacos);
-
-#if M_LIBM_NEED_COMPAT (carg)
-declare_mgen_libm_compat (__cacos, cacos)
-#endif
diff --git a/math/s_cacosh_template.c b/math/s_cacosh_template.c
index 1fe0f4f..14f0b2a 100644
--- a/math/s_cacosh_template.c
+++ b/math/s_cacosh_template.c
@@ -90,7 +90,3 @@ M_DECL_FUNC (__cacosh) (CFLOAT x)
 }
 
 declare_mgen_alias (__cacosh, cacosh)
-
-#if M_LIBM_NEED_COMPAT (cacosh)
-declare_mgen_libm_compat (__cacosh, cacosh)
-#endif
diff --git a/math/s_casin_template.c b/math/s_casin_template.c
index faa2f6b..c61c880 100644
--- a/math/s_casin_template.c
+++ b/math/s_casin_template.c
@@ -61,7 +61,3 @@ M_DECL_FUNC (__casin) (CFLOAT x)
 }
 
 declare_mgen_alias (__casin, casin)
-
-#if M_LIBM_NEED_COMPAT (casin)
-declare_mgen_libm_compat (__casin, casin)
-#endif
diff --git a/math/s_casinh_template.c b/math/s_casinh_template.c
index 8d7cc5c..440e639 100644
--- a/math/s_casinh_template.c
+++ b/math/s_casinh_template.c
@@ -69,7 +69,3 @@ M_DECL_FUNC (__casinh) (CFLOAT x)
 }
 
 declare_mgen_alias (__casinh, casinh)
-
-#if M_LIBM_NEED_COMPAT (casinh)
-declare_mgen_libm_compat (__casinh, casinh)
-#endif
diff --git a/math/s_catan_template.c b/math/s_catan_template.c
index dce613f..2434870 100644
--- a/math/s_catan_template.c
+++ b/math/s_catan_template.c
@@ -139,7 +139,3 @@ M_DECL_FUNC (__catan) (CFLOAT x)
 }
 
 declare_mgen_alias (__catan, catan)
-
-#if M_LIBM_NEED_COMPAT (catan)
-declare_mgen_libm_compat (__catan, catan)
-#endif
diff --git a/math/s_catanh_template.c b/math/s_catanh_template.c
index 21e06f5..f4f5605 100644
--- a/math/s_catanh_template.c
+++ b/math/s_catanh_template.c
@@ -133,7 +133,3 @@ M_DECL_FUNC (__catanh) (CFLOAT x)
 }
 
 declare_mgen_alias (__catanh, catanh)
-
-#if M_LIBM_NEED_COMPAT (catanh)
-declare_mgen_libm_compat (__catanh, catanh)
-#endif
diff --git a/math/s_ccos_template.c b/math/s_ccos_template.c
index 01cbae3..6584450 100644
--- a/math/s_ccos_template.c
+++ b/math/s_ccos_template.c
@@ -34,7 +34,3 @@ M_DECL_FUNC (__ccos) (CFLOAT x)
 }
 
 declare_mgen_alias (__ccos, ccos);
-
-#if M_LIBM_NEED_COMPAT (carg)
-declare_mgen_libm_compat (__ccos, ccos)
-#endif
diff --git a/math/s_ccosh_template.c b/math/s_ccosh_template.c
index 1ee6014..d3ee8fc 100644
--- a/math/s_ccosh_template.c
+++ b/math/s_ccosh_template.c
@@ -135,7 +135,3 @@ M_DECL_FUNC (__ccosh) (CFLOAT x)
 }
 
 declare_mgen_alias (__ccosh, ccosh);
-
-#if M_LIBM_NEED_COMPAT (carg)
-declare_mgen_libm_compat (__ccosh, ccosh)
-#endif
diff --git a/math/s_cexp_template.c b/math/s_cexp_template.c
index b2c77c1..6290aca 100644
--- a/math/s_cexp_template.c
+++ b/math/s_cexp_template.c
@@ -148,7 +148,3 @@ M_DECL_FUNC (__cexp) (CFLOAT x)
   return retval;
 }
 declare_mgen_alias (__cexp, cexp)
-
-#if M_LIBM_NEED_COMPAT (cexp)
-declare_mgen_libm_compat (__cexp, cexp)
-#endif
diff --git a/math/s_clog10_template.c b/math/s_clog10_template.c
index 30d87b5..1b004d1 100644
--- a/math/s_clog10_template.c
+++ b/math/s_clog10_template.c
@@ -120,9 +120,3 @@ M_DECL_FUNC (__clog10) (CFLOAT x)
 }
 
 declare_mgen_alias (__clog10, clog10)
-
-#if M_LIBM_NEED_COMPAT (clog10)
-/* __clog10 is also a public symbol.  */
-declare_mgen_libm_compat (__clog10, __clog10)
-declare_mgen_libm_compat (clog10, clog10)
-#endif
diff --git a/math/s_clog_template.c b/math/s_clog_template.c
index feb801f..37746a0 100644
--- a/math/s_clog_template.c
+++ b/math/s_clog_template.c
@@ -113,7 +113,3 @@ M_DECL_FUNC (__clog) (CFLOAT x)
 }
 
 declare_mgen_alias (__clog, clog)
-
-#if M_LIBM_NEED_COMPAT (clog)
-declare_mgen_libm_compat (__clog, clog)
-#endif
diff --git a/math/s_cpow_template.c b/math/s_cpow_template.c
index 604d095..dd1d08d 100644
--- a/math/s_cpow_template.c
+++ b/math/s_cpow_template.c
@@ -27,7 +27,3 @@ M_DECL_FUNC (__cpow) (CFLOAT x, CFLOAT c)
 }
 
 declare_mgen_alias (__cpow, cpow)
-
-#if M_LIBM_NEED_COMPAT (cpow)
-declare_mgen_libm_compat (__cpow, cpow)
-#endif
diff --git a/math/s_cproj_template.c b/math/s_cproj_template.c
index 7f9e9f0..0ab2727 100644
--- a/math/s_cproj_template.c
+++ b/math/s_cproj_template.c
@@ -39,7 +39,3 @@ M_DECL_FUNC (__cproj) (CFLOAT x)
 }
 
 declare_mgen_alias (__cproj, cproj)
-
-#if M_LIBM_NEED_COMPAT (cproj)
-declare_mgen_libm_compat (__cproj, cproj)
-#endif
diff --git a/math/s_csin_template.c b/math/s_csin_template.c
index d52beb9..5a38bf7 100644
--- a/math/s_csin_template.c
+++ b/math/s_csin_template.c
@@ -159,7 +159,3 @@ M_DECL_FUNC (__csin) (CFLOAT x)
 }
 
 declare_mgen_alias (__csin, csin)
-
-#if M_LIBM_NEED_COMPAT (csin)
-declare_mgen_libm_compat (__csin, csin)
-#endif
diff --git a/math/s_csinh_template.c b/math/s_csinh_template.c
index d5ef5ae..ecea37c 100644
--- a/math/s_csinh_template.c
+++ b/math/s_csinh_template.c
@@ -154,7 +154,3 @@ M_DECL_FUNC (__csinh) (CFLOAT x)
 }
 
 declare_mgen_alias (__csinh, csinh)
-
-#if M_LIBM_NEED_COMPAT (csinh)
-declare_mgen_libm_compat (__csinh, csinh)
-#endif
diff --git a/math/s_csqrt_template.c b/math/s_csqrt_template.c
index 69cf77c..a94195a 100644
--- a/math/s_csqrt_template.c
+++ b/math/s_csqrt_template.c
@@ -158,7 +158,3 @@ M_DECL_FUNC (__csqrt) (CFLOAT x)
   return res;
 }
 declare_mgen_alias (__csqrt, csqrt)
-
-#if M_LIBM_NEED_COMPAT (csqrt)
-declare_mgen_libm_compat (__csqrt, csqrt)
-#endif
diff --git a/math/s_ctan_template.c b/math/s_ctan_template.c
index baf6030..723156e 100644
--- a/math/s_ctan_template.c
+++ b/math/s_ctan_template.c
@@ -124,7 +124,3 @@ M_DECL_FUNC (__ctan) (CFLOAT x)
 }
 
 declare_mgen_alias (__ctan, ctan)
-
-#if M_LIBM_NEED_COMPAT (ctan)
-declare_mgen_libm_compat (__ctan, ctan)
-#endif
diff --git a/math/s_ctanh_template.c b/math/s_ctanh_template.c
index 1c00d14..96873dd 100644
--- a/math/s_ctanh_template.c
+++ b/math/s_ctanh_template.c
@@ -124,7 +124,3 @@ M_DECL_FUNC (__ctanh) (CFLOAT x)
 }
 
 declare_mgen_alias (__ctanh, ctanh)
-
-#if M_LIBM_NEED_COMPAT (ctanh)
-declare_mgen_libm_compat (__ctanh, ctanh)
-#endif
diff --git a/math/s_fdim_template.c b/math/s_fdim_template.c
index 967777a..1fa4b7c 100644
--- a/math/s_fdim_template.c
+++ b/math/s_fdim_template.c
@@ -34,7 +34,3 @@ M_DECL_FUNC (__fdim) (FLOAT x, FLOAT y)
   return r;
 }
 declare_mgen_alias (__fdim, fdim);
-
-#if M_LIBM_NEED_COMPAT (fdim)
-declare_mgen_libm_compat (__fdim, fdim)
-#endif
diff --git a/math/s_fmax_template.c b/math/s_fmax_template.c
index 0471ab5..fe812c7 100644
--- a/math/s_fmax_template.c
+++ b/math/s_fmax_template.c
@@ -33,7 +33,3 @@ M_DECL_FUNC (__fmax) (FLOAT x, FLOAT y)
 }
 
 declare_mgen_alias (__fmax, fmax);
-
-#if M_LIBM_NEED_COMPAT (fmax)
-declare_mgen_libm_compat (__fmax, fmax)
-#endif
diff --git a/math/s_fmin_template.c b/math/s_fmin_template.c
index 5f81409..5e8460a 100644
--- a/math/s_fmin_template.c
+++ b/math/s_fmin_template.c
@@ -33,7 +33,3 @@ M_DECL_FUNC (__fmin) (FLOAT x, FLOAT y)
     return isnan (y) ? x : y;
 }
 declare_mgen_alias (__fmin, fmin);
-
-#if M_LIBM_NEED_COMPAT (fmin)
-declare_mgen_libm_compat (__fmin, fmin)
-#endif
diff --git a/math/s_nan_template.c b/math/s_nan_template.c
index 010dacb..80a9aea 100644
--- a/math/s_nan_template.c
+++ b/math/s_nan_template.c
@@ -31,7 +31,3 @@ M_DECL_FUNC (__nan) (const char *tagp)
 }
 
 declare_mgen_alias (__nan, nan)
-
-#if M_LIBM_NEED_COMPAT (nan)
-declare_mgen_libm_compat (__nan, nan)
-#endif
diff --git a/math/w_ilogb_template.c b/math/w_ilogb_template.c
index f18dd42..a611f00 100644
--- a/math/w_ilogb_template.c
+++ b/math/w_ilogb_template.c
@@ -36,7 +36,3 @@ M_DECL_FUNC (__ilogb) (FLOAT x)
   return r;
 }
 declare_mgen_alias (__ilogb, ilogb)
-
-#if M_LIBM_NEED_COMPAT (ilogb)
-declare_mgen_libm_compat (__ilogb, ilogb)
-#endif
diff --git a/sysdeps/generic/libm-alias-double.h b/sysdeps/generic/libm-alias-double.h
new file mode 100644
index 0000000..23b5990
--- /dev/null
+++ b/sysdeps/generic/libm-alias-double.h
@@ -0,0 +1,42 @@
+/* Define aliases for libm double functions.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBM_ALIAS_DOUBLE_H
+#define _LIBM_ALIAS_DOUBLE_H
+
+/* Define aliases for a double libm function that has internal name
+   FROM ## R and public names TO ## suffix ## R for each suffix of a
+   supported floating-point type with the same format as double.  This
+   should only be used for functions where such public names exist for
+   _FloatN types, not for implementation-namespace exported names
+   (where there is one name per format, not per type) or for
+   obsolescent functions not provided for _FloatN types.  */
+#ifdef NO_LONG_DOUBLE
+# define libm_alias_double_r(from, to, r)	\
+  weak_alias (from ## r, to ## r)		\
+  strong_alias (from ## r, from ## l ## r)	\
+  weak_alias (from ## r, to ## l ## r)
+#else
+# define libm_alias_double_r(from, to, r)	\
+  weak_alias (from ## r, to ## r)
+#endif
+
+/* Likewise, but without the R suffix.  */
+#define libm_alias_double(from, to) libm_alias_double_r (from, to, )
+
+#endif
diff --git a/sysdeps/generic/math-type-macros-double.h b/sysdeps/generic/math-type-macros-double.h
index f2c1bb8..e978f90 100644
--- a/sysdeps/generic/math-type-macros-double.h
+++ b/sysdeps/generic/math-type-macros-double.h
@@ -27,14 +27,10 @@
 #define CFLOAT _Complex double
 #define M_STRTO_NAN __strtod_nan
 
-/* Machines without a distinct long double type
-   alias long double functions to their double
-   equivalent.  */
-#if defined NO_LONG_DOUBLE && !defined declare_mgen_alias
-# define declare_mgen_alias(from, to)	    \
-   weak_alias (from, to)		    \
-   strong_alias (from, from ## l)	    \
-   weak_alias (from, to ## l)
+#include <libm-alias-double.h>
+
+#ifndef declare_mgen_alias
+# define declare_mgen_alias(from, to) libm_alias_double (from, to)
 #endif
 
 /* Supply the generic macros.  */
diff --git a/sysdeps/generic/math-type-macros.h b/sysdeps/generic/math-type-macros.h
index 5656724..6aaa233 100644
--- a/sysdeps/generic/math-type-macros.h
+++ b/sysdeps/generic/math-type-macros.h
@@ -39,16 +39,7 @@
 
   declare_mgen_alias(from,to)
       This exposes the appropriate symbol(s) for a
-      function f of type FLOAT.
-
-  M_LIBM_NEED_COMPAT(func)
-      This is utilized in macro context to indicate
-      whether func should declare compat symbols.
-
-  declare_mgen_libm_compat(from,to)
-      This is used in conjunction with the above macro
-      outside of macro context to paste whatever is
-      required to generate a compat symbol. */
+      function f of type FLOAT.  */
 
 #ifndef M_PFX
 # error "M_PFX must be defined."
@@ -116,10 +107,4 @@
 # define declare_mgen_alias(from, to) weak_alias (M_SUF (from), M_SUF (to))
 #endif
 
-/* Do not generate anything for compat symbols by default.  */
-#ifndef M_LIBM_NEED_COMPAT
-# define M_LIBM_NEED_COMPAT(func) 0
-# define declare_mgen_libm_compat(from, to)
-#endif
-
 #endif /* _MATH_TYPE_MACROS */
diff --git a/sysdeps/ieee754/ldbl-opt/libm-alias-double.h b/sysdeps/ieee754/ldbl-opt/libm-alias-double.h
new file mode 100644
index 0000000..5ae4c8b
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/libm-alias-double.h
@@ -0,0 +1,44 @@
+/* Define aliases for libm double functions.  ldbl-opt version.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBM_ALIAS_DOUBLE_H
+#define _LIBM_ALIAS_DOUBLE_H
+
+#include <math_ldbl_opt.h>
+#include <first-versions.h>
+#include <ldbl-compat-choose.h>
+
+/* Define aliases for a double libm function that has internal name
+   FROM ## R and public names TO ## suffix ## R for each suffix of a
+   supported floating-point type with the same format as double.  This
+   should only be used for functions where such public names exist for
+   _FloatN types, not for implementation-namespace exported names
+   (where there is one name per format, not per type) or for
+   obsolescent functions not provided for _FloatN types.  */
+#define libm_alias_double_r(from, to, r)			\
+  weak_alias (from ## r, to ## r)				\
+  LONG_DOUBLE_COMPAT_CHOOSE_libm_ ## to ## l ## r		\
+    (compat_symbol (libm,					\
+		    from ## r,					\
+		    to ## l ## r,				\
+		    FIRST_VERSION_libm_ ## to ## l ## r), );
+
+/* Likewise, but without the R suffix.  */
+#define libm_alias_double(from, to) libm_alias_double_r (from, to, )
+
+#endif
diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h
deleted file mode 100644
index 67b5268..0000000
--- a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Overrides for ldbl-opt versioning for double types.
-   Copyright (C) 2016-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _MATH_TYPE_MACROS_DOUBLE
-
-#include <math_ldbl_opt.h>
-#include <first-versions.h>
-
-/* Define compat symbols for long double on platforms
-   where it was not always a distinct type.  */
-#if !defined M_LIBM_NEED_COMPAT
-# define M_LIBM_NEED_COMPAT(f) \
-  LONG_DOUBLE_COMPAT (libm, FIRST_VERSION_libm_ ## f ## l)
-#endif
-
-#if !defined declare_mgen_libm_compat
-# define declare_mgen_libm_compat(from, to)	      \
-  compat_symbol (libm, from, to ## l,		      \
-		 FIRST_VERSION_libm_ ## to ## l);
-#endif
-
-#include_next <math-type-macros-double.h>
-#endif
diff --git a/sysdeps/ieee754/ldbl-opt/s_clog10.c b/sysdeps/ieee754/ldbl-opt/s_clog10.c
new file mode 100644
index 0000000..ec52218
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/s_clog10.c
@@ -0,0 +1,28 @@
+/* Define __clog10l compat symbol for clog10 for ldbl-opt.
+   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/>.  */
+
+#include <math_ldbl_opt.h>
+#include <first-versions.h>
+#include <math-type-macros-double.h>
+
+#include <s_clog10_template.c>
+
+#if LONG_DOUBLE_COMPAT (libm, FIRST_VERSION_libm___clog10l)
+strong_alias (__clog10, __clog10l_alias)
+compat_symbol (libm, __clog10l_alias, __clog10l, FIRST_VERSION_libm___clog10l);
+#endif
diff --git a/sysdeps/ieee754/ldbl-opt/s_ldexp.c b/sysdeps/ieee754/ldbl-opt/s_ldexp.c
index 809080a..5a875ae 100644
--- a/sysdeps/ieee754/ldbl-opt/s_ldexp.c
+++ b/sysdeps/ieee754/ldbl-opt/s_ldexp.c
@@ -17,7 +17,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define M_LIBM_NEED_COMPAT(f) 0
+#define declare_mgen_alias(from, to) weak_alias (from, to)
 #include <math-type-macros-double.h>
 #include <s_ldexp_template.c>
 
diff --git a/sysdeps/ieee754/ldbl-opt/w_log1p.c b/sysdeps/ieee754/ldbl-opt/w_log1p.c
new file mode 100644
index 0000000..ad05247
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/w_log1p.c
@@ -0,0 +1,3 @@
+#define declare_mgen_alias(from, to) weak_alias (from, to)
+#include <math-type-macros-double.h>
+#include <w_log1p_template.c>
diff --git a/sysdeps/ieee754/ldbl-opt/w_scalbln.c b/sysdeps/ieee754/ldbl-opt/w_scalbln.c
new file mode 100644
index 0000000..495169f
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/w_scalbln.c
@@ -0,0 +1,3 @@
+#define declare_mgen_alias(from, to) weak_alias (from, to)
+#include <math-type-macros-double.h>
+#include <w_scalbln_template.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
index 8c3666d..daa477b 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
@@ -20,6 +20,5 @@
 
 #define __fdim __fdim_vis3
 #define declare_mgen_alias(t, f)
-#define M_LIBM_NEED_COMPAT(f) 0
 
 #include <math/s_fdim.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
index 417b869..ff3acd4 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
@@ -17,6 +17,8 @@
    <http://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_AS_VIS3_SUPPORT
+# include <math_ldbl_opt.h>
+# include <first-versions.h>
 # include <sparc-ifunc.h>
 # include <math.h>
 
@@ -25,6 +27,9 @@ extern double __fdim_generic (double, double);
 
 sparc_libm_ifunc(__fdim, hwcap & HWCAP_SPARC_VIS3 ? __fdim_vis3 : __fdim_generic);
 weak_alias (__fdim, fdim)
+# if LONG_DOUBLE_COMPAT (libm, FIRST_VERSION_libm_fdiml)
+compat_symbol (libm, __fdim, fdiml, FIRST_VERSION_libm_fdiml);
+# endif
 
 # define __fdim __fdim_generic
 # define declare_mgen_alias(t, f)
