about summary refs log tree commit diff
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)
downloadglibc-ddba0f17007795ac53ee2f82e6e954dc1a50d104.tar.gz
glibc-ddba0f17007795ac53ee2f82e6e954dc1a50d104.tar.xz
glibc-ddba0f17007795ac53ee2f82e6e954dc1a50d104.zip
* 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