Add libm_alias_*_other_r macros.

Some libm functions are unable to use the generic alias macros such as
libm_alias_double because they have special symbol versioning
requirements for the main float, double or long double public names.

To facilitate adding _FloatN / _FloatNx function aliases in future,
it's still desirable to have generic macros those functions can use as
far as possible.  This patch adds macros such as
libm_alias_double_other, which only define names for _FloatN /
_FloatNx aliases, not for float / double / long double.  As present,
all these new macros do nothing, but they are called in the
appropriate places in macros such as libm_alias_double.  This patch
also arranges for lgamma implementations, and the recently added
optimized float function implementations, to use the new macros to
make them ready for addition of _FloatN / _FloatNx aliases.

Tested for x86_64, and tested with build-many-glibcs.py that installed
stripped shared libraries are unchanged by this patch.

	* sysdeps/generic/libm-alias-double.h (libm_alias_double_other_r):
	New macro.
	(libm_alias_double_other): Likewise.
	(libm_alias_double_r): Use libm_alias_double_other_r.
	* sysdeps/generic/libm-alias-float.h (libm_alias_float_other_r):
	New macro.
	(libm_alias_float_other): Likewise.
	(libm_alias_float_r): Use libm_alias_float_other_r.
	* sysdeps/generic/libm-alias-float128.h
	(libm_alias_float128_other_r): New macro.
	(libm_alias_float128_other): Likewise.
	(libm_alias_float128_r): Use libm_alias_float128_other_r.
	* sysdeps/generic/libm-alias-ldouble.h
	(libm_alias_ldouble_other_r): New macro.
	(libm_alias_ldouble_other): Likewise.
	(libm_alias_ldouble_r): Use libm_alias_ldouble_other_r.
	* sysdeps/ieee754/ldbl-opt/libm-alias-double.h
	(libm_alias_double_other_r): New macro.
	(libm_alias_double_other): Likewise.
	(libm_alias_double_r): Use libm_alias_double_other_r.
	* sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h
	(libm_alias_ldouble_other_r): New macro.
	(libm_alias_ldouble_other): Likewise.
	(libm_alias_ldouble_r): Use libm_alias_ldouble_other_r.
	* math/w_lgamma_main.c: Include <libm-alias-double.h>.
	[!USE_AS_COMPAT]: Use libm_alias_double_other.
	* math/w_lgammaf_main.c: Include <libm-alias-float.h>.
	[!USE_AS_COMPAT]: Use libm_alias_float_other.
	* math/w_lgammal_main.c: Include <libm-alias-ldouble.h>.
	[!USE_AS_COMPAT]: Use libm_alias_ldouble_other.
	* math/w_exp2f.c: Use libm_alias_float_other.
	* math/w_expf.c: Likewise.
	* math/w_log2f.c: Likewise.
	* math/w_logf.c: Likewise.
	* math/w_powf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_exp2f.c: Include <libm-alias-float.h>.
	[!__exp2f]: Use libm_alias_float_other.
	* sysdeps/ieee754/flt-32/e_expf.c: Include <libm-alias-float.h>.
	[!__expf]: Use libm_alias_float_other.
	* sysdeps/ieee754/flt-32/e_log2f.c: Include <libm-alias-float.h>.
	[!__log2f]: Use libm_alias_float_other.
	* sysdeps/ieee754/flt-32/e_logf.c: Include <libm-alias-float.h>.
	[!__logf]: Use libm_alias_float_other.
	* sysdeps/ieee754/flt-32/e_powf.c: Include <libm-alias-float.h>.
	[!__powf]: Use libm_alias_float_other.
This commit is contained in:
Joseph Myers 2017-10-10 21:29:11 +00:00
parent 8ed70de2fa
commit 24b6515d87
20 changed files with 144 additions and 7 deletions

View File

