diff options
author | Ondřej Bílka <neleai@seznam.cz> | 2013-09-11 17:07:38 +0200 |
---|---|---|
committer | Ondřej Bílka <neleai@seznam.cz> | 2013-09-11 17:07:38 +0200 |
commit | 5905e7b3e29139dbef84c065ca39315485f497e1 (patch) | |
tree | c0333d621bbb599eb32a3c773ebc21ce53d6c438 /sysdeps/x86_64/strchrnul.S | |
parent | b987c776723eea2f223885289c466386f12e823a (diff) | |
download | glibc-5905e7b3e29139dbef84c065ca39315485f497e1.tar.gz glibc-5905e7b3e29139dbef84c065ca39315485f497e1.tar.xz glibc-5905e7b3e29139dbef84c065ca39315485f497e1.zip |
Faster strchr implementation.
Diffstat (limited to 'sysdeps/x86_64/strchrnul.S')
-rw-r--r-- | sysdeps/x86_64/strchrnul.S | 41 |
1 files changed, 3 insertions, 38 deletions
diff --git a/sysdeps/x86_64/strchrnul.S b/sysdeps/x86_64/strchrnul.S index d8c345ba7d..bceeb61875 100644 --- a/sysdeps/x86_64/strchrnul.S +++ b/sysdeps/x86_64/strchrnul.S @@ -20,43 +20,8 @@ #include <sysdep.h> - - .text -ENTRY (__strchrnul) - movd %esi, %xmm1 - movq %rdi, %rcx - punpcklbw %xmm1, %xmm1 - andq $~15, %rdi - pxor %xmm2, %xmm2 - punpcklbw %xmm1, %xmm1 - orl $0xffffffff, %esi - movdqa (%rdi), %xmm0 - pshufd $0, %xmm1, %xmm1 - subq %rdi, %rcx - movdqa %xmm0, %xmm3 - leaq 16(%rdi), %rdi - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - shl %cl, %esi - pmovmskb %xmm0, %edx - pmovmskb %xmm3, %ecx - orl %edx, %ecx - andl %esi, %ecx - jnz 1f - -2: movdqa (%rdi), %xmm0 - leaq 16(%rdi), %rdi - movdqa %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - pmovmskb %xmm0, %edx - pmovmskb %xmm3, %ecx - orl %edx, %ecx - jz 2b - -1: bsfl %ecx, %edx - leaq -16(%rdi,%rdx), %rax - ret -END (__strchrnul) +#define strchr __strchrnul +#define AS_STRCHRNUL +#include "strchr.S" weak_alias (__strchrnul, strchrnul) |