Add libm_alias_*_other_r macros.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 10 Oct 2017 21:29:11 +0000 (21:29 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 10 Oct 2017 21:29:11 +0000 (21:29 +0000)
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.

20 files changed:
ChangeLog
math/w_exp2f.c
math/w_expf.c
math/w_lgamma_main.c
math/w_lgammaf_main.c
math/w_lgammal_main.c
math/w_log2f.c
math/w_logf.c
math/w_powf.c
sysdeps/generic/libm-alias-double.h
sysdeps/generic/libm-alias-float.h
sysdeps/generic/libm-alias-float128.h
sysdeps/generic/libm-alias-ldouble.h
sysdeps/ieee754/flt-32/e_exp2f.c
sysdeps/ieee754/flt-32/e_expf.c
sysdeps/ieee754/flt-32/e_log2f.c
sysdeps/ieee754/flt-32/e_logf.c
sysdeps/ieee754/flt-32/e_powf.c
sysdeps/ieee754/ldbl-opt/libm-alias-double.h
sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h

index f59f3466b6f52a01e9b269a0c1acbb3b4b655ba6..a3c6b0ab1961281b30d2870b0ee04124d4289886 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * nss/nss_files/files-hosts.c (gethostbyname3_multi): New
index 948d745dab9bd2155f00f7deec6f879b34b0a2b3..71aadce801e138983b7151219f22250e68fb8765 100644 (file)
@@ -5,3 +5,4 @@
 #define declare_mgen_alias(a, b)
 #include <w_exp2_template.c>
 versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+libm_alias_float_other (__exp2, exp2)
index 6d5f03c5f93e44c6fbefe79c358b04e573fbb809..00d191ec1578f7ad1af77ec326120aefe5204370 100644 (file)
@@ -5,3 +5,4 @@
 #define declare_mgen_alias(a, b)
 #include <w_exp_template.c>
 versioned_symbol (libm, __expf, expf, GLIBC_2_27);
+libm_alias_float_other (__exp, exp)
index 7dbba22f4efe70f55fa039518e94e707668cb719..ac91b9d9e6ca5e9bc16e3ab2b2f65fca87237c1e 100644 (file)
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-svid-compat.h>
+#include <libm-alias-double.h>
 
 #include <lgamma-compat.h>
 
@@ -48,6 +49,7 @@ versioned_symbol (libm, __lgamma, lgamma, LGAMMA_NEW_VER);
 strong_alias (__lgamma, __lgammal)
 versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER);
 #  endif
+libm_alias_double_other (__lgamma, lgamma)
 # endif
 # if GAMMA_ALIAS
 strong_alias (LGFUNC (__lgamma), __gamma)
index a3d7e1ae99c4d4faa880c5f804a8905e5b620e02..ef6065994f698b28445309478f1b02ec3f986ad2 100644 (file)
@@ -16,6 +16,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-svid-compat.h>
+#include <libm-alias-float.h>
 
 #include <lgamma-compat.h>
 
@@ -37,6 +38,7 @@ LGFUNC (__lgammaf) (float x)
 compat_symbol (libm, __lgammaf_compat, lgammaf, LGAMMA_OLD_VER);
 # else
 versioned_symbol (libm, __lgammaf, lgammaf, LGAMMA_NEW_VER);
+libm_alias_float_other (__lgamma, lgamma)
 # endif
 # if GAMMA_ALIAS
 strong_alias (LGFUNC (__lgammaf), __gammaf)
index 447fb97cb7244f0671f67e1c24622b2edc1267aa..f269cef6ab56e3cb56ed8b3d2d3f4c96d3595415 100644 (file)
@@ -23,6 +23,7 @@
 #include <math.h>
 #include <math_private.h>
 #include <math-svid-compat.h>
+#include <libm-alias-ldouble.h>
 
 #include <lgamma-compat.h>
 
@@ -44,6 +45,7 @@ LGFUNC (__lgammal) (long double x)
 compat_symbol (libm, __lgammal_compat, lgammal, LGAMMA_OLD_VER);
 # else
 versioned_symbol (libm, __lgammal, lgammal, LGAMMA_NEW_VER);
+libm_alias_ldouble_other (__lgamma, lgamma)
 # endif
 # if GAMMA_ALIAS
 strong_alias (LGFUNC (__lgammal), __gammal)
index cda0c3a644b897f187665c5fdb731a224b58606d..d21b602d56e93a22dbbbb3218f919d652f4115ac 100644 (file)
@@ -5,3 +5,4 @@
 #define declare_mgen_alias(a, b)
 #include <w_log2_template.c>
 versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
+libm_alias_float_other (__log2, log2)
index d960e016d72b89451c0e0810f03d25e266accea7..63736f453060606e03a0609b1c7ad71cae1596e4 100644 (file)
@@ -5,3 +5,4 @@
 #define declare_mgen_alias(a, b)
 #include <w_log_template.c>
 versioned_symbol (libm, __logf, logf, GLIBC_2_27);
+libm_alias_float_other (__log, log)
index a18348329e8f50e81788eb3e28a21f9004d18088..aea9058ebe3dd36ef99e74b252afb9e5db9120a0 100644 (file)
@@ -5,3 +5,4 @@
 #define declare_mgen_alias(a, b)
 #include <w_pow_template.c>
 versioned_symbol (libm, __powf, powf, GLIBC_2_27);
