diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-04-14 07:48:53 -0500 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-04-14 18:21:10 -0500 |
commit | 2bff5a09d22122b699faf29d798d757ae8f6151c (patch) | |
tree | e1e27199e8f4a8c112683d368219105d8b224191 | |
parent | 50a23bc73af32aa6d0e10e0041c6cf57c0c81830 (diff) | |
download | glibc-2bff5a09d22122b699faf29d798d757ae8f6151c.tar.gz glibc-2bff5a09d22122b699faf29d798d757ae8f6151c.tar.xz glibc-2bff5a09d22122b699faf29d798d757ae8f6151c.zip |
PowerPC: ceil/ceilf multilib for PowerPC32
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S (renamed from sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S) | 14 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S | 13 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c | 40 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S (renamed from sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S) | 7 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-ppc32.S | 9 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c | 32 |
7 files changed, 101 insertions, 18 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile index 9fb2528e21..aaafdbea85 100644 --- a/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile @@ -15,7 +15,9 @@ libm-sysdep_routines += s_llrintf-power6 s_llrintf-power4 s_llrintf-c \ s_isnan-ppc32 \ s_isnanf-power7 s_isnanf-power6 s_isnanf-power5 \ s_isnanf-ppc32 \ - s_copysign-power6 s_copysign-ppc32 + s_copysign-power6 s_copysign-ppc32 \ + s_ceil-power5+ s_ceil-ppc32 \ + s_ceilf-power5+ s_ceilf-ppc32 CFLAGS-s_llround.c = -fno-builtin-llroundf endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S index 0469831ee2..6f76b2f36a 100644 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S @@ -20,17 +20,7 @@ #include <math_ldbl_opt.h> .machine "power5" -EALIGN (__ceil, 4, 0) +EALIGN (__ceil_power5plus, 4, 0) frip fp1, fp1 blr - END (__ceil) - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -weak_alias (__ceil, ceill) -strong_alias (__ceil, __ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0) -#endif +END (__ceil_power5plus) diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S new file mode 100644 index 0000000000..d69b921b70 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S @@ -0,0 +1,13 @@ +#include <sysdep.h> +#include <math_ldbl_opt.h> + +#undef weak_alias +#define weak_alias(a,b) +#undef strong_alias +#define strong_alias(a,b) +#undef compat_symbol +#define compat_symbol(a,b,c,d) + +#define __ceil __ceil_ppc32 + +#include <sysdeps/powerpc/powerpc32/fpu/s_ceil.S> diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c new file mode 100644 index 0000000000..2c9a76eeda --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c @@ -0,0 +1,40 @@ +/* Multiple versions of s_ceil. + Copyright (C) 2013 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/>. */ + +#include <math.h> +#include <math_ldbl_opt.h> +#include <shlib-compat.h> +#include "init-arch.h" + +extern __typeof (__ceil) __ceil_ppc32 attribute_hidden; +extern __typeof (__ceil) __ceil_power5plus attribute_hidden; + +libc_ifunc (__ceil, + (hwcap & PPC_FEATURE_POWER5_PLUS) + ? __ceil_power5plus + : __ceil_ppc32); + +weak_alias (__ceil, ceil) + +#ifdef NO_LONG_DOUBLE +strong_alias (__ceil, __ceill) +weak_alias (__ceil, ceill) +#endif +#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) +compat_symbol (libm, __ceil, ceill, GLIBC_2_0); +#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S index 43f74a1794..eef69b43c6 100644 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S @@ -19,11 +19,8 @@ #include <sysdep.h> .machine "power5" -EALIGN (__ceilf, 4, 0) +EALIGN (__ceilf_power5plus, 4, 0) frip fp1, fp1 /* The rounding instructions are double. */ frsp fp1, fp1 /* But we need to set ooverflow for float. */ blr - END (__ceilf) - -weak_alias (__ceilf, ceilf) - +END (__ceilf_power5plus) diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-ppc32.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-ppc32.S new file mode 100644 index 0000000000..5d81bb8141 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-ppc32.S @@ -0,0 +1,9 @@ +#include <sysdep.h> +#include <math_ldbl_opt.h> + +#undef weak_alias +#define weak_alias(a,b) + +#define __ceilf __ceilf_ppc32 + +#include <sysdeps/powerpc/powerpc32/fpu/s_ceilf.S> diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c new file mode 100644 index 0000000000..21d4267889 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c @@ -0,0 +1,32 @@ +/* Multiple versions of s_ceilf. + Copyright (C) 2013 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/>. */ + +#include <math.h> +#include <math_ldbl_opt.h> +#include <shlib-compat.h> +#include "init-arch.h" + +extern __typeof (__ceilf) __ceilf_ppc32 attribute_hidden; +extern __typeof (__ceilf) __ceilf_power5plus attribute_hidden; + +libc_ifunc (__ceilf, + (hwcap & PPC_FEATURE_POWER5_PLUS) + ? __ceilf_power5plus + : __ceilf_ppc32); + +weak_alias (__ceilf, ceilf) |