@ -1,3 +1,51 @@
2017-10-10 Joseph Myers <joseph@codesourcery.com>
* sysdeps/generic/libm-alias-double.h (libm_alias_double_other_r):
New macro.
(libm_alias_double_other): Likewise.
(libm_alias_double_r): Use libm_alias_double_other_r.
* sysdeps/generic/libm-alias-float.h (libm_alias_float_other_r):
New macro.
(libm_alias_float_other): Likewise.
(libm_alias_float_r): Use libm_alias_float_other_r.
* sysdeps/generic/libm-alias-float128.h
(libm_alias_float128_other_r): New macro.
(libm_alias_float128_other): Likewise.
(libm_alias_float128_r): Use libm_alias_float128_other_r.
* sysdeps/generic/libm-alias-ldouble.h
(libm_alias_ldouble_other_r): New macro.
(libm_alias_ldouble_other): Likewise.
(libm_alias_ldouble_r): Use libm_alias_ldouble_other_r.
* sysdeps/ieee754/ldbl-opt/libm-alias-double.h
(libm_alias_double_other_r): New macro.
(libm_alias_double_other): Likewise.
(libm_alias_double_r): Use libm_alias_double_other_r.
* sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h
(libm_alias_ldouble_other_r): New macro.
(libm_alias_ldouble_other): Likewise.
(libm_alias_ldouble_r): Use libm_alias_ldouble_other_r.
* math/w_lgamma_main.c: Include <libm-alias-double.h>.
[!USE_AS_COMPAT]: Use libm_alias_double_other.
* math/w_lgammaf_main.c: Include <libm-alias-float.h>.
[!USE_AS_COMPAT]: Use libm_alias_float_other.
* math/w_lgammal_main.c: Include <libm-alias-ldouble.h>.
[!USE_AS_COMPAT]: Use libm_alias_ldouble_other.
* math/w_exp2f.c: Use libm_alias_float_other.
* math/w_expf.c: Likewise.
* math/w_log2f.c: Likewise.
* math/w_logf.c: Likewise.
* math/w_powf.c: Likewise.
* sysdeps/ieee754/flt-32/e_exp2f.c: Include <libm-alias-float.h>.
[!__exp2f]: Use libm_alias_float_other.
* sysdeps/ieee754/flt-32/e_expf.c: Include <libm-alias-float.h>.
[!__expf]: Use libm_alias_float_other.
* sysdeps/ieee754/flt-32/e_log2f.c: Include <libm-alias-float.h>.
[!__log2f]: Use libm_alias_float_other.
* sysdeps/ieee754/flt-32/e_logf.c: Include <libm-alias-float.h>.
[!__logf]: Use libm_alias_float_other.
* sysdeps/ieee754/flt-32/e_powf.c: Include <libm-alias-float.h>.
[!__powf]: Use libm_alias_float_other.
2017-10-10 Florian Weimer <fweimer@redhat.com> 2017-10-10 Florian Weimer <fweimer@redhat.com>
* nss/nss_files/files-hosts.c (gethostbyname3_multi): New * nss/nss_files/files-hosts.c (gethostbyname3_multi): New

View File

@ -5,3 +5,4 @@
#define declare_mgen_alias(a, b) #define declare_mgen_alias(a, b)
#include <w_exp2_template.c> #include <w_exp2_template.c>
versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27); versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
libm_alias_float_other (__exp2, exp2)

View File

@ -5,3 +5,4 @@
#define declare_mgen_alias(a, b) #define declare_mgen_alias(a, b)
#include <w_exp_template.c> #include <w_exp_template.c>
versioned_symbol (libm, __expf, expf, GLIBC_2_27); versioned_symbol (libm, __expf, expf, GLIBC_2_27);
libm_alias_float_other (__exp, exp)

View File

@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <math-svid-compat.h> #include <math-svid-compat.h>
#include <libm-alias-double.h>
#include <lgamma-compat.h> #include <lgamma-compat.h>
@ -48,6 +49,7 @@ versioned_symbol (libm, __lgamma, lgamma, LGAMMA_NEW_VER);
strong_alias (__lgamma, __lgammal) strong_alias (__lgamma, __lgammal)
versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER); versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER);
# endif # endif
libm_alias_double_other (__lgamma, lgamma)
# endif # endif
# if GAMMA_ALIAS # if GAMMA_ALIAS
strong_alias (LGFUNC (__lgamma), __gamma) strong_alias (LGFUNC (__lgamma), __gamma)

View File

@ -16,6 +16,7 @@
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <math-svid-compat.h> #include <math-svid-compat.h>
#include <libm-alias-float.h>
#include <lgamma-compat.h> #include <lgamma-compat.h>
@ -37,6 +38,7 @@ LGFUNC (__lgammaf) (float x)
compat_symbol (libm, __lgammaf_compat, lgammaf, LGAMMA_OLD_VER); compat_symbol (libm, __lgammaf_compat, lgammaf, LGAMMA_OLD_VER);
# else # else
versioned_symbol (libm, __lgammaf, lgammaf, LGAMMA_NEW_VER); versioned_symbol (libm, __lgammaf, lgammaf, LGAMMA_NEW_VER);
libm_alias_float_other (__lgamma, lgamma)
# endif # endif
# if GAMMA_ALIAS # if GAMMA_ALIAS
strong_alias (LGFUNC (__lgammaf), __gammaf) strong_alias (LGFUNC (__lgammaf), __gammaf)