+libm_alias_float_other (__pow, pow)
index 23b5990e368ad5b5ce52c0fa3f239be78795f436..0593ad98864085b0058d273ee869e25af9e4feb5 100644 (file)
 #ifndef _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
    FROM ## R and public names TO ## suffix ## R for each suffix of a
    supported floating-point type with the same format as double.  This
 # 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)
+  weak_alias (from ## r, to ## l ## r)         \
+  libm_alias_double_other_r (from, to, r)
 #else
 # 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
 
 /* Likewise, but without the R suffix.  */
index 23f0166697988eb0a4ddbb3fed733dd4d9428ca1..11bd472a5334dcdd1b7b4767e02f2fd0b003542b 100644 (file)
 #ifndef _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
    FROM ## f ## R and public names TO ## suffix ## R for each suffix
    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
    obsolescent functions not provided for _FloatN types.  */
 #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.  */
 #define libm_alias_float(from, to) libm_alias_float_r (from, to, )
index 6bb1cb1117e1e0adb07f390d56e502f64635313f..8a7ebf32aca565c792de5124e35a8256725f2091 100644 (file)
 #ifndef _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
    FROM ## f128 ## R and public names TO ## suffix ## R for each
    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
    for _FloatN types.  */
 #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.  */
 #define libm_alias_float128(from, to) libm_alias_float128_r (from, to, )
index 7414b922e1179e5293fefbc85703e6b7cc194fa2..82dafd513ec9e939a36271cddbb4ad81515e8099 100644 (file)
 #ifndef _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
    name FROM ## l ## R and public names TO ## suffix ## R for each
    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
    for _FloatN types.  */
 #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.  */
 #define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, )
index 31b660b07b07ca5d25489207c9f6e85b77137452..c8eca4091abe14b8b4442263b4d79127ed05d913 100644 (file)
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <shlib-compat.h>
+#include <libm-alias-float.h>
 #include "math_config.h"
 
 /*
@@ -90,4 +91,5 @@ __exp2f (float x)
 strong_alias (__exp2f, __ieee754_exp2f)
 strong_alias (__exp2f, __exp2f_finite)
 versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+libm_alias_float_other (__exp2, exp2)
 #endif
index 74a383a02c00b3303088c44ccbbd4807662d50fc..e449d5c643f2cbdaa1c37a3abdd554f4eb752601 100644 (file)
@@ -24,6 +24,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <shlib-compat.h>
+#include <libm-alias-float.h>
 #include "math_config.h"
 
 /*
@@ -111,4 +112,5 @@ hidden_def (__expf)
 strong_alias (__expf, __ieee754_expf)
 strong_alias (__expf, __expf_finite)
 versioned_symbol (libm, __expf, expf, GLIBC_2_27);
+libm_alias_float_other (__exp, exp)
 #endif
index ef13b372cbd015af45f38b214e1f10af7b3cc273..24cc11dc261ff441aca32869b5648620af989d74 100644 (file)
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <shlib-compat.h>
+#include <libm-alias-float.h>
 #include "math_config.h"
 
 /*
@@ -90,4 +91,5 @@ __log2f (float x)
 strong_alias (__log2f, __ieee754_log2f)
 strong_alias (__log2f, __log2f_finite)
 versioned_symbol (libm, __log2f, log2f, GLIBC_2_27);
+libm_alias_float_other (__log2, log2)
 #endif
index ea847b57ec27e29d8d7d5694af92d7404145061d..80fec73fa4a584529c1b049983bda79b838eb2a3 100644 (file)
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <shlib-compat.h>
+#include <libm-alias-float.h>
 #include "math_config.h"
 
 /*
@@ -89,4 +90,5 @@ __logf (float x)
 strong_alias (__logf, __ieee754_logf)
 strong_alias (__logf, __logf_finite)
 versioned_symbol (libm, __logf, logf, GLIBC_2_27);
+libm_alias_float_other (__log, log)
 #endif
index 08d2c6d058056b4ebe827672a53f925e6764b6db..1c59b777e05ba67137094d3ea5b49ad39d27da26 100644 (file)
@@ -19,6 +19,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <shlib-compat.h>
+#include <libm-alias-float.h>
 #include "math_config.h"
 
 /*
@@ -219,4 +220,5 @@ __powf (float x, float y)
 strong_alias (__powf, __ieee754_powf)
 strong_alias (__powf, __powf_finite)
 versioned_symbol (libm, __powf, powf, GLIBC_2_27);
+libm_alias_float_other (__pow, pow)
 #endif
index 5ae4c8b33840bc22daebefc1d7b5b10535bbd1c4..4c22ffbcd6c8a3ac0d4381b59b65c39ffca1fa46 100644 (file)
 #include <first-versions.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
    FROM ## R and public names TO ## suffix ## R for each suffix of a
    supported floating-point type with the same format as double.  This
@@ -36,7 +46,8 @@
     (compat_symbol (libm,                                      \
                    from ## 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.  */
 #define libm_alias_double(from, to) libm_alias_double_r (from, to, )
index ae3202747f1a66f1249470a284619f7ac4925a8f..291a5f56cbc7b98ea420942ba699817fad6e8aed 100644 (file)
 #include <math_ldbl_opt.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
    name FROM ## l ## R and public names TO ## suffix ## R for each
    suffix of a supported floating-point type with the same format as
@@ -33,7 +43,8 @@
 #define libm_alias_ldouble_r(from, to, r)                      \
   LONG_DOUBLE_COMPAT_CHOOSE_libm_ ## 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.  */
 #define libm_alias_ldouble(from, to) libm_alias_ldouble_r (from, to, )