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 | |
parent | 1f645571d2db9008b3cd3d5acb9ff93357864283 (diff) | |
download | glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.tar.gz glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.tar.xz glibc-ce6698ea0aea863bbfb4e932494406789e4e36c1.zip |
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')
-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 a181de2fa8..0000000000 --- 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 b861633544..0000000000 --- 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 2ed358113c..0000000000 --- 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 952dc60664..0000000000 --- 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 f8052581b3..0000000000 --- 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 112365e3ae..0000000000 --- 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 e4edade05e..0000000000 --- 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 c98e0ed1c3..0000000000 --- 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 0d1c93e640..0000000000 --- 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 68fedd4ccd..0000000000 --- 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 0000000000..8cb569454e --- /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 0000000000..d2af4bbcc0 --- /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 |