View File

@ -23,6 +23,7 @@
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <math-svid-compat.h> #include <math-svid-compat.h>
#include <libm-alias-ldouble.h>
#include <lgamma-compat.h> #include <lgamma-compat.h>
@ -44,6 +45,7 @@ LGFUNC (__lgammal) (long double x)
compat_symbol (libm, __lgammal_compat, lgammal, LGAMMA_OLD_VER); compat_symbol (libm, __lgammal_compat, lgammal, LGAMMA_OLD_VER);
# else # else
versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER); versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER);
libm_alias_ldouble_other (__lgamma, lgamma)
# endif # endif
# if GAMMA_ALIAS # if GAMMA_ALIAS
strong_alias (LGFUNC (__lgammal), __gammal) strong_alias (LGFUNC (__lgammal), __gammal)

View File

@ -5,3 +5,4 @@
#define declare_mgen_alias(a, b) #define declare_mgen_alias(a, b)
#include <w_log2_template.c> #include <w_log2_template.c>
versioned_symbol (libm, __log2f, log2f, GLIBC_2_27); versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
libm_alias_float_other (__log2, log2)

View File

@ -5,3 +5,4 @@
#define declare_mgen_alias(a, b) #define declare_mgen_alias(a, b)
#include <w_log_template.c> #include <w_log_template.c>
versioned_symbol (libm, __logf, logf, GLIBC_2_27); versioned_symbol (libm, __logf, logf, GLIBC_2_27);
libm_alias_float_other (__log, log)

View File

@ -5,3 +5,4 @@
#define declare_mgen_alias(a, b) #define declare_mgen_alias(a, b)
#include <w_pow_template.c> #include <w_pow_template.c>
versioned_symbol (libm, __powf, powf, GLIBC_2_27); versioned_symbol (libm, __powf, powf, GLIBC_2_27);
libm_alias_float_other (__pow, pow)

View File

@ -19,6 +19,16 @@
#ifndef _LIBM_ALIAS_DOUBLE_H #ifndef _LIBM_ALIAS_DOUBLE_H
#define _LIBM_ALIAS_DOUBLE_H #define _LIBM_ALIAS_DOUBLE_H
/* Define _FloatN / _FloatNx aliases for a double libm function that
has internal name FROM ## R and public names TO ## suffix ## R for
each suffix of a supported _FloatN / _FloatNx floating-point type
with the same format as double. */
#define libm_alias_double_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_double_other(from, to) \
libm_alias_double_other_r (from, to, )
/* Define aliases for a double libm function that has internal name /* Define aliases for a double libm function that has internal name
FROM ## R and public names TO ## suffix ## R for each suffix of a FROM ## R and public names TO ## suffix ## R for each suffix of a
supported floating-point type with the same format as double. This supported floating-point type with the same format as double. This
@ -30,10 +40,12 @@
# define libm_alias_double_r(from, to, r) \ # define libm_alias_double_r(from, to, r) \
weak_alias (from ## r, to ## r) \ weak_alias (from ## r, to ## r) \
strong_alias (from ## r, from ## l ## r) \ strong_alias (from ## r, from ## l ## r) \
weak_alias (from ## r, to ## l ## r) weak_alias (from ## r, to ## l ## r) \
libm_alias_double_other_r (from, to, r)
#else #else
# define libm_alias_double_r(from, to, r) \ # define libm_alias_double_r(from, to, r) \
weak_alias (from ## r, to ## r) weak_alias (from ## r, to ## r) \
libm_alias_double_other_r (from, to, r)
#endif #endif
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */

View File

