aboutsummaryrefslogtreecommitdiff
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
glibc-8f02859f17d01ce0cf542d934a04a79f048b73fd.tar.gz
glibc-8f02859f17d01ce0cf542d934a04a79f048b73fd.tar.bz2
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