Some some optimizations for x86-64 strcmp.
authorH.J. Lu <hongjiu.lu@intel.com>
Sun, 26 Jul 2009 02:15:14 +0000 (19:15 -0700)
committerUlrich Drepper <drepper@redhat.com>
Sun, 26 Jul 2009 02:15:14 +0000 (19:15 -0700)
ChangeLog
sysdeps/x86_64/multiarch/strcmp.S

index f47b089..abfe7db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2009-07-25  Ulrich Drepper  <drepper@redhat.com>
 
+       * sysdeps/x86_64/multiarch/strcmp.S: Some more optimizations for
+       modern processor versions.  Patch by H.J. Lu <hongjiu.lu@intel.com>.
+
        [BZ #10448]
        * sysdeps/posix/getaddrinfo.c (gaih_inet): If NSS module contains no
        callback we must touch the status to avoid using stale value.
index f9cf943..15148e4 100644 (file)
@@ -120,10 +120,8 @@ STRCMP_SSE42:
        ja      LABEL(crosscache)       /* rsi: 16-byte load will cross cache line */
        cmp     $0x30, %eax
        ja      LABEL(crosscache)       /* rdi: 16-byte load will cross cache line */
-       movlpd  (%rdi), %xmm1
-       movlpd  (%rsi), %xmm2
-       movhpd  8(%rdi), %xmm1
-       movhpd  8(%rsi), %xmm2
+       movdqu  (%rdi), %xmm1
+       movdqu  (%rsi), %xmm2
        pxor    %xmm0, %xmm0            /* clear %xmm0 for null char checks */
        pcmpeqb %xmm1, %xmm0            /* Any null chars? */
        pcmpeqb %xmm2, %xmm1            /* compare first 16 bytes for equality */
@@ -1492,11 +1490,8 @@ LABEL(less16bytes):
        sub     %rdx, %r11
        jbe     LABEL(strcmp_exitz)
 #endif
-       xor     %ecx, %ecx              /* clear %ecx */
-       xor     %eax, %eax              /* clear %eax */
-
-       movb    (%rsi, %rdx), %cl
-       movb    (%rdi, %rdx), %al
+       movzbl  (%rsi, %rdx), %ecx
+       movzbl  (%rdi, %rdx), %eax
 
        sub     %ecx, %eax
        ret