diff options
author | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-08-25 11:25:33 -0500 |
---|---|---|
committer | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-09-01 09:28:05 -0500 |
commit | 7b7c39450b3c4ab35b4960346e61d7b177ee728e (patch) | |
tree | 251612e6e9a4192b1e5ca8010589ec64a692b9fa /sysdeps | |
parent | 4d728087ef8cc826b05bd21d0c74d4eca9b1a27d (diff) | |
download | glibc-7b7c39450b3c4ab35b4960346e61d7b177ee728e.zip glibc-7b7c39450b3c4ab35b4960346e61d7b177ee728e.tar.gz glibc-7b7c39450b3c4ab35b4960346e61d7b177ee728e.tar.bz2 |
Make common fdim implementation generic.
The only difference is the usage of math_narrow_eval when
building s_fdiml.c. This should be harmless for long double,
but I did observe some code generation changes on m68k, but
lack the resources to test it.
Likewise, to more easily support overriding symbol generation,
the aliasing macros are always conditionally defined on their
absence to reduce boilerplate.
I also ran builds for i486, ppc64, sparcv9, aarch64,
s390x and observed no changes to s_fdim* objects.
Diffstat (limited to 'sysdeps')
9 files changed, 19 insertions, 16 deletions
diff --git a/sysdeps/generic/math-type-macros-double.h b/sysdeps/generic/math-type-macros-double.h index 4149b39..154f416 100644 --- a/sysdeps/generic/math-type-macros-double.h +++ b/sysdeps/generic/math-type-macros-double.h @@ -29,12 +29,12 @@ /* Machines without a distinct long double type alias long double functions to their double equivalent. */ -#if defined NO_LONG_DOUBLE +#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) -#else +#elif !defined declare_mgen_alias # define declare_mgen_alias(from, to) \ weak_alias (M_SUF (from), M_SUF (to)) #endif diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h index 8cb5694..e78a5e3 100644 --- a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h +++ b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h @@ -44,15 +44,20 @@ #define LDOUBLE_cpowl_libm_version GLIBC_2_1 #define LDOUBLE_clog10l_libm_version GLIBC_2_1 #define LDOUBLE___clog10l_libm_version GLIBC_2_1 +#define LDOUBLE_fdiml_libm_version GLIBC_2_1 /* Define compat symbols for long double on platforms where it was not always a distinct type. */ -#define M_LIBM_NEED_COMPAT(f) \ +#if !defined M_LIBM_NEED_COMPAT +# define M_LIBM_NEED_COMPAT(f) \ LONG_DOUBLE_COMPAT (libm, LDOUBLE_ ## f ## l_libm_version) +#endif -#define declare_mgen_libm_compat(from, to) \ +#if !defined declare_mgen_libm_compat +# define declare_mgen_libm_compat(from, to) \ compat_symbol (libm, from, to ## l, \ LDOUBLE_ ## to ## l_libm_version); +#endif #include_next <math-type-macros-double.h> #endif diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h index d2af4bb..ae3713d 100644 --- a/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h +++ b/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h @@ -22,8 +22,10 @@ /* Use properly versioned symbols for long double on platforms where it was not always a distinct type. */ -#define declare_mgen_alias(from, to) \ +#if !defined declare_mgen_alias +# define declare_mgen_alias(from, to) \ long_double_symbol (libm, from ## l, to ## l); +#endif #include_next <math-type-macros-ldouble.h> #endif diff --git a/sysdeps/ieee754/ldbl-opt/s_fdim.c b/sysdeps/ieee754/ldbl-opt/s_fdim.c deleted file mode 100644 index 02c95bf..0000000 --- a/sysdeps/ieee754/ldbl-opt/s_fdim.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#include <math/s_fdim.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fdim, fdiml, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_fdiml.c b/sysdeps/ieee754/ldbl-opt/s_fdiml.c deleted file mode 100644 index 06b760b..0000000 --- a/sysdeps/ieee754/ldbl-opt/s_fdiml.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/s_fdiml.c> -long_double_symbol (libm, __fdiml, fdiml); 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 2973b49..6176517 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c @@ -19,5 +19,7 @@ #include <math.h> #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 9666741..2d07f31 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c @@ -27,6 +27,7 @@ sparc_libm_ifunc(__fdim, hwcap & HWCAP_SPARC_VIS3 ? __fdim_vis3 : __fdim_generic weak_alias (__fdim, fdim) # define __fdim __fdim_generic +# define declare_mgen_alias(t, f) #endif -#include <ldbl-opt/s_fdim.c> +#include <math/s_fdim.c> diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c index 75997c6..3f35b0d 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c @@ -19,5 +19,6 @@ #include <math.h> #define __fdimf __fdimf_vis3 +#define declare_mgen_alias(t, f) #include <math/s_fdimf.c> diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c index 767520f..b9add1c 100644 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c +++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c @@ -27,6 +27,8 @@ sparc_libm_ifunc(__fdimf, hwcap & HWCAP_SPARC_VIS3 ? __fdimf_vis3 : __fdimf_gene weak_alias (__fdimf, fdimf) # define __fdimf __fdimf_generic +# define declare_mgen_alias(t, f) + #endif #include <math/s_fdimf.c> |