aboutsummaryrefslogtreecommitdiff
path: root/ChangeLog
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-06-21 12:10:50 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-06-21 12:11:06 -0700
commit11ffcacb64a939c10cfc713746b8ec88837f5c4a (patch)
tree628e976f8ba6f657300dd0ed4705ee5e8f67f0fa /ChangeLog
parent9649350d2ee47fae00794d57e2526aa5d67d900e (diff)
downloadglibc-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--ChangeLog38
1 files changed, 38 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d2dd7d468d..f96acc89df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]