@ -19,6 +19,16 @@
#ifndef _LIBM_ALIAS_FLOAT_H #ifndef _LIBM_ALIAS_FLOAT_H
#define _LIBM_ALIAS_FLOAT_H #define _LIBM_ALIAS_FLOAT_H
/* Define _FloatN / _FloatNx aliases for a float libm function that
has internal name FROM ## f ## R and public names TO ## suffix ## R
for each suffix of a supported _FloatN / _FloatNx floating-point
type with the same format as float. */
#define libm_alias_float_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_float_other(from, to) \
libm_alias_float_other_r (from, to, )
/* Define aliases for a float libm function that has internal name /* Define aliases for a float libm function that has internal name
FROM ## f ## R and public names TO ## suffix ## R for each suffix FROM ## f ## R and public names TO ## suffix ## R for each suffix
of a supported floating-point type with the same format as float. of a supported floating-point type with the same format as float.
@ -27,7 +37,8 @@
names (where there is one name per format, not per type) or for names (where there is one name per format, not per type) or for
obsolescent functions not provided for _FloatN types. */ obsolescent functions not provided for _FloatN types. */
#define libm_alias_float_r(from, to, r) \ #define libm_alias_float_r(from, to, r) \
weak_alias (from ## f ## r, to ## f ## r) weak_alias (from ## f ## r, to ## f ## r) \
libm_alias_float_other_r (from, to, r)
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */
#define libm_alias_float(from, to) libm_alias_float_r (from, to, ) #define libm_alias_float(from, to) libm_alias_float_r (from, to, )

View File

@ -19,6 +19,17 @@
#ifndef _LIBM_ALIAS_FLOAT128_H #ifndef _LIBM_ALIAS_FLOAT128_H
#define _LIBM_ALIAS_FLOAT128_H #define _LIBM_ALIAS_FLOAT128_H
/* Define _FloatN / _FloatNx aliases (other than that for _Float128)
for a _Float128 libm function that has internal name FROM ## f128
## R and public names TO ## suffix ## R for each suffix of a
supported _FloatN / _FloatNx floating-point type with the same
format as _Float128. */
#define libm_alias_float128_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_float128_other(from, to) \
libm_alias_float128_other_r (from, to, )
/* Define aliases for a _Float128 libm function that has internal name /* Define aliases for a _Float128 libm function that has internal name
FROM ## f128 ## R and public names TO ## suffix ## R for each FROM ## f128 ## R and public names TO ## suffix ## R for each
suffix of a supported floating-point type with the same format as suffix of a supported floating-point type with the same format as
@ -28,7 +39,8 @@
per format, not per type) or for obsolescent functions not provided per format, not per type) or for obsolescent functions not provided
for _FloatN types. */ for _FloatN types. */
#define libm_alias_float128_r(from, to, r) \ #define libm_alias_float128_r(from, to, r) \
weak_alias (from ## f128 ## r, to ## f128 ## r) weak_alias (from ## f128 ## r, to ## f128 ## r) \
libm_alias_float128_other_r (from, to, r)
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */
#define libm_alias_float128(from, to) libm_alias_float128_r (from, to, ) #define libm_alias_float128(from, to) libm_alias_float128_r (from, to, )

View File

@ -19,6 +19,16 @@
#ifndef _LIBM_ALIAS_LDOUBLE_H #ifndef _LIBM_ALIAS_LDOUBLE_H
#define _LIBM_ALIAS_LDOUBLE_H #define _LIBM_ALIAS_LDOUBLE_H
/* Define _FloatN / _FloatNx aliases for a long double libm function
that has internal name FROM ## l ## R and public names TO ## suffix
## R for each suffix of a supported _FloatN / _FloatNx
floating-point type with the same format as long double. */
#define libm_alias_ldouble_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_ldouble_other(from, to) \
libm_alias_ldouble_other_r (from, to, )
/* Define aliases for a long double libm function that has internal /* Define aliases for a long double libm function that has internal
name FROM ## l ## R and public names TO ## suffix ## R for each name FROM ## l ## R and public names TO ## suffix ## R for each
suffix of a supported floating-point type with the same format as suffix of a supported floating-point type with the same format as
@ -28,7 +38,8 @@
per format, not per type) or for obsolescent functions not provided per format, not per type) or for obsolescent functions not provided
for _FloatN types. */ for _FloatN types. */
#define libm_alias_ldouble_r(from, to, r) \ #define libm_alias_ldouble_r(from, to, r) \
weak_alias (from ## l ## r, to ## l ## r) weak_alias (from ## l ## r, to ## l ## r) \
libm_alias_ldouble_other_r (from, to, r)
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */
#define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, ) #define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, )

View File

@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libm-alias-float.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -90,4 +91,5 @@ __exp2f (float x)
strong_alias (__exp2f, __ieee754_exp2f) strong_alias (__exp2f, __ieee754_exp2f)
strong_alias (__exp2f, __exp2f_finite) strong_alias (__exp2f, __exp2f_finite)
versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27); versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
libm_alias_float_other (__exp2, exp2)
#endif #endif

View File

@ -24,6 +24,7 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libm-alias-float.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -111,4 +112,5 @@ hidden_def (__expf)
strong_alias (__expf, __ieee754_expf) strong_alias (__expf, __ieee754_expf)
strong_alias (__expf, __expf_finite) strong_alias (__expf, __expf_finite)
versioned_symbol (libm, __expf, expf, GLIBC_2_27); versioned_symbol (libm, __expf, expf, GLIBC_2_27);
libm_alias_float_other (__exp, exp)
#endif #endif

View File

@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libm-alias-float.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -90,4 +91,5 @@ __log2f (float x)
strong_alias (__log2f, __ieee754_log2f) strong_alias (__log2f, __ieee754_log2f)
strong_alias (__log2f, __log2f_finite) strong_alias (__log2f, __log2f_finite)
versioned_symbol (libm, __log2f, log2f, GLIBC_2_27); versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
libm_alias_float_other (__log2, log2)
#endif #endif

View File

@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libm-alias-float.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -89,4 +90,5 @@ __logf (float x)
strong_alias (__logf, __ieee754_logf) strong_alias (__logf, __ieee754_logf)
strong_alias (__logf, __logf_finite) strong_alias (__logf, __logf_finite)
versioned_symbol (libm, __logf, logf, GLIBC_2_27); versioned_symbol (libm, __logf, logf, GLIBC_2_27);
libm_alias_float_other (__log, log)
#endif #endif

View File

@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libm-alias-float.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -219,4 +220,5 @@ __powf (float x, float y)
strong_alias (__powf, __ieee754_powf) strong_alias (__powf, __ieee754_powf)
strong_alias (__powf, __powf_finite) strong_alias (__powf, __powf_finite)
versioned_symbol (libm, __powf, powf, GLIBC_2_27); versioned_symbol (libm, __powf, powf, GLIBC_2_27);
libm_alias_float_other (__pow, pow)
#endif #endif

View File

@ -23,6 +23,16 @@
#include <first-versions.h> #include <first-versions.h>
#include <ldbl-compat-choose.h> #include <ldbl-compat-choose.h>
/* Define _FloatN / _FloatNx aliases for a double libm function that
has internal name FROM ## R and public names TO ## suffix ## R for
each suffix of a supported _FloatN / _FloatNx floating-point type
with the same format as double. */
#define libm_alias_double_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_double_other(from, to) \
libm_alias_double_other_r (from, to, )
/* Define aliases for a double libm function that has internal name /* Define aliases for a double libm function that has internal name
FROM ## R and public names TO ## suffix ## R for each suffix of a FROM ## R and public names TO ## suffix ## R for each suffix of a
supported floating-point type with the same format as double. This supported floating-point type with the same format as double. This
@ -36,7 +46,8 @@
(compat_symbol (libm, \ (compat_symbol (libm, \
from ## r, \ from ## r, \
to ## l ## r, \ to ## l ## r, \
FIRST_VERSION_libm_ ## to ## l ## r), ); FIRST_VERSION_libm_ ## to ## l ## r), ); \
libm_alias_double_other_r (from, to, r)
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */
#define libm_alias_double(from, to) libm_alias_double_r (from, to, ) #define libm_alias_double(from, to) libm_alias_double_r (from, to, )

View File

@ -22,6 +22,16 @@
#include <math_ldbl_opt.h> #include <math_ldbl_opt.h>
#include <ldbl-compat-choose.h> #include <ldbl-compat-choose.h>
/* Define _FloatN / _FloatNx aliases for a long double libm function
that has internal name FROM ## l ## R and public names TO ## suffix
## R for each suffix of a supported _FloatN / _FloatNx
floating-point type with the same format as long double. */
#define libm_alias_ldouble_other_r(from, to, r)
/* Likewise, but without the R suffix. */
#define libm_alias_ldouble_other(from, to) \
libm_alias_ldouble_other_r (from, to, )
/* Define aliases for a long double libm function that has internal /* Define aliases for a long double libm function that has internal
name FROM ## l ## R and public names TO ## suffix ## R for each name FROM ## l ## R and public names TO ## suffix ## R for each
suffix of a supported floating-point type with the same format as suffix of a supported floating-point type with the same format as
@ -33,7 +43,8 @@
#define libm_alias_ldouble_r(from, to, r) \ #define libm_alias_ldouble_r(from, to, r) \
LONG_DOUBLE_COMPAT_CHOOSE_libm_ ## to ## l ## r \ LONG_DOUBLE_COMPAT_CHOOSE_libm_ ## to ## l ## r \
(long_double_symbol (libm, from ## l ## r, to ## l ## r), \ (long_double_symbol (libm, from ## l ## r, to ## l ## r), \
weak_alias (from ## l ## r, to ## l ## r)); weak_alias (from ## l ## r, to ## l ## r)); \
libm_alias_ldouble_other_r (from, to, r)
/* Likewise, but without the R suffix. */ /* Likewise, but without the R suffix. */
#define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, ) #define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, )