1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

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> 2009-06-02 H.J. Lu <hongjiu.lu@intel.com>
* Makeconfig (+link-pie): Define. * Makeconfig (+link-pie): Define.

View File

@@ -1,5 +1,5 @@
/* Test and measure memchr functions. /* 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. This file is part of the GNU C Library.
Written by Jakub Jelinek <jakub@redhat.com>, 1999. Written by Jakub Jelinek <jakub@redhat.com>, 1999.
@@ -144,7 +144,12 @@ do_random_tests (void)
} }
if (pos < len) 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 else
result = NULL; result = NULL;

View File

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