Fix x86-64 memchr for large lengths.

This commit is contained in:
Jakub Jelinek 2009-06-16 10:23:31 -07:00 committed by Ulrich Drepper
parent 435aa54b3b
commit fab8238de6
3 changed files with 17 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2009-06-16 Jakub Jelinek <jakub@redhat.com>
* sysdeps/x86_64/memchr.S (memchr): Use unsigned instead of signed
comparisons.
* string/test-memchr.c (do_random_tests): Test very large lengths
as well.
2009-06-02 H.J. Lu <hongjiu.lu@intel.com>
* Makeconfig (+link-pie): Define.

View File

@ -1,5 +1,5 @@
/* Test and measure memchr functions.
Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Jakub Jelinek <jakub@redhat.com>, 1999.
@ -144,7 +144,12 @@ do_random_tests (void)
}
if (pos < len)
result = (char *) (p + pos + align);
{
size_t r = random ();
if ((r & 31) == 0)
len = ~(uintptr_t) (p + align) - ((r >> 5) & 31);
result = (char *) (p + pos + align);
}
else
result = NULL;

View File

@ -41,7 +41,7 @@ ENTRY (memchr)
movl $16, %esi
jnz 1f
cmpq %rsi, %rdx
jle 3f
jbe 3f
2: movdqa (%rdi,%rsi), %xmm0
leaq 16(%rsi), %rsi
@ -50,7 +50,7 @@ ENTRY (memchr)
testl %ecx, %ecx
jnz 1f
cmpq %rsi, %rdx
jg 2b
ja 2b
3: xorl %eax, %eax
ret
@ -60,7 +60,7 @@ ENTRY (memchr)
addq %rcx, %rax
leaq -16(%rsi,%rcx), %rsi
cmpq %rsi, %rdx
jle 3b
jbe 3b
ret
END (memchr)