More small optimizations for x86-64 strlen.
authorUlrich Drepper <drepper@redhat.com>
Thu, 4 Jun 2009 23:45:35 +0000 (16:45 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 4 Jun 2009 23:45:35 +0000 (16:45 -0700)
ChangeLog
sysdeps/x86_64/strlen.S

index cb094d1..7d99a20 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
 2009-06-04  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/x86_64/strlen.S: Remove useless instruction.
+       * sysdeps/x86_64/strlen.S: Minor optimizations.
 
 2009-06-02  H.J. Lu  <hongjiu.lu@intel.com>
 
index 572f3c2..93aee6b 100644 (file)
 
        .text
 ENTRY(strlen)
+       pxor    %xmm2, %xmm2
        movq    %rdi, %rcx
        movq    %rdi, %r8
        andq    $~15, %rdi
-       pxor    %xmm1, %xmm1
+       movdqa  %xmm2, %xmm1
+       pcmpeqb (%rdi), %xmm2
        orl     $0xffffffff, %esi
-       movdqa  (%rdi), %xmm0
        subq    %rdi, %rcx
-       leaq    16(%rdi), %rdi
-       pcmpeqb %xmm1, %xmm0
-       shl     %cl, %esi
-       pmovmskb %xmm0, %edx
-       negq    %r8
+       shll    %cl, %esi
+       pmovmskb %xmm2, %edx
        andl    %esi, %edx
        jnz     1f
 
-2:     movdqa  (%rdi), %xmm0
+2:     movdqa  16(%rdi), %xmm0
        leaq    16(%rdi), %rdi
        pcmpeqb %xmm1, %xmm0
        pmovmskb %xmm0, %edx
        testl   %edx, %edx
        jz      2b
 
-1:     leaq    -16(%rdi,%r8), %rdi
+1:     subq    %r8, %rdi
        bsfl    %edx, %eax
        addq    %rdi, %rax
        ret