mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-05 21:00:05 +00:00
Update.
2000-07-21 Ulrich Drepper <drepper@redhat.com> * sysdeps/powerpc/strchr.S: Correct bugs introduced in BP-ification. Patch by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
This commit is contained in:
parent
f74e61f056
commit
dfef32ef79
@ -1,3 +1,8 @@
|
||||
2000-07-21 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/strchr.S: Correct bugs introduced in BP-ification.
|
||||
Patch by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
|
||||
|
||||
2000-07-21 Wolfram Gloger <wg@malloc.de>
|
||||
|
||||
* malloc/malloc.c (chunk_alloc): Try mmap_chunk() for smaller
|
||||
|
@ -48,6 +48,10 @@ static inline int compare_and_swap(long * ptr, long oldval, long newval,
|
||||
|
||||
#elif defined(HAS_COMPARE_AND_SWAP)
|
||||
|
||||
#ifdef IMPLEMENT_TAS_WITH_CAS
|
||||
#define testandset(p) !__compare_and_swap(p, 0, 1)
|
||||
#endif
|
||||
|
||||
#ifdef HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
|
||||
|
||||
static inline int
|
||||
|
@ -28,7 +28,7 @@
|
||||
/* For multiprocessor systems, we want to ensure all memory accesses
|
||||
are completed before we reset a lock. On other systems, we still
|
||||
need to make sure that the compiler has flushed everything to memory. */
|
||||
#define MEMORY_BARRIER() __asm__ ("sync" : : : "memory")
|
||||
#define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
|
||||
|
||||
/* Get some notion of the current stack. Need not be exactly the top
|
||||
of the stack, just something somewhere in the current frame. */
|
||||
@ -36,9 +36,11 @@
|
||||
register char * stack_pointer __asm__ ("r1");
|
||||
|
||||
/* Compare-and-swap for semaphores. */
|
||||
/* note that test-and-set(x) is the same as compare-and-swap(x, 0, 1) */
|
||||
/* note that test-and-set(x) is the same as !compare-and-swap(x, 0, 1) */
|
||||
|
||||
#define HAS_COMPARE_AND_SWAP
|
||||
#define IMPLEMENT_TAS_WITH_CAS
|
||||
|
||||
#if BROKEN_PPC_ASM_CR0
|
||||
static
|
||||
#else
|
||||
@ -50,7 +52,7 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
|
||||
int ret;
|
||||
|
||||
MEMORY_BARRIER ();
|
||||
__asm__ (
|
||||
__asm__ __volatile__ (
|
||||
"0: lwarx %0,0,%1 ;"
|
||||
" xor. %0,%3,%0;"
|
||||
" bne 1f;"
|
||||
|
@ -34,7 +34,7 @@ ENTRY (BP_SYM (strchr))
|
||||
# define rCHR r5 /* byte we're looking for, spread over the whole word */
|
||||
# define rWORD r8 /* the current word */
|
||||
#else
|
||||
# define rSTR r3 /* current word pointer */
|
||||
# define rSTR r8 /* current word pointer */
|
||||
# define rCHR r4 /* byte we're looking for, spread over the whole word */
|
||||
# define rWORD r5 /* the current word */
|
||||
#endif
|
||||
@ -52,10 +52,10 @@ ENTRY (BP_SYM (strchr))
|
||||
rlwimi rCHR, rCHR, 8, 16, 23
|
||||
li rMASK, -1
|
||||
rlwimi rCHR, rCHR, 16, 0, 15
|
||||
rlwinm rIGN, rSTR, 3, 27, 28
|
||||
rlwinm rIGN, rRTN, 3, 27, 28
|
||||
lis rFEFE, -0x101
|
||||
lis r7F7F, 0x7f7f
|
||||
clrrwi rSTR, rSTR, 2
|
||||
clrrwi rSTR, rRTN, 2
|
||||
addi rFEFE, rFEFE, -0x101
|
||||
addi r7F7F, r7F7F, 0x7f7f
|
||||
/* Test the first (partial?) word. */
|
||||
@ -90,7 +90,7 @@ L(loopentry):
|
||||
happened, though. */
|
||||
L(missed):
|
||||
and. rTMP1, rTMP1, rTMP2
|
||||
li rSTR, 0
|
||||
li rRTN, 0
|
||||
STORE_RETURN_VALUE (rSTR)
|
||||
beqlr
|
||||
/* It did happen. Decide which one was first...
|
||||
@ -108,7 +108,7 @@ L(missed):
|
||||
bgtlr
|
||||
cntlzw rCLZB, rTMP2
|
||||
srwi rCLZB, rCLZB, 3
|
||||
add rSTR, rSTR, rCLZB
|
||||
add rRTN, rSTR, rCLZB
|
||||
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
|
||||
STORE_RETURN_VALUE (rSTR)
|
||||
blr
|
||||
@ -121,7 +121,7 @@ L(foundit):
|
||||
cntlzw rCLZB, rTMP2
|
||||
subi rSTR, rSTR, 4
|
||||
srwi rCLZB, rCLZB, 3
|
||||
add rSTR, rSTR, rCLZB
|
||||
add rRTN, rSTR, rCLZB
|
||||
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
|
||||
STORE_RETURN_VALUE (rSTR)
|
||||
blr
|
||||
|
Loading…
Reference in New Issue
Block a user