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:
committed by
Ulrich Drepper
parent
435aa54b3b
commit
fab8238de6
@@ -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.
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user