diff options
author | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-06-14 11:44:14 -0500 |
---|---|---|
committer | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-08-17 14:06:03 -0500 |
commit | ce6698ea0aea863bbfb4e932494406789e4e36c1 (patch) | |
tree | fc8a53b53c2b6d459dd9b4a5042314bcad7f4482 /sysdeps/ieee754/ldbl-opt | |
parent | 1f645571d2db9008b3cd3d5acb9ff93357864283 (diff) | |
download | glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.zip glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.tar.gz glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.tar.bz2 |
Support for type-generic libm function implementations libm
This defines a new classes of libm objects. The
<func>_template.c file which is used in conjunction
with the new makefile hooks to derive variants for
each type supported by the target machine.
The headers math-type-macros-TYPE.h are used to supply
macros to a common implementation of a function in
a file named FUNC_template.c and glued togethor via
a generated file matching existing naming in the
build directory.
This has the properties of preserving the existing
override mechanism and not requiring any arcane
build system twiddling. Likewise, it enables machines
to override these files without any additional work.
I have verified the built objects for ppc64, x86_64,
alpha, arm, and m68k do not change in any meaningful
way with these changes using the Fedora cross toolchains.
I have verified the x86_64 and ppc64 changes still run.
Diffstat (limited to 'sysdeps/ieee754/ldbl-opt')
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/cabs.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/cabsl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/carg.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/cargl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/cimag.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/cimagl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/conj.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/conjl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/creal.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/creall.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/math-type-macros-double.h | 58 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h | 29 |
12 files changed, 87 insertions, 60 deletions
diff --git a/sysdeps/ieee754/ldbl-opt/cabs.c b/sysdeps/ieee754/ldbl-opt/cabs.c deleted file mode 100644 index a181de2..0000000 --- a/sysdeps/ieee754/ldbl-opt/cabs.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#include <math/cabs.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __cabs, cabsl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/cabsl.c b/sysdeps/ieee754/ldbl-opt/cabsl.c deleted file mode 100644 index b861633..0000000 --- a/sysdeps/ieee754/ldbl-opt/cabsl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/cabsl.c> -long_double_symbol (libm, __cabsl, cabsl); diff --git a/sysdeps/ieee754/ldbl-opt/carg.c b/sysdeps/ieee754/ldbl-opt/carg.c deleted file mode 100644 index 2ed3581..0000000 --- a/sysdeps/ieee754/ldbl-opt/carg.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#include <math/carg.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __carg, cargl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/cargl.c b/sysdeps/ieee754/ldbl-opt/cargl.c deleted file mode 100644 index 952dc60..0000000 --- a/sysdeps/ieee754/ldbl-opt/cargl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/cargl.c> -long_double_symbol (libm, __cargl, cargl); diff --git a/sysdeps/ieee754/ldbl-opt/cimag.c b/sysdeps/ieee754/ldbl-opt/cimag.c deleted file mode 100644 index f805258..0000000 --- a/sysdeps/ieee754/ldbl-opt/cimag.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#include <math/cimag.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __cimag, cimagl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/cimagl.c b/sysdeps/ieee754/ldbl-opt/cimagl.c deleted file mode 100644 index 112365e..0000000 --- a/sysdeps/ieee754/ldbl-opt/cimagl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/cimagl.c> -long_double_symbol (libm, __cimagl, cimagl); diff --git a/sysdeps/ieee754/ldbl-opt/conj.c b/sysdeps/ieee754/ldbl-opt/conj.c deleted file mode 100644 index e4edade..0000000 --- a/sysdeps/ieee754/ldbl-opt/conj.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#include <math/conj.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __conj, conjl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/conjl.c b/sysdeps/ieee754/ldbl-opt/conjl.c deleted file mode 100644 index c98e0ed..0000000 --- a/sysdeps/ieee754/ldbl-opt/conjl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/conjl.c> -long_double_symbol (libm, __conjl, conjl); diff --git a/sysdeps/ieee754/ldbl-opt/creal.c b/sysdeps/ieee754/ldbl-opt/creal.c deleted file mode 100644 index 0d1c93e..0000000 --- a/sysdeps/ieee754/ldbl-opt/creal.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#include <math/creal.c> -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __creal, creall, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/creall.c b/sysdeps/ieee754/ldbl-opt/creall.c deleted file mode 100644 index 68fedd4..0000000 --- a/sysdeps/ieee754/ldbl-opt/creall.c +++ /dev/null @@ -1,6 +0,0 @@ -#include <complex.h> -#include <math_ldbl_opt.h> -#undef weak_alias -#define weak_alias(n,a) -#include <math/creall.c> -long_double_symbol (libm, __creall, creall); diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h new file mode 100644 index 0000000..8cb5694 --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h @@ -0,0 +1,58 @@ +/* Overrides for ldbl-opt versioning for double types. + Copyright (C) 2016 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> + +#define LDOUBLE_cabsl_libm_version GLIBC_2_1 +#define LDOUBLE_cargl_libm_version GLIBC_2_1 +#define LDOUBLE_cimagl_libm_version GLIBC_2_1 +#define LDOUBLE_conjl_libm_version GLIBC_2_1 +#define LDOUBLE_creall_libm_version GLIBC_2_1 +#define LDOUBLE_cacosl_libm_version GLIBC_2_1 +#define LDOUBLE_cacoshl_libm_version GLIBC_2_1 +#define LDOUBLE_ccosl_libm_version GLIBC_2_1 +#define LDOUBLE_ccoshl_libm_version GLIBC_2_1 +#define LDOUBLE_casinl_libm_version GLIBC_2_1 +#define LDOUBLE_csinl_libm_version GLIBC_2_1 +#define LDOUBLE_casinhl_libm_version GLIBC_2_1 +#define LDOUBLE_csinhl_libm_version GLIBC_2_1 +#define LDOUBLE_catanl_libm_version GLIBC_2_1 +#define LDOUBLE_catanhl_libm_version GLIBC_2_1 +#define LDOUBLE_ctanl_libm_version GLIBC_2_1 +#define LDOUBLE_ctanhl_libm_version GLIBC_2_1 +#define LDOUBLE_cexpl_libm_version GLIBC_2_1 +#define LDOUBLE_clogl_libm_version GLIBC_2_1 +#define LDOUBLE_cprojl_libm_version GLIBC_2_1 +#define LDOUBLE_csqrtl_libm_version GLIBC_2_1 +#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 compat symbols for long double on platforms + where it was not always a distinct type. */ +#define M_LIBM_NEED_COMPAT(f) \ + LONG_DOUBLE_COMPAT (libm, LDOUBLE_ ## f ## l_libm_version) + +#define declare_mgen_libm_compat(from, to) \ + compat_symbol (libm, from, to ## l, \ + LDOUBLE_ ## to ## l_libm_version); + +#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 new file mode 100644 index 0000000..d2af4bb --- /dev/null +++ b/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h @@ -0,0 +1,29 @@ +/* Overrides for ldbl-opt versioning for long double types. + Copyright (C) 2016 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_LDOUBLE + +#include <math_ldbl_opt.h> + +/* Use properly versioned symbols for long double on platforms where + it was not always a distinct type. */ +#define declare_mgen_alias(from, to) \ + long_double_symbol (libm, from ## l, to ## l); + +#include_next <math-type-macros-ldouble.h> +#endif |