diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-05-02 12:00:36 -0500 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-05-05 13:30:16 -0500 |
commit | 19c4bec0f43599eecc2f32de96ae179cd7d64053 (patch) | |
tree | 26047ede88c1c4231207e887b5ee88de9c60faff /sysdeps/powerpc/powerpc64/multiarch/strlen.c | |
parent | 7776e6692fe19553dafcb918df467aed522eea8d (diff) | |
download | glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.tar glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.tar.gz glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.tar.bz2 glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.zip |
PowerPC: ifunc improvement for internal calls
This patch changes de default symbol redirection for internal call of
memcpy, memset, memchr, and strlen to the IFUNC resolved ones. The
performance improvement is noticeable in algorithms that uses these
symbols extensible, like the regex functions.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/multiarch/strlen.c')
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/strlen.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c index 6574696443..d2c26e9a9c 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c @@ -17,15 +17,25 @@ <http://www.gnu.org/licenses/>. */ #if defined SHARED && !defined NOT_IN_libc +/* Redefine strlen so that the compiler won't complain about the type + mismatch with the IFUNC selector in strong_alias, below. */ +# undef strlen +# define strlen __redirect_strlen # include <string.h> # include <shlib-compat.h> # include "init-arch.h" -extern __typeof (strlen) __strlen_ppc attribute_hidden; -extern __typeof (strlen) __strlen_power7 attribute_hidden; +extern __typeof (__redirect_strlen) __libc_strlen; -libc_ifunc (strlen, +extern __typeof (__redirect_strlen) __strlen_ppc attribute_hidden; +extern __typeof (__redirect_strlen) __strlen_power7 attribute_hidden; + +libc_ifunc (__libc_strlen, (hwcap & PPC_FEATURE_HAS_VSX) ? __strlen_power7 : __strlen_ppc); + +#undef strlen +strong_alias (__libc_strlen, strlen) +libc_hidden_ver (__libc_strlen, strlen) #endif |