diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-04-15 08:11:05 -0500 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-04-16 08:53:57 -0500 |
commit | 462bf827feb84f9d66651aa2e976a5bfb2e00e1a (patch) | |
tree | 6724eb5415cd8f5bd1192d93d49eeb4b80216a08 | |
parent | f0e2c9eae9ccf2867d4c25d40428ecb4aa98d7d7 (diff) | |
download | glibc-462bf827feb84f9d66651aa2e976a5bfb2e00e1a.tar.gz glibc-462bf827feb84f9d66651aa2e976a5bfb2e00e1a.tar.xz glibc-462bf827feb84f9d66651aa2e976a5bfb2e00e1a.zip |
PowerPC: lrint/lrintf multilib for PowerPC32
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile | 3 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-power6x.S (renamed from sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S) | 17 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-ppc32.S | 13 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint.c | 52 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrintf.c | 1 |
5 files changed, 70 insertions, 16 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile index 0ee4c9f8d7..59ccf4fae1 100644 --- a/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/Makefile @@ -24,7 +24,8 @@ libm-sysdep_routines += s_llrintf-power6 s_llrintf-power4 s_llrintf-c \ s_roundf-power5+ s_roundf-ppc32 \ s_trunc-power5+ s_trunc-ppc32 \ s_truncf-power5+ s_truncf-ppc32 \ - s_lround-power6x s_lround-power5+ s_lround-ppc32 + s_lround-power6x s_lround-power5+ s_lround-ppc32 \ + s_lrint-power6x s_lrint-ppc32 CFLAGS-s_llround.c = -fno-builtin-llroundf endif diff --git a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-power6x.S index d0cc159312..f7528956cf 100644 --- a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-power6x.S @@ -21,21 +21,8 @@ .machine "power6" /* long int[r3] __lrint (double x[fp1]) */ -ENTRY (__lrint) +ENTRY (__lrint_power6x) fctiw fp13,fp1 mftgpr r3,fp13 blr - END (__lrint) - -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __lrintf) -weak_alias (__lrint, lrintf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif +END (__lrint_power6x) diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-ppc32.S b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-ppc32.S new file mode 100644 index 0000000000..145877dbf6 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint-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 __lrint __lrint_ppc32 + +#include <sysdeps/powerpc/powerpc32/fpu/s_lrint.S> diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint.c b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint.c new file mode 100644 index 0000000000..99631c5046 --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrint.c @@ -0,0 +1,52 @@ +/* Multiple versions of s_lrint. + 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/>. */ + +/* Redefine lrintf/__lrintf so that compiler won't complain abouti + the type mismatch with the IFUNC selector in strong_alias/weak_alias + below. */ +#undef lrintf +#define lrintf __redirect_lrintf +#undef __lrintf +#define __lrintf __redirect___lrintf +#include <math.h> +#undef lrintf +#undef __lrintf +#include <math_ldbl_opt.h> +#include <shlib-compat.h> +#include "init-arch.h" + +extern __typeof (__lrint) __lrint_ppc32 attribute_hidden; +extern __typeof (__lrint) __lrint_power6x attribute_hidden; + +libc_ifunc (__lrint, + (hwcap & PPC_FEATURE_POWER6_EXT) ? + __lrint_power6x + : __lrint_ppc32); + +weak_alias (__lrint, lrint) + +weak_alias (__lrint, lrintf) +strong_alias(__lrint, __lrintf) + +#ifdef NO_LONG_DOUBLE +weak_alias (__lrint, lrintl) +strong_alias (__lrint, __lrintl) +#endif +#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) +compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); +#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrintf.c b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrintf.c new file mode 100644 index 0000000000..659084e83a --- /dev/null +++ b/sysdeps/powerpc/powerpc32/fpu/multiarch/s_lrintf.c @@ -0,0 +1 @@ +/* s_lrintf.c is in s_lrint.c */ |