summaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/memchr.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-04-07 14:53:04 +0000
committerUlrich Drepper <drepper@redhat.com>2009-04-07 14:53:04 +0000
commitddba0f17007795ac53ee2f82e6e954dc1a50d104 (patch)
tree62715ca2e6a1422c4a196ed13d80ef2496488a19 /sysdeps/x86_64/memchr.S
parent4bcb2658ff02d72aa83640cf76ac65a430f17004 (diff)
* string/stratcliff.c (do_test): Add memchr tests..
* sysdeps/x86_64/memchr.S: Fix handling of end of buffer after first read quad word.
Diffstat (limited to 'sysdeps/x86_64/memchr.S')
-rw-r--r--sysdeps/x86_64/memchr.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/sysdeps/x86_64/memchr.S b/sysdeps/x86_64/memchr.S
index 15484cb9f3..644362d565 100644
--- a/sysdeps/x86_64/memchr.S
+++ b/sysdeps/x86_64/memchr.S
@@ -37,12 +37,12 @@ ENTRY (memchr)
shl %cl, %esi
pmovmskb %xmm0, %ecx
andl %esi, %ecx
- movl $0, %esi
+ movl $16, %esi
jnz 1f
cmpq %rsi, %rdx
jle 3f
-2: movdqa 16(%rdi,%rsi), %xmm0
+2: movdqa (%rdi,%rsi), %xmm0
leaq 16(%rsi), %rsi
pcmpeqb %xmm1, %xmm0
pmovmskb %xmm0, %ecx
@@ -54,10 +54,10 @@ ENTRY (memchr)
3: xorl %eax, %eax
ret
-1: leaq (%rdi,%rsi), %rax
+1: leaq -16(%rdi,%rsi), %rax
bsfl %ecx, %ecx
addq %rcx, %rax
- addq %rcx, %rsi
+ leaq -16(%rsi,%rcx), %rsi
cmpq %rsi, %rdx
jle 3b
ret