From 2bff5a09d22122b699faf29d798d757ae8f6151c Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Sun, 14 Apr 2013 07:48:53 -0500 Subject: PowerPC: ceil/ceilf multilib for PowerPC32 --- sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile | 4 ++- .../powerpc32/fpu/multiarch/s_ceil-power5+.S | 26 ++++++++++++++ .../powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S | 13 +++++++ sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c | 40 ++++++++++++++++++++++ .../powerpc32/fpu/multiarch/s_ceilf-power5+.S | 26 ++++++++++++++ .../powerpc32/fpu/multiarch/s_ceilf-ppc32.S | 9 +++++ sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c | 32 +++++++++++++++++ sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S | 36 ------------------- sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S | 29 ---------------- 9 files changed, 149 insertions(+), 66 deletions(-) create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-ppc32.S create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil.c create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-ppc32.S create mode 100644 sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf.c delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S 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/fpu/multiarch/s_ceil-power5+.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S new file mode 100644 index 0000000000..6f76b2f36a --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceil-power5+.S @@ -0,0 +1,26 @@ +/* ceil function. PowerPC32/power5+ version. + Copyright (C) 2006-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 + . */ + +#include +#include + + .machine "power5" +EALIGN (__ceil_power5plus, 4, 0) + frip fp1, fp1 + blr +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 +#include + +#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 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 + . */ + +#include +#include +#include +#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/fpu/multiarch/s_ceilf-power5+.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S new file mode 100644 index 0000000000..eef69b43c6 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_ceilf-power5+.S @@ -0,0 +1,26 @@ +/* ceilf function. PowerPC32/power5+ version. + Copyright (C) 2006-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 + . */ + +#include + + .machine "power5" +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_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 +#include + +#undef weak_alias +#define weak_alias(a,b) + +#define __ceilf __ceilf_ppc32 + +#include 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 + . */ + +#include +#include +#include +#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) diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S deleted file mode 100644 index 0469831ee2..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S +++ /dev/null @@ -1,36 +0,0 @@ -/* ceil function. PowerPC32/power5+ version. - Copyright (C) 2006-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 - . */ - -#include -#include - - .machine "power5" -EALIGN (__ceil, 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 diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S deleted file mode 100644 index 43f74a1794..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S +++ /dev/null @@ -1,29 +0,0 @@ -/* ceilf function. PowerPC32/power5+ version. - Copyright (C) 2006-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 - . */ - -#include - - .machine "power5" -EALIGN (__ceilf, 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) - -- cgit 1.4.1