about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/strcmp.S
diff options
context:
space:
mode:
authorOndřej Bílka <neleai@seznam.cz>2013-09-03 16:21:38 +0200
committerOndřej Bílka <neleai@seznam.cz>2013-09-03 16:27:10 +0200
commit8f02859f17d01ce0cf542d934a04a79f048b73fd (patch)
tree2173f12761daf5f4df32efeb9217bba4f980712c /sysdeps/x86_64/multiarch/strcmp.S
parentd34202f67408b3a6363d8d5a9ef78ae8a264d03f (diff)
downloadglibc-8f02859f17d01ce0cf542d934a04a79f048b73fd.tar.gz
glibc-8f02859f17d01ce0cf542d934a04a79f048b73fd.tar.xz
glibc-8f02859f17d01ce0cf542d934a04a79f048b73fd.zip
Add unaligned strcmp.
Diffstat (limited to 'sysdeps/x86_64/multiarch/strcmp.S')
-rw-r--r--sysdeps/x86_64/multiarch/strcmp.S7
1 files changed, 7 insertions, 0 deletions
diff --git a/sysdeps/x86_64/multiarch/strcmp.S b/sysdeps/x86_64/multiarch/strcmp.S
index 1d4d711838..c5dcd1aa5e 100644
--- a/sysdeps/x86_64/multiarch/strcmp.S
+++ b/sysdeps/x86_64/multiarch/strcmp.S
@@ -66,6 +66,7 @@
 # define STRCMP_SSE2	__strncasecmp_l_sse2
 # define __GI_STRCMP	__GI___strncasecmp_l
 #else
+# define USE_AS_STRCMP
 # define UPDATE_STRNCMP_COUNTER
 # ifndef STRCMP
 #  define STRCMP	strcmp
@@ -88,11 +89,17 @@ ENTRY(STRCMP)
 	jne	1f
 	call	__init_cpu_features
 1:
+#ifdef USE_AS_STRCMP
+	leaq	__strcmp_sse2_unaligned(%rip), %rax
+	testl   $bit_Fast_Unaligned_Load, __cpu_features+CPUID_OFFSET+index_Fast_Unaligned_Load(%rip)
+	jnz     3f
+#else
 	testl	$bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip)
 	jnz	2f
 	leaq	STRCMP_SSE42(%rip), %rax
 	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
 	jnz	3f
+#endif
 2:	leaq	STRCMP_SSSE3(%rip), %rax
 	testl	$bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
 	jnz	3f