diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-06-21 12:10:50 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-06-21 12:11:06 -0700 |
commit | 11ffcacb64a939c10cfc713746b8ec88837f5c4a (patch) | |
tree | 628e976f8ba6f657300dd0ed4705ee5e8f67f0fa /ChangeLog | |
parent | 9649350d2ee47fae00794d57e2526aa5d67d900e (diff) | |
download | glibc-11ffcacb64a939c10cfc713746b8ec88837f5c4a.tar glibc-11ffcacb64a939c10cfc713746b8ec88837f5c4a.tar.gz glibc-11ffcacb64a939c10cfc713746b8ec88837f5c4a.tar.bz2 glibc-11ffcacb64a939c10cfc713746b8ec88837f5c4a.zip |
x86-64: Implement strcmp family IFUNC selectors in C
Implement strcmp family IFUNC selectors in C.
All internal calls within libc.so can use IFUNC on x86-64 since unlike
x86, x86-64 supports PC-relative addressing to access the GOT entry so
that it can call via PLT without using an extra register. For libc.a,
we can't use IFUNC for functions which are called before IFUNC has been
initialized. Use IFUNC internally reduces the icache footprint since
libc.so and other codes in the process use the same implementations.
This patch uses IFUNC for strcmp family functions within libc.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
strcmp-sse2, strcmp-sse4_2, strncmp-sse2, strncmp-sse4_2,
strcasecmp_l-sse2, strcasecmp_l-sse4_2, strcasecmp_l-avx,
strncase_l-sse2, strncase_l-sse4_2 and strncase_l-avx.
* sysdeps/x86_64/multiarch/ifunc-strcasecmp.h: New file.
* sysdeps/x86_64/multiarch/strcasecmp.c: Likewise.
* sysdeps/x86_64/multiarch/strcasecmp_l-avx.S: Likewise.
* sysdeps/x86_64/multiarch/strcasecmp_l-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strcasecmp_l-sse4_2.S: Likewise.
* sysdeps/x86_64/multiarch/strcasecmp_l.c: Likewise.
* sysdeps/x86_64/multiarch/strcmp-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strcmp-sse4_2.S: Likewise.
* sysdeps/x86_64/multiarch/strcmp.c: Likewise.
* sysdeps/x86_64/multiarch/strncase.c: Likewise.
* sysdeps/x86_64/multiarch/strncase_l-avx.S : Likewise.
* sysdeps/x86_64/multiarch/strncase_l-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strncase_l-sse4_2.S: Likewise.
* sysdeps/x86_64/multiarch/strncase_l.c: Likewise.
* sysdeps/x86_64/multiarch/strncmp-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strncmp-sse4_2.S: Likewise.
* sysdeps/x86_64/multiarch/strncmp.c: Likewise.
* sysdeps/x86_64/multiarch/strcasecmp_l.S: Removed.
* sysdeps/x86_64/multiarch/strcmp.S: Likewise.
* sysdeps/x86_64/multiarch/strncase_l.S: Likewise.
* sysdeps/x86_64/multiarch/strncmp.S: Likewise.
* sysdeps/x86_64/multiarch/strcmp-sse42.S: Include <sysdep.h>.
(STRCMP_SSE42): New. Defined to __strcmp_sse42 if not defined.
[USE_AS_STRCASECMP_L || USE_AS_STRNCASECMP_L]: Include
"locale-defines.h".
(UPDATE_STRNCMP_COUNTER): New.
(SECTION): Likewise.
(GLABEL): Likewise.
(LABEL): Likewise.
* sysdeps/x86_64/multiarch/strncmp-ssse3.S: Rewrite and enable
for libc.a.
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -1,3 +1,41 @@ +2017-06-21 H.J. Lu <hongjiu.lu@intel.com> + + * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add + strcmp-sse2, strcmp-sse4_2, strncmp-sse2, strncmp-sse4_2, + strcasecmp_l-sse2, strcasecmp_l-sse4_2, strcasecmp_l-avx, + strncase_l-sse2, strncase_l-sse4_2 and strncase_l-avx. + * sysdeps/x86_64/multiarch/ifunc-strcasecmp.h: New file. + * sysdeps/x86_64/multiarch/strcasecmp.c: Likewise. + * sysdeps/x86_64/multiarch/strcasecmp_l-avx.S: Likewise. + * sysdeps/x86_64/multiarch/strcasecmp_l-sse2.S: Likewise. + * sysdeps/x86_64/multiarch/strcasecmp_l-sse4_2.S: Likewise. + * sysdeps/x86_64/multiarch/strcasecmp_l.c: Likewise. + * sysdeps/x86_64/multiarch/strcmp-sse2.S: Likewise. + * sysdeps/x86_64/multiarch/strcmp-sse4_2.S: Likewise. + * sysdeps/x86_64/multiarch/strcmp.c: Likewise. + * sysdeps/x86_64/multiarch/strncase.c: Likewise. + * sysdeps/x86_64/multiarch/strncase_l-avx.S : Likewise. + * sysdeps/x86_64/multiarch/strncase_l-sse2.S: Likewise. + * sysdeps/x86_64/multiarch/strncase_l-sse4_2.S: Likewise. + * sysdeps/x86_64/multiarch/strncase_l.c: Likewise. + * sysdeps/x86_64/multiarch/strncmp-sse2.S: Likewise. + * sysdeps/x86_64/multiarch/strncmp-sse4_2.S: Likewise. + * sysdeps/x86_64/multiarch/strncmp.c: Likewise. + * sysdeps/x86_64/multiarch/strcasecmp_l.S: Removed. + * sysdeps/x86_64/multiarch/strcmp.S: Likewise. + * sysdeps/x86_64/multiarch/strncase_l.S: Likewise. + * sysdeps/x86_64/multiarch/strncmp.S: Likewise. + * sysdeps/x86_64/multiarch/strcmp-sse42.S: Include <sysdep.h>. + (STRCMP_SSE42): New. Defined to __strcmp_sse42 if not defined. + [USE_AS_STRCASECMP_L || USE_AS_STRNCASECMP_L]: Include + "locale-defines.h". + (UPDATE_STRNCMP_COUNTER): New. + (SECTION): Likewise. + (GLABEL): Likewise. + (LABEL): Likewise. + * sysdeps/x86_64/multiarch/strncmp-ssse3.S: Rewrite and enable + for libc.a. + 2017-06-21 Joseph Myers <joseph@codesourcery.com> [BZ #21622] |