mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
i686: Implement IFUNC selectors in C
* sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add bcopy-ia32, bzero-ia32, rawmemchr-ia32 memchr-ia32, memcmp-ia32, memcpy-ia32, memmove-ia32, mempcpy-ia32, memset-ia32, strcat-ia32, strchr-ia32, strrchr-ia32, strcpy-ia32, strcmp-ia32, strcspn-ia32, strpbrk-ia32, strspn-ia32, strlen-ia32, stpcpy-ia32, stpncpy-ia32, memcpy_chk-nonshared, mempcpy_chk-nonshared, memmove_chk-nonshared and memset_chk-nonshared * sysdeps/i386/i686/multiarch/bcopy-ia32.S: New file. * sysdeps/i386/i686/multiarch/bcopy.c: Likewise. * sysdeps/i386/i686/multiarch/bzero-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/bzero.c: Likewise. * sysdeps/i386/i686/multiarch/ifunc-memmove.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-memset.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-sse2-bsf.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-sse2-ssse3.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-sse2.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-sse4_2.h: Likewise. * sysdeps/i386/i686/multiarch/ifunc-ssse3-sse4_2.h: Likewise. * sysdeps/i386/i686/multiarch/memchr-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/memchr.c: Likewise. * sysdeps/i386/i686/multiarch/memcmp-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/memcmp.c: Likewise. * sysdeps/i386/i686/multiarch/memcpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/memcpy.c: Likewise. * sysdeps/i386/i686/multiarch/memcpy_chk-nonshared.S: Likewise. * sysdeps/i386/i686/multiarch/memcpy_chk.c: Likewise. * sysdeps/i386/i686/multiarch/memmove-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/memmove.c: Likewise. * sysdeps/i386/i686/multiarch/memmove_chk-nonshared.S: Likewise. * sysdeps/i386/i686/multiarch/memmove_chk.c: Likewise. * sysdeps/i386/i686/multiarch/mempcpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/mempcpy.c: Likewise. * sysdeps/i386/i686/multiarch/mempcpy_chk-nonshared.S: Likewise. * sysdeps/i386/i686/multiarch/mempcpy_chk.c: Likewise. * sysdeps/i386/i686/multiarch/memrchr.c: Likewise. * sysdeps/i386/i686/multiarch/memset-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/memset.c: Likewise. * sysdeps/i386/i686/multiarch/memset_chk-nonshared.S: Likewise. * sysdeps/i386/i686/multiarch/rawmemchr-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/rawmemchr.c: Likewise. * sysdeps/i386/i686/multiarch/stpcpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/stpcpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/stpcpy.c: Likewise. * sysdeps/i386/i686/multiarch/stpncpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/stpncpy.c: Likewise. * sysdeps/i386/i686/multiarch/strcasecmp.c: Likewise. * sysdeps/i386/i686/multiarch/strcasecmp_l.c: Likewise. * sysdeps/i386/i686/multiarch/strcat-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strcat.c: Likewise. * sysdeps/i386/i686/multiarch/strchr-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strchr.c: Likewise. * sysdeps/i386/i686/multiarch/strcmp-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strcmp.c: Likewise. * sysdeps/i386/i686/multiarch/strcpy-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strcpy.c: Likewise. * sysdeps/i386/i686/multiarch/strcspn-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strcspn.c: Likewise. * sysdeps/i386/i686/multiarch/strlen-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strlen.c: Likewise. * sysdeps/i386/i686/multiarch/strncase.c: Likewise. * sysdeps/i386/i686/multiarch/strncase_l.c: Likewise. * sysdeps/i386/i686/multiarch/strncat.c: Likewise. * sysdeps/i386/i686/multiarch/strncmp.c: Likewise. * sysdeps/i386/i686/multiarch/strncpy.c: Likewise. * sysdeps/i386/i686/multiarch/strnlen.c: Likewise. * sysdeps/i386/i686/multiarch/strpbrk-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strpbrk.c: Likewise. * sysdeps/i386/i686/multiarch/strrchr-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strrchr.c: Likewise. * sysdeps/i386/i686/multiarch/strspn-ia32.S: Likewise. * sysdeps/i386/i686/multiarch/strspn.c: Likewise. * sysdeps/i386/i686/multiarch/wcschr.c: Likewise. * sysdeps/i386/i686/multiarch/wcscmp.c: Likewise. * sysdeps/i386/i686/multiarch/wcscpy.c: Likewise. * sysdeps/i386/i686/multiarch/wcslen.c: Likewise. * sysdeps/i386/i686/multiarch/wcsrchr.c: Likewise. * sysdeps/i386/i686/multiarch/wmemcmp.c: Likewise. * sysdeps/i386/i686/multiarch/bcopy.S: Removed. * sysdeps/i386/i686/multiarch/bzero.S: Likewise. * sysdeps/i386/i686/multiarch/memchr.S: Likewise. * sysdeps/i386/i686/multiarch/memcmp.S: Likewise. * sysdeps/i386/i686/multiarch/memcpy.S: Likewise. * sysdeps/i386/i686/multiarch/memcpy_chk.S: Likewise. * sysdeps/i386/i686/multiarch/memmove.S: Likewise. * sysdeps/i386/i686/multiarch/memmove_chk.S: Likewise. * sysdeps/i386/i686/multiarch/mempcpy.S: Likewise. * sysdeps/i386/i686/multiarch/mempcpy_chk.S: Likewise. * sysdeps/i386/i686/multiarch/memrchr.S: Likewise. * sysdeps/i386/i686/multiarch/memset.S: Likewise. * sysdeps/i386/i686/multiarch/memset_chk.S: Likewise. * sysdeps/i386/i686/multiarch/rawmemchr.S: Likewise. * sysdeps/i386/i686/multiarch/stpcpy.S: Likewise. * sysdeps/i386/i686/multiarch/stpncpy.S: Likewise. * sysdeps/i386/i686/multiarch/strcasecmp.S: Likewise. * sysdeps/i386/i686/multiarch/strcasecmp_l.S: Likewise. * sysdeps/i386/i686/multiarch/strcat.S: Likewise. * sysdeps/i386/i686/multiarch/strcmp.S: Likewise. * sysdeps/i386/i686/multiarch/strcpy.S: Likewise. * sysdeps/i386/i686/multiarch/strcspn.S: Likewise. * sysdeps/i386/i686/multiarch/strlen.S: Likewise. * sysdeps/i386/i686/multiarch/strncase.S: Likewise. * sysdeps/i386/i686/multiarch/strncase_l.S: Likewise. * sysdeps/i386/i686/multiarch/strncat.S: Likewise. * sysdeps/i386/i686/multiarch/strncmp.S: Likewise. * sysdeps/i386/i686/multiarch/strncpy.S: Likewise. * sysdeps/i386/i686/multiarch/strnlen.S: Likewise. * sysdeps/i386/i686/multiarch/strpbrk.S: Likewise. * sysdeps/i386/i686/multiarch/strrchr.S: Likewise. * sysdeps/i386/i686/multiarch/strspn.S: Likewise. * sysdeps/i386/i686/multiarch/wcschr.S: Likewise. * sysdeps/i386/i686/multiarch/wcscmp.S: Likewise. * sysdeps/i386/i686/multiarch/wcscpy.S: Likewise. * sysdeps/i386/i686/multiarch/wcslen.S: Likewise. * sysdeps/i386/i686/multiarch/wcsrchr.S: Likewise. * sysdeps/i386/i686/multiarch/wmemcmp.S: Likewise.
This commit is contained in:
parent
8537e0f6cf
commit
973da22a35
119
ChangeLog
119
ChangeLog
@ -1,3 +1,122 @@
|
||||
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add
|
||||
bcopy-ia32, bzero-ia32, rawmemchr-ia32 memchr-ia32,
|
||||
memcmp-ia32, memcpy-ia32, memmove-ia32, mempcpy-ia32,
|
||||
memset-ia32, strcat-ia32, strchr-ia32, strrchr-ia32,
|
||||
strcpy-ia32, strcmp-ia32, strcspn-ia32, strpbrk-ia32,
|
||||
strspn-ia32, strlen-ia32, stpcpy-ia32, stpncpy-ia32,
|
||||
memcpy_chk-nonshared, mempcpy_chk-nonshared,
|
||||
memmove_chk-nonshared and memset_chk-nonshared
|
||||
* sysdeps/i386/i686/multiarch/bcopy-ia32.S: New file.
|
||||
* sysdeps/i386/i686/multiarch/bcopy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/bzero-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/bzero.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-memmove.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-memset.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-sse2-bsf.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-sse2-ssse3.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-sse2.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-sse4_2.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/ifunc-ssse3-sse4_2.h: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memchr-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcmp-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy_chk-nonshared.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy_chk.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove_chk-nonshared.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove_chk.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy_chk-nonshared.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy_chk.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memrchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memset-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memset.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memset_chk-nonshared.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/rawmemchr-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/rawmemchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpcpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpcpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpcpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpncpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpncpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcasecmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcasecmp_l.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcat-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcat.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strchr-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcmp-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcpy-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcspn-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcspn.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strlen-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strlen.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncase.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncase_l.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncat.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strnlen.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strpbrk-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strpbrk.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strrchr-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strrchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strspn-ia32.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strspn.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcschr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcscmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcscpy.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcslen.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcsrchr.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wmemcmp.c: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/bcopy.S: Removed.
|
||||
* sysdeps/i386/i686/multiarch/bzero.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memchr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcmp.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memcpy_chk.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memmove_chk.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/mempcpy_chk.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memrchr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memset.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/memset_chk.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/rawmemchr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpcpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/stpncpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcasecmp.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcasecmp_l.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcat.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcmp.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strcspn.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strlen.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncase.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncase_l.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncat.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncmp.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strncpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strnlen.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strpbrk.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strrchr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/strspn.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcschr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcscmp.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcscpy.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcslen.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wcsrchr.S: Likewise.
|
||||
* sysdeps/i386/i686/multiarch/wmemcmp.S: Likewise.
|
||||
|
||||
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines)
|
||||
|
@ -24,7 +24,13 @@ sysdep_routines += bzero-sse2 memset-sse2 memcpy-ssse3 mempcpy-ssse3 \
|
||||
strcasecmp_l-sse4 strncase_l-sse4 \
|
||||
bcopy-sse2-unaligned memcpy-sse2-unaligned \
|
||||
mempcpy-sse2-unaligned memmove-sse2-unaligned \
|
||||
strcspn-c strpbrk-c strspn-c
|
||||
strcspn-c strpbrk-c strspn-c \
|
||||
bcopy-ia32 bzero-ia32 rawmemchr-ia32 \
|
||||
memchr-ia32 memcmp-ia32 memcpy-ia32 memmove-ia32 \
|
||||
mempcpy-ia32 memset-ia32 strcat-ia32 strchr-ia32 \
|
||||
strrchr-ia32 strcpy-ia32 strcmp-ia32 strcspn-ia32 \
|
||||
strpbrk-ia32 strspn-ia32 strlen-ia32 stpcpy-ia32 \
|
||||
stpncpy-ia32
|
||||
CFLAGS-varshift.c += -msse4
|
||||
CFLAGS-strcspn-c.c += -msse4
|
||||
CFLAGS-strpbrk-c.c += -msse4
|
||||
@ -42,3 +48,8 @@ libm-sysdep_routines += s_fma-fma s_fmaf-fma
|
||||
CFLAGS-s_fma-fma.c += -mavx -mfpmath=sse
|
||||
CFLAGS-s_fmaf-fma.c += -mavx -mfpmath=sse
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),debug)
|
||||
sysdep_routines += memcpy_chk-nonshared mempcpy_chk-nonshared \
|
||||
memmove_chk-nonshared memset_chk-nonshared
|
||||
endif
|
||||
|
20
sysdeps/i386/i686/multiarch/bcopy-ia32.S
Normal file
20
sysdeps/i386/i686/multiarch/bcopy-ia32.S
Normal file
@ -0,0 +1,20 @@
|
||||
/* bcopy optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#define bcopy __bcopy_ia32
|
||||
#include <sysdeps/i386/i686/bcopy.S>
|
@ -1,59 +0,0 @@
|
||||
/* Multiple versions of bcopy
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(bcopy)
|
||||
.type bcopy, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__bcopy_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__bcopy_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__bcopy_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__bcopy_ssse3_rep)
|
||||
2: ret
|
||||
END(bcopy)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __bcopy_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __bcopy_ia32; \
|
||||
.hidden __bcopy_ia32; \
|
||||
__bcopy_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __bcopy_ia32, .-__bcopy_ia32
|
||||
|
||||
#endif
|
||||
|
||||
#include "../bcopy.S"
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wcsrchr
|
||||
/* Multiple versions of bcopy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,18 +17,14 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(wcsrchr)
|
||||
.type wcsrchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wcsrchr_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wcsrchr_sse2)
|
||||
2: ret
|
||||
END(wcsrchr)
|
||||
# define bcopy __redirect_bcopy
|
||||
# include <string.h>
|
||||
# undef bcopy
|
||||
|
||||
# define SYMBOL_NAME bcopy
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_bcopy, bcopy, IFUNC_SELECTOR ());
|
||||
#endif
|
38
sysdeps/i386/i686/multiarch/bzero-ia32.S
Normal file
38
sysdeps/i386/i686/multiarch/bzero-ia32.S
Normal file
@ -0,0 +1,38 @@
|
||||
/* bzero optimized for i686.
|
||||
Copyright (C) 2017 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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define __bzero __bzero_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI___bzero; __GI___bzero = __bzero
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
|
||||
# include <sysdeps/i386/i686/bzero.S>
|
||||
#endif
|
@ -1,62 +0,0 @@
|
||||
/* Multiple versions of bzero
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__bzero)
|
||||
.type __bzero, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__bzero_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX ( __bzero_sse2)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__bzero_sse2_rep)
|
||||
2: ret
|
||||
END(__bzero)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __bzero_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __bzero_ia32; \
|
||||
.hidden __bzero_ia32; \
|
||||
__bzero_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __bzero_ia32, .-__bzero_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI___bzero; __GI___bzero = __bzero_ia32
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "../bzero.S"
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wcschr
|
||||
/* Multiple versions of bzero.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,19 +17,16 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__wcschr)
|
||||
.type wcschr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wcschr_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wcschr_sse2)
|
||||
2: ret
|
||||
END(__wcschr)
|
||||
weak_alias (__wcschr, wcschr)
|
||||
# define bzero __redirect_bzero
|
||||
# include <string.h>
|
||||
# undef bzero
|
||||
|
||||
# define SYMBOL_NAME bzero
|
||||
# include "ifunc-memset.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_bzero, __bzero, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__bzero, bzero)
|
||||
#endif
|
45
sysdeps/i386/i686/multiarch/ifunc-memmove.h
Normal file
45
sysdeps/i386/i686/multiarch/ifunc-memmove.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* Common definition for memmove/memmove_chk ifunc selections.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned)
|
||||
attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3_rep) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_ARCH_P (cpu_features, Fast_Unaligned_Load))
|
||||
return OPTIMIZE (sse2_unaligned);
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSSE3))
|
||||
{
|
||||
if (CPU_FEATURES_ARCH_P (cpu_features, Fast_Rep_String))
|
||||
return OPTIMIZE (ssse3_rep);
|
||||
|
||||
return OPTIMIZE (ssse3);
|
||||
}
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
40
sysdeps/i386/i686/multiarch/ifunc-memset.h
Normal file
40
sysdeps/i386/i686/multiarch/ifunc-memset.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* Common definition for memset/memset_chk ifunc selections.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_rep) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
|
||||
{
|
||||
if (CPU_FEATURES_ARCH_P (cpu_features, Fast_Rep_String))
|
||||
return OPTIMIZE (sse2_rep);
|
||||
|
||||
return OPTIMIZE (sse2);
|
||||
}
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
40
sysdeps/i386/i686/multiarch/ifunc-sse2-bsf.h
Normal file
40
sysdeps/i386/i686/multiarch/ifunc-sse2-bsf.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* Common definition for ifunc selections optimized with SSE2 and BSF.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_bsf) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
|
||||
{
|
||||
if (CPU_FEATURES_ARCH_P (cpu_features, Slow_BSF))
|
||||
return OPTIMIZE (sse2);
|
||||
|
||||
return OPTIMIZE (sse2_bsf);
|
||||
}
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
40
sysdeps/i386/i686/multiarch/ifunc-sse2-ssse3.h
Normal file
40
sysdeps/i386/i686/multiarch/ifunc-sse2-ssse3.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* Common definition for ifunc selections optimized with SSE2 and
|
||||
SSSE3.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE2)
|
||||
&& CPU_FEATURES_ARCH_P (cpu_features, Fast_Rep_String))
|
||||
return OPTIMIZE (sse2);
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSSE3))
|
||||
return OPTIMIZE (ssse3);
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
34
sysdeps/i386/i686/multiarch/ifunc-sse2.h
Normal file
34
sysdeps/i386/i686/multiarch/ifunc-sse2.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* Common definition for ifunc selections optimized with SSE2.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
|
||||
return OPTIMIZE (sse2);
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
34
sysdeps/i386/i686/multiarch/ifunc-sse4_2.h
Normal file
34
sysdeps/i386/i686/multiarch/ifunc-sse4_2.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* Common definition for ifunc selections optimized with SSE4_2.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse42) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE4_2))
|
||||
return OPTIMIZE (sse42);
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
39
sysdeps/i386/i686/multiarch/ifunc-ssse3-sse4_2.h
Normal file
39
sysdeps/i386/i686/multiarch/ifunc-ssse3-sse4_2.h
Normal file
@ -0,0 +1,39 @@
|
||||
/* Common definition for ifunc selections optimized with SSSE3 and
|
||||
SSE4_2.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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 <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (sse4_2) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSE4_2))
|
||||
return OPTIMIZE (sse4_2);
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSSE3))
|
||||
return OPTIMIZE (ssse3);
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
35
sysdeps/i386/i686/multiarch/memchr-ia32.S
Normal file
35
sysdeps/i386/i686/multiarch/memchr-ia32.S
Normal file
@ -0,0 +1,35 @@
|
||||
/* memchr optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define __memchr __memchr_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memchr; __GI_memchr = __memchr
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/memchr.S>
|
@ -1,65 +0,0 @@
|
||||
/* Multiple versions of memchr
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__memchr)
|
||||
.type __memchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 3f
|
||||
|
||||
LOAD_FUNC_GOT_EAX ( __memchr_sse2)
|
||||
ret
|
||||
|
||||
2: LOAD_FUNC_GOT_EAX (__memchr_ia32)
|
||||
ret
|
||||
|
||||
3: LOAD_FUNC_GOT_EAX (__memchr_sse2_bsf)
|
||||
ret
|
||||
END(__memchr)
|
||||
|
||||
weak_alias(__memchr, memchr)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memchr_ia32, @function; \
|
||||
.globl __memchr_ia32; \
|
||||
.p2align 4; \
|
||||
__memchr_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __memchr_ia32, .-__memchr_ia32
|
||||
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memchr; __GI_memchr = __memchr_ia32
|
||||
|
||||
#endif
|
||||
#include "../../memchr.S"
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wcslen
|
||||
/* Multiple versions of memchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,20 +17,16 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__wcslen)
|
||||
.type __wcslen, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wcslen_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wcslen_sse2)
|
||||
2: ret
|
||||
END(__wcslen)
|
||||
# define memchr __redirect_memchr
|
||||
# include <string.h>
|
||||
# undef memchr
|
||||
|
||||
weak_alias(__wcslen, wcslen)
|
||||
# define SYMBOL_NAME memchr
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memchr, __memchr, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__memchr, memchr)
|
||||
#endif
|
35
sysdeps/i386/i686/multiarch/memcmp-ia32.S
Normal file
35
sysdeps/i386/i686/multiarch/memcmp-ia32.S
Normal file
@ -0,0 +1,35 @@
|
||||
/* memcmp optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define memcmp __memcmp_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memcmp; __GI_memcmp = memcmp
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i686/memcmp.S>
|
@ -1,62 +0,0 @@
|
||||
/* Multiple versions of memcmp
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(memcmp)
|
||||
.type memcmp, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memcmp_ia32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcmp_ssse3)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcmp_sse4_2)
|
||||
2: ret
|
||||
END(memcmp)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memcmp_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __memcmp_ia32; \
|
||||
.hidden __memcmp_ia32; \
|
||||
__memcmp_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __memcmp_ia32, .-__memcmp_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memcmp; __GI_memcmp = __memcmp_ia32
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "../memcmp.S"
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of strnlen
|
||||
/* Multiple versions of memcmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,20 +17,16 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__strnlen)
|
||||
.type __strnlen, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strnlen_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strnlen_sse2)
|
||||
2: ret
|
||||
END(__strnlen)
|
||||
# define memcmp __redirect_memcmp
|
||||
# include <string.h>
|
||||
# undef memcmp
|
||||
|
||||
weak_alias(__strnlen, strnlen)
|
||||
# define SYMBOL_NAME memcmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memcmp, memcmp, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (memcmp, bcmp)
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/memcpy-ia32.S
Normal file
31
sysdeps/i386/i686/multiarch/memcpy-ia32.S
Normal file
@ -0,0 +1,31 @@
|
||||
/* memcpy optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define memcpy __memcpy_ia32
|
||||
# define __memcpy_chk __memcpy_chk_ia32
|
||||
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memcpy; __GI_memcpy = memcpy
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i686/memcpy.S>
|
@ -1,78 +0,0 @@
|
||||
/* Multiple versions of memcpy
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. In static binaries we need memcpy before the initialization
|
||||
happened. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
.text
|
||||
ENTRY(memcpy)
|
||||
.type memcpy, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_ssse3_rep)
|
||||
2: ret
|
||||
END(memcpy)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memcpy_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __memcpy_ia32; \
|
||||
.hidden __memcpy_ia32; \
|
||||
__memcpy_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __memcpy_ia32, .-__memcpy_ia32
|
||||
|
||||
# undef ENTRY_CHK
|
||||
# define ENTRY_CHK(name) \
|
||||
.type __memcpy_chk_ia32, @function; \
|
||||
.globl __memcpy_chk_ia32; \
|
||||
.p2align 4; \
|
||||
__memcpy_chk_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END_CHK
|
||||
# define END_CHK(name) \
|
||||
cfi_endproc; .size __memcpy_chk_ia32, .-__memcpy_chk_ia32
|
||||
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memcpy; __GI_memcpy = __memcpy_ia32
|
||||
#endif
|
||||
|
||||
#include "../memcpy.S"
|
32
sysdeps/i386/i686/multiarch/memcpy.c
Normal file
32
sysdeps/i386/i686/multiarch/memcpy.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of memcpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. In static binaries we need memcpy before the initialization
|
||||
happened. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define memcpy __redirect_memcpy
|
||||
# include <string.h>
|
||||
# undef memcpy
|
||||
|
||||
# define SYMBOL_NAME memcpy
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memcpy, memcpy, IFUNC_SELECTOR ());
|
||||
#endif
|
21
sysdeps/i386/i686/multiarch/memcpy_chk-nonshared.S
Normal file
21
sysdeps/i386/i686/multiarch/memcpy_chk-nonshared.S
Normal file
@ -0,0 +1,21 @@
|
||||
/* Non-shared version of memcpy_chk for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc) && !defined SHARED
|
||||
# include <sysdeps/i386/memcpy_chk.S>
|
||||
#endif
|
@ -1,50 +0,0 @@
|
||||
/* Multiple versions of __memcpy_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. There are no multiarch memcpy functions for static binaries.
|
||||
*/
|
||||
#if IS_IN (libc)
|
||||
# ifdef SHARED
|
||||
.text
|
||||
ENTRY(__memcpy_chk)
|
||||
.type __memcpy_chk, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_chk_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_chk_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_chk_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memcpy_chk_ssse3_rep)
|
||||
2: ret
|
||||
END(__memcpy_chk)
|
||||
# else
|
||||
# include "../memcpy_chk.S"
|
||||
# endif
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/memcpy_chk.c
Normal file
31
sysdeps/i386/i686/multiarch/memcpy_chk.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Multiple versions of __memcpy_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if IS_IN (libc) && defined SHARED
|
||||
# define __memcpy_chk __redirect_memcpy_chk
|
||||
# include <string.h>
|
||||
# undef __memcpy_chk
|
||||
|
||||
# define SYMBOL_NAME memcpy_chk
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memcpy_chk, __memcpy_chk,
|
||||
IFUNC_SELECTOR ());
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/memmove-ia32.S
Normal file
31
sysdeps/i386/i686/multiarch/memmove-ia32.S
Normal file
@ -0,0 +1,31 @@
|
||||
/* memmove optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define memmove __memmove_ia32
|
||||
# define __memmove_chk __memmove_chk_ia32
|
||||
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memmove; __GI_memmove = memmove
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i686/memmove.S>
|
@ -1,89 +0,0 @@
|
||||
/* Multiple versions of memmove
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(memmove)
|
||||
.type memmove, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memmove_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_ssse3_rep)
|
||||
2: ret
|
||||
END(memmove)
|
||||
|
||||
# ifdef SHARED
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memmove_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __memmove_ia32; \
|
||||
.hidden __memmove_ia32; \
|
||||
__memmove_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# else
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memmove_ia32, @function; \
|
||||
.globl __memmove_ia32; \
|
||||
.p2align 4; \
|
||||
__memmove_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# endif
|
||||
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __memmove_ia32, .-__memmove_ia32
|
||||
|
||||
# undef ENTRY_CHK
|
||||
# define ENTRY_CHK(name) \
|
||||
.type __memmove_chk_ia32, @function; \
|
||||
.globl __memmove_chk_ia32; \
|
||||
.p2align 4; \
|
||||
__memmove_chk_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END_CHK
|
||||
# define END_CHK(name) \
|
||||
cfi_endproc; .size __memmove_chk_ia32, .-__memmove_chk_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memmove; __GI_memmove = __memmove_ia32
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "../memmove.S"
|
32
sysdeps/i386/i686/multiarch/memmove.c
Normal file
32
sysdeps/i386/i686/multiarch/memmove.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of memmove.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. In static binaries we need memmove before the initialization
|
||||
happened. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define memmove __redirect_memmove
|
||||
# include <string.h>
|
||||
# undef memmove
|
||||
|
||||
# define SYMBOL_NAME memmove
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memmove, memmove, IFUNC_SELECTOR ());
|
||||
#endif
|
21
sysdeps/i386/i686/multiarch/memmove_chk-nonshared.S
Normal file
21
sysdeps/i386/i686/multiarch/memmove_chk-nonshared.S
Normal file
@ -0,0 +1,21 @@
|
||||
/* Non-shared version of memmmove_chk for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc) && !defined SHARED
|
||||
# include <sysdeps/i386/memmove_chk.S>
|
||||
#endif
|
@ -1,94 +0,0 @@
|
||||
/* Multiple versions of __memmove_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__memmove_chk)
|
||||
.type __memmove_chk, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memmove_chk_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_chk_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_chk_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memmove_chk_ssse3_rep)
|
||||
2: ret
|
||||
END(__memmove_chk)
|
||||
|
||||
# ifndef SHARED
|
||||
.type __memmove_chk_sse2_unaligned, @function
|
||||
.p2align 4;
|
||||
__memmove_chk_sse2_unaligned:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memmove_sse2_unaligned
|
||||
cfi_endproc
|
||||
.size __memmove_chk_sse2_unaligned, .-__memmove_chk_sse2_unaligned
|
||||
|
||||
.type __memmove_chk_ssse3, @function
|
||||
.p2align 4;
|
||||
__memmove_chk_ssse3:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memmove_ssse3
|
||||
cfi_endproc
|
||||
.size __memmove_chk_ssse3, .-__memmove_chk_ssse3
|
||||
|
||||
.type __memmove_chk_ssse3_rep, @function
|
||||
.p2align 4;
|
||||
__memmove_chk_ssse3_rep:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memmove_ssse3_rep
|
||||
cfi_endproc
|
||||
.size __memmove_chk_ssse3_rep, .-__memmove_chk_ssse3_rep
|
||||
|
||||
.type __memmove_chk_ia32, @function
|
||||
.p2align 4;
|
||||
__memmove_chk_ia32:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memmove_ia32
|
||||
cfi_endproc
|
||||
.size __memmove_chk_ia32, .-__memmove_chk_ia32
|
||||
# endif
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/memmove_chk.c
Normal file
31
sysdeps/i386/i686/multiarch/memmove_chk.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Multiple versions of __memmove_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if IS_IN (libc) && defined SHARED
|
||||
# define __memmove_chk __redirect_memmove_chk
|
||||
# include <string.h>
|
||||
# undef __memmove_chk
|
||||
|
||||
# define SYMBOL_NAME memmove_chk
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memmove_chk, __memmove_chk,
|
||||
IFUNC_SELECTOR ());
|
||||
#endif
|
@ -1,7 +1,5 @@
|
||||
/* Multiple versions of strchr
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
/* mempcpy optimized for i686.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,40 +16,22 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define __mempcpy __mempcpy_ia32
|
||||
# define __mempcpy_chk __mempcpy_chk_ia32
|
||||
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(strchr)
|
||||
.type strchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strchr_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strchr_sse2_bsf)
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strchr_sse2)
|
||||
2: ret
|
||||
END(strchr)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __strchr_ia32, @function; \
|
||||
.globl __strchr_ia32; \
|
||||
.p2align 4; \
|
||||
__strchr_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __strchr_ia32, .-__strchr_ia32
|
||||
# undef libc_hidden_def
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___mempcpy; __GI___mempcpy = __mempcpy
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strchr; __GI_strchr = __strchr_ia32
|
||||
.globl __GI_mempcpy; __GI_mempcpy = __mempcpy
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include "../../i586/strchr.S"
|
||||
#include <sysdeps/i386/i686/mempcpy.S>
|
@ -1,81 +0,0 @@
|
||||
/* Multiple versions of mempcpy
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. In static binaries we need mempcpy before the initialization
|
||||
happened. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__mempcpy)
|
||||
.type __mempcpy, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_ssse3_rep)
|
||||
2: ret
|
||||
END(__mempcpy)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __mempcpy_ia32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __mempcpy_ia32; \
|
||||
.hidden __mempcpy_ia32; \
|
||||
__mempcpy_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __mempcpy_ia32, .-__mempcpy_ia32
|
||||
|
||||
# undef ENTRY_CHK
|
||||
# define ENTRY_CHK(name) \
|
||||
.type __mempcpy_chk_ia32, @function; \
|
||||
.globl __mempcpy_chk_ia32; \
|
||||
.p2align 4; \
|
||||
__mempcpy_chk_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END_CHK
|
||||
# define END_CHK(name) \
|
||||
cfi_endproc; .size __mempcpy_chk_ia32, .-__mempcpy_chk_ia32
|
||||
|
||||
# undef libc_hidden_def
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI_mempcpy; __GI_mempcpy = __mempcpy_ia32
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI___mempcpy; __GI___mempcpy = __mempcpy_ia32
|
||||
#endif
|
||||
|
||||
#include "../mempcpy.S"
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wcscmp
|
||||
/* Multiple versions of mempcpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,22 +17,22 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc and for the
|
||||
DSO. In static binaries, we need wcscmp before the initialization
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. In static binaries we need memcpy before the initialization
|
||||
happened. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__wcscmp)
|
||||
.type __wcscmp, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wcscmp_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wcscmp_sse2)
|
||||
2: ret
|
||||
END(__wcscmp)
|
||||
weak_alias (__wcscmp, wcscmp)
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define mempcpy __redirect_mempcpy
|
||||
# define __mempcpy __redirect___mempcpy
|
||||
# define NO_MEMPCPY_STPCPY_REDIRECT
|
||||
# define __NO_STRING_INLINES
|
||||
# include <string.h>
|
||||
# undef mempcpy
|
||||
# undef __mempcpy
|
||||
|
||||
# define SYMBOL_NAME mempcpy
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_mempcpy, __mempcpy, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__mempcpy, mempcpy)
|
||||
#endif
|
21
sysdeps/i386/i686/multiarch/mempcpy_chk-nonshared.S
Normal file
21
sysdeps/i386/i686/multiarch/mempcpy_chk-nonshared.S
Normal file
@ -0,0 +1,21 @@
|
||||
/* Non-shared version of mempcpy_chk for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc) && !defined SHARED
|
||||
# include <sysdeps/i386/mempcpy_chk.S>
|
||||
#endif
|
@ -1,50 +0,0 @@
|
||||
/* Multiple versions of __mempcpy_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib and for
|
||||
DSO. There are no multiarch mempcpy functions for static binaries.
|
||||
*/
|
||||
#if IS_IN (libc)
|
||||
# ifdef SHARED
|
||||
.text
|
||||
ENTRY(__mempcpy_chk)
|
||||
.type __mempcpy_chk, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_chk_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_chk_sse2_unaligned)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_chk_ssse3)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__mempcpy_chk_ssse3_rep)
|
||||
2: ret
|
||||
END(__mempcpy_chk)
|
||||
# else
|
||||
# include "../mempcpy_chk.S"
|
||||
# endif
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/mempcpy_chk.c
Normal file
31
sysdeps/i386/i686/multiarch/mempcpy_chk.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Multiple versions of __mempcpy_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if IS_IN (libc) && defined SHARED
|
||||
# define __mempcpy_chk __redirect_mempcpy_chk
|
||||
# include <string.h>
|
||||
# undef __mempcpy_chk
|
||||
|
||||
# define SYMBOL_NAME mempcpy_chk
|
||||
# include "ifunc-memmove.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_mempcpy_chk, __mempcpy_chk,
|
||||
IFUNC_SELECTOR ());
|
||||
#endif
|
32
sysdeps/i386/i686/multiarch/memrchr.c
Normal file
32
sysdeps/i386/i686/multiarch/memrchr.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of memrchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define memrchr __redirect_memrchr
|
||||
# include <string.h>
|
||||
# undef memrchr
|
||||
|
||||
# define SYMBOL_NAME memrchr
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memrchr, __memrchr, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__memrchr, memrchr)
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/memset-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/memset-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* memset optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define memset __memset_ia32
|
||||
# define __memset_chk __memset_chk_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memset; __GI_memset = memset
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i686/memset.S>
|
@ -1,75 +0,0 @@
|
||||
/* Multiple versions of memset
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(memset)
|
||||
.type memset, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memset_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memset_sse2)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memset_sse2_rep)
|
||||
2: ret
|
||||
END(memset)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __memset_ia32, @function; \
|
||||
.globl __memset_ia32; \
|
||||
.p2align 4; \
|
||||
__memset_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __memset_ia32, .-__memset_ia32
|
||||
|
||||
# undef ENTRY_CHK
|
||||
# define ENTRY_CHK(name) \
|
||||
.type __memset_chk_ia32, @function; \
|
||||
.globl __memset_chk_ia32; \
|
||||
.p2align 4; \
|
||||
__memset_chk_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END_CHK
|
||||
# define END_CHK(name) \
|
||||
cfi_endproc; .size __memset_chk_ia32, .-__memset_chk_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_memset; __GI_memset = __memset_ia32
|
||||
# endif
|
||||
|
||||
# undef strong_alias
|
||||
# define strong_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include "../memset.S"
|
30
sysdeps/i386/i686/multiarch/memset.c
Normal file
30
sysdeps/i386/i686/multiarch/memset.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of memset.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define memset __redirect_memset
|
||||
# include <string.h>
|
||||
# undef memset
|
||||
|
||||
# define SYMBOL_NAME memset
|
||||
# include "ifunc-memset.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memset, memset, IFUNC_SELECTOR ());
|
||||
#endif
|
21
sysdeps/i386/i686/multiarch/memset_chk-nonshared.S
Normal file
21
sysdeps/i386/i686/multiarch/memset_chk-nonshared.S
Normal file
@ -0,0 +1,21 @@
|
||||
/* Non-shared version of memset_chk for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc) && !defined SHARED
|
||||
# include <sysdeps/i386/memset_chk.S>
|
||||
#endif
|
@ -1,78 +0,0 @@
|
||||
/* Multiple versions of __memset_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in lib. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__memset_chk)
|
||||
.type __memset_chk, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__memset_chk_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memset_chk_sse2)
|
||||
HAS_ARCH_FEATURE (Fast_Rep_String)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__memset_chk_sse2_rep)
|
||||
2: ret
|
||||
END(__memset_chk)
|
||||
|
||||
# ifndef SHARED
|
||||
.text
|
||||
.type __memset_chk_sse2, @function
|
||||
.p2align 4;
|
||||
__memset_chk_sse2:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memset_sse2
|
||||
cfi_endproc
|
||||
.size __memset_chk_sse2, .-__memset_chk_sse2
|
||||
|
||||
.type __memset_chk_sse2_rep, @function
|
||||
.p2align 4;
|
||||
__memset_chk_sse2_rep:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memset_sse2_rep
|
||||
cfi_endproc
|
||||
.size __memset_chk_sse2_rep, .-__memset_chk_sse2_rep
|
||||
|
||||
.type __memset_chk_ia32, @function
|
||||
.p2align 4;
|
||||
__memset_chk_ia32:
|
||||
cfi_startproc
|
||||
CALL_MCOUNT
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
jb __chk_fail
|
||||
jmp __memset_ia32
|
||||
cfi_endproc
|
||||
.size __memset_chk_ia32, .-__memset_chk_ia32
|
||||
# endif
|
||||
#endif
|
32
sysdeps/i386/i686/multiarch/memset_chk.c
Normal file
32
sysdeps/i386/i686/multiarch/memset_chk.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of __memset_chk
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if IS_IN (libc) && defined SHARED
|
||||
# define __memset_chk __redirect_memset_chk
|
||||
# include <string.h>
|
||||
# undef __memset_chk
|
||||
|
||||
# define SYMBOL_NAME memset_chk
|
||||
# include "ifunc-memset.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_memset_chk, __memset_chk,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
#endif
|
35
sysdeps/i386/i686/multiarch/rawmemchr-ia32.S
Normal file
35
sysdeps/i386/i686/multiarch/rawmemchr-ia32.S
Normal file
@ -0,0 +1,35 @@
|
||||
/* rawmemchr optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define __rawmemchr __rawmemchr_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___rawmemchr; __GI___rawmemchr = __rawmemchr
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/rawmemchr.S>
|
@ -1,65 +0,0 @@
|
||||
/* Multiple versions of rawmemchr
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__rawmemchr)
|
||||
.type __rawmemchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 3f
|
||||
|
||||
LOAD_FUNC_GOT_EAX (__rawmemchr_sse2)
|
||||
ret
|
||||
|
||||
2: LOAD_FUNC_GOT_EAX (__rawmemchr_ia32)
|
||||
ret
|
||||
|
||||
3: LOAD_FUNC_GOT_EAX (__rawmemchr_sse2_bsf)
|
||||
ret
|
||||
END(__rawmemchr)
|
||||
|
||||
weak_alias(__rawmemchr, rawmemchr)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __rawmemchr_ia32, @function; \
|
||||
.globl __rawmemchr_ia32; \
|
||||
.p2align 4; \
|
||||
__rawmemchr_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __rawmemchr_ia32, .-__rawmemchr_ia32
|
||||
|
||||
# undef libc_hidden_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___rawmemchr; __GI___rawmemchr = __rawmemchr_ia32
|
||||
|
||||
#endif
|
||||
#include "../../rawmemchr.S"
|
35
sysdeps/i386/i686/multiarch/rawmemchr.c
Normal file
35
sysdeps/i386/i686/multiarch/rawmemchr.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* Multiple versions of rawmemchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define rawmemchr __redirect_rawmemchr
|
||||
# define __rawmemchr __redirect___rawmemchr
|
||||
# include <string.h>
|
||||
# undef rawmemchr
|
||||
# undef __rawmemchr
|
||||
|
||||
# define SYMBOL_NAME rawmemchr
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_rawmemchr, __rawmemchr,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__rawmemchr, rawmemchr)
|
||||
#endif
|
39
sysdeps/i386/i686/multiarch/stpcpy-ia32.S
Normal file
39
sysdeps/i386/i686/multiarch/stpcpy-ia32.S
Normal file
@ -0,0 +1,39 @@
|
||||
/* stpcpy optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define __stpcpy __stpcpy_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_def
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___stpcpy; __GI___stpcpy = __stpcpy
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_stpcpy; __GI_stpcpy = __stpcpy
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i586/stpcpy.S>
|
@ -1,9 +0,0 @@
|
||||
/* Multiple versions of stpcpy
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define USE_AS_STPCPY
|
||||
#define STRCPY __stpcpy
|
||||
#include "strcpy.S"
|
||||
|
||||
weak_alias (__stpcpy, stpcpy)
|
||||
libc_hidden_def (__stpcpy)
|
||||
libc_hidden_builtin_def (stpcpy)
|
36
sysdeps/i386/i686/multiarch/stpcpy.c
Normal file
36
sysdeps/i386/i686/multiarch/stpcpy.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* Multiple versions of stpcpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define stpcpy __redirect_stpcpy
|
||||
# define __stpcpy __redirect___stpcpy
|
||||
# define NO_MEMPCPY_STPCPY_REDIRECT
|
||||
# define __NO_STRING_INLINES
|
||||
# include <string.h>
|
||||
# undef stpcpy
|
||||
# undef __stpcpy
|
||||
|
||||
# define SYMBOL_NAME stpcpy
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_stpcpy, __stpcpy, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__stpcpy, stpcpy)
|
||||
#endif
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of memrchr
|
||||
/* stpncpy optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,28 +17,21 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(__memrchr)
|
||||
.type __memrchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 3f
|
||||
# define __stpncpy __stpncpy_ia32
|
||||
|
||||
LOAD_FUNC_GOT_EAX (__memrchr_sse2)
|
||||
ret
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___stpncpy; __GI___stpncpy = __stpncpy
|
||||
|
||||
2: LOAD_FUNC_GOT_EAX (__memrchr_ia32)
|
||||
ret
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
# endif
|
||||
|
||||
3: LOAD_FUNC_GOT_EAX (__memrchr_sse2_bsf)
|
||||
ret
|
||||
END(__memrchr)
|
||||
|
||||
weak_alias(__memrchr, memrchr)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/stpncpy.S>
|
@ -1,8 +0,0 @@
|
||||
/* Multiple versions of stpncpy
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define STRCPY __stpncpy
|
||||
#define USE_AS_STPCPY
|
||||
#define USE_AS_STRNCPY
|
||||
#include "strcpy.S"
|
||||
|
||||
weak_alias (__stpncpy, stpncpy)
|
34
sysdeps/i386/i686/multiarch/stpncpy.c
Normal file
34
sysdeps/i386/i686/multiarch/stpncpy.c
Normal file
@ -0,0 +1,34 @@
|
||||
/* Multiple versions of stpncpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define stpncpy __redirect_stpncpy
|
||||
# define __stpncpy __redirect___stpncpy
|
||||
# include <string.h>
|
||||
# undef stpncpy
|
||||
# undef __stpncpy
|
||||
|
||||
# define SYMBOL_NAME stpncpy
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_stpncpy, __stpncpy, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__stpncpy, stpncpy)
|
||||
#endif
|
@ -1,6 +1,6 @@
|
||||
/* Entry point for multi-version x86 strcasecmp.
|
||||
/* Multiple versions of strcasecmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Copyright (C) 2017 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
|
||||
@ -17,23 +17,19 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strcasecmp __redirect_strcasecmp
|
||||
# define __strcasecmp __redirect___strcasecmp
|
||||
# include <string.h>
|
||||
# undef strcasecmp
|
||||
# undef __strcasecmp
|
||||
|
||||
.text
|
||||
ENTRY(__strcasecmp)
|
||||
.type __strcasecmp, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strcasecmp_ia32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strcasecmp_ssse3)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_SSE4_2)
|
||||
jnz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strcasecmp_sse4_2)
|
||||
2: ret
|
||||
END(__strcasecmp)
|
||||
# define SYMBOL_NAME strcasecmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcasecmp, __strcasecmp,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__strcasecmp, strcasecmp)
|
||||
#endif
|
@ -1,7 +0,0 @@
|
||||
/* Multiple versions of strcasecmp_l
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define STRCMP __strcasecmp_l
|
||||
#define USE_AS_STRCASECMP_L
|
||||
#include "strcmp.S"
|
||||
|
||||
weak_alias (__strcasecmp_l, strcasecmp_l)
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wmemcmp
|
||||
/* Multiple versions of strcasecmp_l.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,23 +17,19 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(wmemcmp)
|
||||
.type wmemcmp, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wmemcmp_ia32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wmemcmp_ssse3)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wmemcmp_sse4_2)
|
||||
2: ret
|
||||
END(wmemcmp)
|
||||
# define strcasecmp_l __redirect_strcasecmp_l
|
||||
# define __strcasecmp_l __redirect___strcasecmp_l
|
||||
# include <string.h>
|
||||
# undef strcasecmp_l
|
||||
# undef __strcasecmp_l
|
||||
|
||||
# define SYMBOL_NAME strcasecmp_l
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcasecmp_l, __strcasecmp_l,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__strcasecmp_l, strcasecmp_l)
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strcat-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strcat-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strcat optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strcat __strcat_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strcat; __GI_strcat = strcat
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/strcat.S>
|
@ -1,92 +0,0 @@
|
||||
/* Multiple versions of strcat
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#ifndef USE_AS_STRNCAT
|
||||
# ifndef STRCAT
|
||||
# define STRCAT strcat
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_AS_STRNCAT
|
||||
# define STRCAT_SSSE3 __strncat_ssse3
|
||||
# define STRCAT_SSE2 __strncat_sse2
|
||||
# define STRCAT_IA32 __strncat_ia32
|
||||
# define __GI_STRCAT __GI_strncat
|
||||
#else
|
||||
# define STRCAT_SSSE3 __strcat_ssse3
|
||||
# define STRCAT_SSE2 __strcat_sse2
|
||||
# define STRCAT_IA32 __strcat_ia32
|
||||
# define __GI_STRCAT __GI_strcat
|
||||
#endif
|
||||
|
||||
|
||||
/* Define multiple versions only for the definition in libc. Don't
|
||||
define multiple versions for strncat in static library since we
|
||||
need strncat before the initialization happened. */
|
||||
#if IS_IN (libc)
|
||||
|
||||
.text
|
||||
ENTRY(STRCAT)
|
||||
.type STRCAT, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (STRCAT_IA32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (STRCAT_SSE2)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (STRCAT_SSSE3)
|
||||
2: ret
|
||||
END(STRCAT)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type STRCAT_IA32, @function; \
|
||||
.align 16; \
|
||||
.globl STRCAT_IA32; \
|
||||
.hidden STRCAT_IA32; \
|
||||
STRCAT_IA32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size STRCAT_IA32, .-STRCAT_IA32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* It doesn't make sense to send libc-internal strcat calls through a PLT.
|
||||
The speedup we get from using SSSE3 instruction is likely eaten away
|
||||
by the indirect call in the PLT. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_STRCAT; __GI_STRCAT = STRCAT_IA32
|
||||
# undef libc_hidden_def
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___STRCAT; __GI___STRCAT = STRCAT_IA32
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef USE_AS_STRNCAT
|
||||
# include "../../strcat.S"
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/strcat.c
Normal file
30
sysdeps/i386/i686/multiarch/strcat.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strcat.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strcat __redirect_strcat
|
||||
# include <string.h>
|
||||
# undef strcat
|
||||
|
||||
# define SYMBOL_NAME strcat
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcat, strcat, IFUNC_SELECTOR ());
|
||||
#endif
|
35
sysdeps/i386/i686/multiarch/strchr-ia32.S
Normal file
35
sysdeps/i386/i686/multiarch/strchr-ia32.S
Normal file
@ -0,0 +1,35 @@
|
||||
/* strchr optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strchr __strchr_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strchr; __GI_strchr = strchr
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i586/strchr.S>
|
32
sysdeps/i386/i686/multiarch/strchr.c
Normal file
32
sysdeps/i386/i686/multiarch/strchr.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of strchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strchr __redirect_strchr
|
||||
# include <string.h>
|
||||
# undef strchr
|
||||
|
||||
# define SYMBOL_NAME strchr
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strchr, strchr, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (strchr, index)
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strcmp-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strcmp-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strcmp optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strcmp __strcmp_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strcmp; __GI_strcmp = strcmp
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i686/strcmp.S>
|
@ -1,95 +0,0 @@
|
||||
/* Multiple versions of strcmp
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2010-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#ifdef USE_AS_STRNCMP
|
||||
# define STRCMP strncmp
|
||||
# define __GI_STRCMP __GI_strncmp
|
||||
# define __STRCMP_IA32 __strncmp_ia32
|
||||
# define __STRCMP_SSSE3 __strncmp_ssse3
|
||||
# define __STRCMP_SSE4_2 __strncmp_sse4_2
|
||||
#elif defined USE_AS_STRCASECMP_L
|
||||
# define STRCMP __strcasecmp_l
|
||||
# define __GI_STRCMP __GI_strcasecmp_l
|
||||
# define __STRCMP_IA32 __strcasecmp_l_ia32
|
||||
# define __STRCMP_SSSE3 __strcasecmp_l_ssse3
|
||||
# define __STRCMP_SSE4_2 __strcasecmp_l_sse4_2
|
||||
#elif defined USE_AS_STRNCASECMP_L
|
||||
# define STRCMP __strncasecmp_l
|
||||
# define __GI_STRCMP __GI_strncasecmp_l
|
||||
# define __STRCMP_IA32 __strncasecmp_l_ia32
|
||||
# define __STRCMP_SSSE3 __strncasecmp_l_ssse3
|
||||
# define __STRCMP_SSE4_2 __strncasecmp_l_sse4_2
|
||||
#else
|
||||
# define STRCMP strcmp
|
||||
# define __GI_STRCMP __GI_strcmp
|
||||
# define __STRCMP_IA32 __strcmp_ia32
|
||||
# define __STRCMP_SSSE3 __strcmp_ssse3
|
||||
# define __STRCMP_SSE4_2 __strcmp_sse4_2
|
||||
#endif
|
||||
|
||||
/* Define multiple versions only for the definition in libc. Don't
|
||||
define multiple versions for strncmp in static library since we
|
||||
need strncmp before the initialization happened. */
|
||||
#if (defined SHARED || !defined USE_AS_STRNCMP) && IS_IN (libc)
|
||||
.text
|
||||
ENTRY(STRCMP)
|
||||
.type STRCMP, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__STRCMP_IA32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__STRCMP_SSSE3)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_SSE4_2)
|
||||
jnz 2f
|
||||
LOAD_FUNC_GOT_EAX (__STRCMP_SSE4_2)
|
||||
2: ret
|
||||
END(STRCMP)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __STRCMP_IA32, @function; \
|
||||
.p2align 4; \
|
||||
.globl __STRCMP_IA32; \
|
||||
.hidden __STRCMP_IA32; \
|
||||
__STRCMP_IA32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __STRCMP_IA32, .-__STRCMP_IA32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_STRCMP; __GI_STRCMP = __STRCMP_IA32
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined USE_AS_STRNCMP && !defined USE_AS_STRCASECMP_L \
|
||||
&& !defined USE_AS_STRNCASECMP_L
|
||||
# include "../strcmp.S"
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/strcmp.c
Normal file
30
sysdeps/i386/i686/multiarch/strcmp.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strcmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strcmp __redirect_strcmp
|
||||
# include <string.h>
|
||||
# undef strcmp
|
||||
|
||||
# define SYMBOL_NAME strcmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcmp, strcmp, IFUNC_SELECTOR ());
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strcpy-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strcpy-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strcpy optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strcpy __strcpy_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strcpy; __GI_strcpy = strcpy
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i586/strcpy.S>
|
@ -1,116 +0,0 @@
|
||||
/* Multiple versions of strcpy
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if !defined (USE_AS_STPCPY) && !defined (USE_AS_STRNCPY)
|
||||
# ifndef STRCPY
|
||||
# define STRCPY strcpy
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_AS_STPCPY
|
||||
# ifdef USE_AS_STRNCPY
|
||||
# define STRCPY_SSSE3 __stpncpy_ssse3
|
||||
# define STRCPY_SSE2 __stpncpy_sse2
|
||||
# define STRCPY_IA32 __stpncpy_ia32
|
||||
# define __GI_STRCPY __GI_stpncpy
|
||||
# define __GI___STRCPY __GI___stpncpy
|
||||
# else
|
||||
# define STRCPY_SSSE3 __stpcpy_ssse3
|
||||
# define STRCPY_SSE2 __stpcpy_sse2
|
||||
# define STRCPY_IA32 __stpcpy_ia32
|
||||
# define __GI_STRCPY __GI_stpcpy
|
||||
# define __GI___STRCPY __GI___stpcpy
|
||||
# endif
|
||||
#else
|
||||
# ifdef USE_AS_STRNCPY
|
||||
# define STRCPY_SSSE3 __strncpy_ssse3
|
||||
# define STRCPY_SSE2 __strncpy_sse2
|
||||
# define STRCPY_IA32 __strncpy_ia32
|
||||
# define __GI_STRCPY __GI_strncpy
|
||||
# else
|
||||
# define STRCPY_SSSE3 __strcpy_ssse3
|
||||
# define STRCPY_SSE2 __strcpy_sse2
|
||||
# define STRCPY_IA32 __strcpy_ia32
|
||||
# define __GI_STRCPY __GI_strcpy
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Define multiple versions only for the definition in libc. Don't
|
||||
define multiple versions for strncpy in static library since we
|
||||
need strncpy before the initialization happened. */
|
||||
#if IS_IN (libc)
|
||||
|
||||
.text
|
||||
ENTRY(STRCPY)
|
||||
.type STRCPY, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (STRCPY_IA32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (STRCPY_SSE2)
|
||||
HAS_ARCH_FEATURE (Fast_Unaligned_Load)
|
||||
jnz 2f
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (STRCPY_SSSE3)
|
||||
2: ret
|
||||
END(STRCPY)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type STRCPY_IA32, @function; \
|
||||
.align 16; \
|
||||
.globl STRCPY_IA32; \
|
||||
.hidden STRCPY_IA32; \
|
||||
STRCPY_IA32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size STRCPY_IA32, .-STRCPY_IA32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* It doesn't make sense to send libc-internal strcpy calls through a PLT.
|
||||
The speedup we get from using SSSE3 instruction is likely eaten away
|
||||
by the indirect call in the PLT. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_STRCPY; __GI_STRCPY = STRCPY_IA32
|
||||
# undef libc_hidden_def
|
||||
# define libc_hidden_def(name) \
|
||||
.globl __GI___STRCPY; __GI___STRCPY = STRCPY_IA32
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_AS_STPCPY
|
||||
# ifdef USE_AS_STRNCPY
|
||||
# include "../../stpncpy.S"
|
||||
# else
|
||||
# include "../../i586/stpcpy.S"
|
||||
# endif
|
||||
#else
|
||||
# ifndef USE_AS_STRNCPY
|
||||
# include "../../i586/strcpy.S"
|
||||
# endif
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/strcpy.c
Normal file
30
sysdeps/i386/i686/multiarch/strcpy.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strcpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strcpy __redirect_strcpy
|
||||
# include <string.h>
|
||||
# undef strcpy
|
||||
|
||||
# define SYMBOL_NAME strcpy
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcpy, strcpy, IFUNC_SELECTOR ());
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strcspn-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strcspn-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strcspn optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strcspn __strcspn_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strcspn; __GI_strcspn = strcspn
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/strcspn.S>
|
@ -1,75 +0,0 @@
|
||||
/* Multiple versions of strcspn
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <config.h>
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#ifdef USE_AS_STRPBRK
|
||||
#define STRCSPN_SSE42 __strpbrk_sse42
|
||||
#define STRCSPN_IA32 __strpbrk_ia32
|
||||
#define __GI_STRCSPN __GI_strpbrk
|
||||
#else
|
||||
#ifndef STRCSPN
|
||||
#define STRCSPN strcspn
|
||||
#define STRCSPN_SSE42 __strcspn_sse42
|
||||
#define STRCSPN_IA32 __strcspn_ia32
|
||||
#define __GI_STRCSPN __GI_strcspn
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Define multiple versions only for the definition in libc. Don't
|
||||
define multiple versions for strpbrk in static library since we
|
||||
need strpbrk before the initialization happened. */
|
||||
#if (defined SHARED || !defined USE_AS_STRPBRK) && IS_IN (libc)
|
||||
.text
|
||||
ENTRY(STRCSPN)
|
||||
.type STRCSPN, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (STRCSPN_IA32)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (STRCSPN_SSE42)
|
||||
2: ret
|
||||
END(STRCSPN)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type STRCSPN_IA32, @function; \
|
||||
.globl STRCSPN_IA32; \
|
||||
.p2align 4; \
|
||||
STRCSPN_IA32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size STRCSPN_IA32, .-STRCSPN_IA32
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_STRCSPN; __GI_STRCSPN = STRCSPN_IA32
|
||||
#endif
|
||||
|
||||
#ifdef USE_AS_STRPBRK
|
||||
#include "../../strpbrk.S"
|
||||
#else
|
||||
#include "../../strcspn.S"
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/strcspn.c
Normal file
30
sysdeps/i386/i686/multiarch/strcspn.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strcspn.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strcspn __redirect_strcspn
|
||||
# include <string.h>
|
||||
# undef strcspn
|
||||
|
||||
# define SYMBOL_NAME strcspn
|
||||
# include "ifunc-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strcspn, strcspn, IFUNC_SELECTOR ());
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/strlen-ia32.S
Normal file
30
sysdeps/i386/i686/multiarch/strlen-ia32.S
Normal file
@ -0,0 +1,30 @@
|
||||
/* strlen optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define strlen __strlen_ia32
|
||||
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strlen; __GI_strlen = strlen
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/i586/strlen.S>
|
@ -1,60 +0,0 @@
|
||||
/* Multiple versions of strlen
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc and for the
|
||||
DSO. In static binaries, we need strlen before the initialization
|
||||
happened. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
.text
|
||||
ENTRY(strlen)
|
||||
.type strlen, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strlen_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strlen_sse2_bsf)
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strlen_sse2)
|
||||
2: ret
|
||||
END(strlen)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __strlen_ia32, @function; \
|
||||
.globl __strlen_ia32; \
|
||||
.p2align 4; \
|
||||
__strlen_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __strlen_ia32, .-__strlen_ia32
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strlen; __GI_strlen = __strlen_ia32
|
||||
#endif
|
||||
|
||||
#include "../../i586/strlen.S"
|
30
sysdeps/i386/i686/multiarch/strlen.c
Normal file
30
sysdeps/i386/i686/multiarch/strlen.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strlen.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define strlen __redirect_strlen
|
||||
# include <string.h>
|
||||
# undef strlen
|
||||
|
||||
# define SYMBOL_NAME strlen
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strlen, strlen, IFUNC_SELECTOR ());
|
||||
#endif
|
@ -1,6 +1,6 @@
|
||||
/* Entry point for multi-version x86 strncasecmp.
|
||||
/* Multiple versions of strncasecmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Copyright (C) 2017 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
|
||||
@ -17,23 +17,19 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strncasecmp __redirect_strncasecmp
|
||||
# define __strncasecmp __redirect___strncasecmp
|
||||
# include <string.h>
|
||||
# undef strncasecmp
|
||||
# undef __strncasecmp
|
||||
|
||||
.text
|
||||
ENTRY(__strncasecmp)
|
||||
.type __strncasecmp, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strncasecmp_ia32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strncasecmp_ssse3)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
HAS_ARCH_FEATURE (Slow_SSE4_2)
|
||||
jnz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strncasecmp_sse4_2)
|
||||
2: ret
|
||||
END(__strncasecmp)
|
||||
# define SYMBOL_NAME strncasecmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strncasecmp, __strncasecmp,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__strncasecmp, strncasecmp)
|
||||
#endif
|
@ -1,7 +0,0 @@
|
||||
/* Multiple versions of strncasecmp_l
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define STRCMP __strncasecmp_l
|
||||
#define USE_AS_STRNCASECMP_L
|
||||
#include "strcmp.S"
|
||||
|
||||
weak_alias (__strncasecmp_l, strncasecmp_l)
|
35
sysdeps/i386/i686/multiarch/strncase_l.c
Normal file
35
sysdeps/i386/i686/multiarch/strncase_l.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* Multiple versions of strncasecmp_l.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strncasecmp_l __redirect_strncasecmp_l
|
||||
# define __strncasecmp_l __redirect___strncasecmp_l
|
||||
# include <string.h>
|
||||
# undef strncasecmp_l
|
||||
# undef __strncasecmp_l
|
||||
|
||||
# define SYMBOL_NAME strncasecmp_l
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strncasecmp_l, __strncasecmp_l,
|
||||
IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__strncasecmp_l, strncasecmp_l)
|
||||
#endif
|
@ -1,5 +0,0 @@
|
||||
/* Multiple versions of strncat
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define STRCAT strncat
|
||||
#define USE_AS_STRNCAT
|
||||
#include "strcat.S"
|
30
sysdeps/i386/i686/multiarch/strncat.c
Normal file
30
sysdeps/i386/i686/multiarch/strncat.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strcat.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strncat __redirect_strncat
|
||||
# include <string.h>
|
||||
# undef strncat
|
||||
|
||||
# define SYMBOL_NAME strncat
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strncat, strncat, IFUNC_SELECTOR ());
|
||||
#endif
|
@ -1,5 +0,0 @@
|
||||
/* Multiple versions of strncmp
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define USE_AS_STRNCMP
|
||||
#define STRCMP strncmp
|
||||
#include "strcmp.S"
|
30
sysdeps/i386/i686/multiarch/strncmp.c
Normal file
30
sysdeps/i386/i686/multiarch/strncmp.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strncmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc.so. */
|
||||
#if defined SHARED && IS_IN (libc)
|
||||
# define strncmp __redirect_strncmp
|
||||
# include <string.h>
|
||||
# undef strncmp
|
||||
|
||||
# define SYMBOL_NAME strncmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strncmp, strncmp, IFUNC_SELECTOR ());
|
||||
#endif
|
@ -1,5 +0,0 @@
|
||||
/* Multiple versions of strncpy
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define USE_AS_STRNCPY
|
||||
#define STRCPY strncpy
|
||||
#include "strcpy.S"
|
31
sysdeps/i386/i686/multiarch/strncpy.c
Normal file
31
sysdeps/i386/i686/multiarch/strncpy.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Multiple versions of strncpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define _HAVE_STRING_ARCH_strncpy 1
|
||||
# define strncpy __redirect_strncpy
|
||||
# include <string.h>
|
||||
# undef strncpy
|
||||
|
||||
# define SYMBOL_NAME strncpy
|
||||
# include "ifunc-sse2-ssse3.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strncpy, strncpy, IFUNC_SELECTOR ());
|
||||
#endif
|
@ -1,7 +1,6 @@
|
||||
/* Multiple versions of wcscpy
|
||||
/* Multiple versions of strnlen.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
Copyright (C) 2017 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
|
||||
@ -18,19 +17,18 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(wcscpy)
|
||||
.type wcscpy, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__wcscpy_ia32)
|
||||
HAS_CPU_FEATURE (SSSE3)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__wcscpy_ssse3)
|
||||
2: ret
|
||||
END(wcscpy)
|
||||
# define strnlen __redirect_strnlen
|
||||
# define __strnlen __redirect___strnlen
|
||||
# include <string.h>
|
||||
# undef __strnlen
|
||||
# undef strnlen
|
||||
|
||||
# define SYMBOL_NAME strnlen
|
||||
# include "ifunc-sse2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strnlen, __strnlen, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (__strnlen, strnlen);
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strpbrk-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strpbrk-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strpbrk optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strpbrk __strpbrk_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strpbrk; __GI_strpbrk = strpbrk
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/strpbrk.S>
|
@ -1,5 +0,0 @@
|
||||
/* Multiple versions of strpbrk
|
||||
All versions must be listed in ifunc-impl-list.c. */
|
||||
#define STRCSPN strpbrk
|
||||
#define USE_AS_STRPBRK
|
||||
#include "strcspn.S"
|
30
sysdeps/i386/i686/multiarch/strpbrk.c
Normal file
30
sysdeps/i386/i686/multiarch/strpbrk.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strpbrk.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strpbrk __redirect_strpbrk
|
||||
# include <string.h>
|
||||
# undef strpbrk
|
||||
|
||||
# define SYMBOL_NAME strpbrk
|
||||
# include "ifunc-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strpbrk, strpbrk, IFUNC_SELECTOR ());
|
||||
#endif
|
35
sysdeps/i386/i686/multiarch/strrchr-ia32.S
Normal file
35
sysdeps/i386/i686/multiarch/strrchr-ia32.S
Normal file
@ -0,0 +1,35 @@
|
||||
/* strrchr optimized for i686.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strrchr __strrchr_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strrchr; __GI_strrchr = strrchr
|
||||
# endif
|
||||
|
||||
# undef weak_alias
|
||||
# define weak_alias(original, alias)
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/strrchr.S>
|
@ -1,57 +0,0 @@
|
||||
/* Multiple versions of strrchr
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(strrchr)
|
||||
.type strrchr, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strrchr_ia32)
|
||||
HAS_CPU_FEATURE (SSE2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strrchr_sse2_bsf)
|
||||
HAS_ARCH_FEATURE (Slow_BSF)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strrchr_sse2)
|
||||
2: ret
|
||||
END(strrchr)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __strrchr_ia32, @function; \
|
||||
.globl __strrchr_ia32; \
|
||||
.p2align 4; \
|
||||
__strrchr_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __strrchr_ia32, .-__strrchr_ia32
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strrchr; __GI_strrchr = __strrchr_ia32
|
||||
#endif
|
||||
|
||||
#include "../../strrchr.S"
|
32
sysdeps/i386/i686/multiarch/strrchr.c
Normal file
32
sysdeps/i386/i686/multiarch/strrchr.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Multiple versions of strrchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strrchr __redirect_strrchr
|
||||
# include <string.h>
|
||||
# undef strrchr
|
||||
|
||||
# define SYMBOL_NAME strrchr
|
||||
# include "ifunc-sse2-bsf.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strrchr, strrchr, IFUNC_SELECTOR ());
|
||||
|
||||
weak_alias (strrchr, rindex)
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/strspn-ia32.S
Normal file
33
sysdeps/i386/i686/multiarch/strspn-ia32.S
Normal file
@ -0,0 +1,33 @@
|
||||
/* strspn optimized for i686.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
#if IS_IN (libc)
|
||||
# define strspn __strspn_ia32
|
||||
|
||||
# ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strspn; __GI_strspn = strspn
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sysdeps/i386/strspn.S>
|
@ -1,56 +0,0 @@
|
||||
/* Multiple versions of strspn
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
Contributed by Intel Corporation.
|
||||
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 <config.h>
|
||||
#include <sysdep.h>
|
||||
#include <init-arch.h>
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
.text
|
||||
ENTRY(strspn)
|
||||
.type strspn, @gnu_indirect_function
|
||||
LOAD_GOT_AND_RTLD_GLOBAL_RO
|
||||
LOAD_FUNC_GOT_EAX (__strspn_ia32)
|
||||
HAS_CPU_FEATURE (SSE4_2)
|
||||
jz 2f
|
||||
LOAD_FUNC_GOT_EAX (__strspn_sse42)
|
||||
2: ret
|
||||
END(strspn)
|
||||
|
||||
# undef ENTRY
|
||||
# define ENTRY(name) \
|
||||
.type __strspn_ia32, @function; \
|
||||
.globl __strspn_ia32; \
|
||||
.p2align 4; \
|
||||
__strspn_ia32: cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
# undef END
|
||||
# define END(name) \
|
||||
cfi_endproc; .size __strspn_ia32, .-__strspn_ia32
|
||||
# undef libc_hidden_builtin_def
|
||||
/* IFUNC doesn't work with the hidden functions in shared library since
|
||||
they will be called without setting up EBX needed for PLT which is
|
||||
used by IFUNC. */
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
.globl __GI_strspn; __GI_strspn = __strspn_ia32
|
||||
#endif
|
||||
|
||||
#include "../../strspn.S"
|
30
sysdeps/i386/i686/multiarch/strspn.c
Normal file
30
sysdeps/i386/i686/multiarch/strspn.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of strspn.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define strspn __redirect_strspn
|
||||
# include <string.h>
|
||||
# undef strspn
|
||||
|
||||
# define SYMBOL_NAME strspn
|
||||
# include "ifunc-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_strspn, strspn, IFUNC_SELECTOR ());
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/wcschr.c
Normal file
33
sysdeps/i386/i686/multiarch/wcschr.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Multiple versions of wcschr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define wcschr __redirect_wcschr
|
||||
# define __wcschr __redirect___wcschr
|
||||
# include <wchar.h>
|
||||
# undef wcschr
|
||||
# undef __wcschr
|
||||
|
||||
# define SYMBOL_NAME wcschr
|
||||
# include "ifunc-sse2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_wcschr, __wcschr, IFUNC_SELECTOR ());
|
||||
weak_alias (__wcschr, wcschr);
|
||||
#endif
|
33
sysdeps/i386/i686/multiarch/wcscmp.c
Normal file
33
sysdeps/i386/i686/multiarch/wcscmp.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Multiple versions of wcscmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define wcscmp __redirect_wcscmp
|
||||
# define __wcscmp __redirect___wcscmp
|
||||
# include <wchar.h>
|
||||
# undef wcscmp
|
||||
# undef __wcscmp
|
||||
|
||||
# define SYMBOL_NAME wcscmp
|
||||
# include "ifunc-sse2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_wcscmp, __wcscmp, IFUNC_SELECTOR ());
|
||||
weak_alias (__wcscmp, wcscmp);
|
||||
#endif
|
44
sysdeps/i386/i686/multiarch/wcscpy.c
Normal file
44
sysdeps/i386/i686/multiarch/wcscpy.c
Normal file
@ -0,0 +1,44 @@
|
||||
/* Multiple versions of wcscpy.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define wcscpy __redirect_wcscpy
|
||||
# include <wchar.h>
|
||||
# undef wcscpy
|
||||
|
||||
# define SYMBOL_NAME wcscpy
|
||||
#include <init-arch.h>
|
||||
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ia32) attribute_hidden;
|
||||
extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
|
||||
|
||||
static inline void *
|
||||
IFUNC_SELECTOR (void)
|
||||
{
|
||||
const struct cpu_features* cpu_features = __get_cpu_features ();
|
||||
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, SSSE3))
|
||||
return OPTIMIZE (ssse3);
|
||||
|
||||
return OPTIMIZE (ia32);
|
||||
}
|
||||
|
||||
libc_ifunc_redirected (__redirect_wcscpy, wcscpy, IFUNC_SELECTOR ());
|
||||
#endif
|
31
sysdeps/i386/i686/multiarch/wcslen.c
Normal file
31
sysdeps/i386/i686/multiarch/wcslen.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Multiple versions of wcslen.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define __wcslen __redirect_wcslen
|
||||
# include <wchar.h>
|
||||
# undef __wcslen
|
||||
|
||||
# define SYMBOL_NAME wcslen
|
||||
# include "ifunc-sse2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_wcslen, __wcslen, IFUNC_SELECTOR ());
|
||||
weak_alias (__wcslen, wcslen);
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/wcsrchr.c
Normal file
30
sysdeps/i386/i686/multiarch/wcsrchr.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of wcsrchr.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define wcsrchr __redirect_wcsrchr
|
||||
# include <wchar.h>
|
||||
# undef wcsrchr
|
||||
|
||||
# define SYMBOL_NAME wcsrchr
|
||||
# include "ifunc-sse2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_wcsrchr, wcsrchr, IFUNC_SELECTOR ());
|
||||
#endif
|
30
sysdeps/i386/i686/multiarch/wmemcmp.c
Normal file
30
sysdeps/i386/i686/multiarch/wmemcmp.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Multiple versions of wmemcmp.
|
||||
All versions must be listed in ifunc-impl-list.c.
|
||||
Copyright (C) 2017 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/>. */
|
||||
|
||||
/* Define multiple versions only for the definition in libc. */
|
||||
#if IS_IN (libc)
|
||||
# define wmemcmp __redirect_wmemcmp
|
||||
# include <wchar.h>
|
||||
# undef wmemcmp
|
||||
|
||||
# define SYMBOL_NAME wmemcmp
|
||||
# include "ifunc-ssse3-sse4_2.h"
|
||||
|
||||
libc_ifunc_redirected (__redirect_wmemcmp, wmemcmp, IFUNC_SELECTOR ());
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user