Do not use branch likely.

2002-02-05  H.J. Lu  <hjl@gnu.org>

	* sysdeps/mips/pspinlock.c (__pthread_spin_lock): Not use
	branch likely.
	* sysdeps/mips/pt-machine.h (testandset): Likewise.
	(__compare_and_swap): Likewise.

>>>>>>> 1.469
This commit is contained in:
Andreas Jaeger 2002-02-07 10:39:07 +00:00
parent cd30b01ee9
commit a6049f98ed
5 changed files with 33 additions and 37 deletions

View File

@ -1,3 +1,10 @@
2002-02-05 H.J. Lu <hjl@gnu.org>
* sysdeps/mips/pspinlock.c (__pthread_spin_lock): Not use
branch likely.
* sysdeps/mips/pt-machine.h (testandset): Likewise.
(__compare_and_swap): Likewise.
2002-02-07 Ulrich Drepper <drepper@redhat.com>
* internals.h: Move declarations/definitions of
@ -9,6 +16,7 @@
* sysdeps/i386/tls.h: Add TLS definitions also for !FLOATING_STACKS.
Define THREAD_GETMEM accordingly.
>>>>>>> 1.469
2002-02-06 Ulrich Drepper <drepper@redhat.com>
* sysdeps/i386/tls.h: Include <stddef.h> for size_t.

View File

@ -32,17 +32,16 @@ __pthread_spin_lock (pthread_spinlock_t *lock)
unsigned int tmp1, tmp2;
asm volatile
("\t\t\t# spin_lock\n\t"
"ll %1,%3\n"
("\t\t\t# spin_lock\n"
"1:\n\t"
"ll %1,%3\n\t"
".set push\n\t"
".set noreorder\n\t"
"bnez %1,1b\n\t"
" li %2,1\n\t"
".set pop\n\t"
"sc %2,%0\n\t"
"beqzl %2,1b\n\t"
" ll %1,%3\n\t"
".set pop"
"beqz %2,1b"
: "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2)
: "m" (*lock)
: "memory");

View File

@ -1,6 +1,6 @@
/* Machine-dependent pthreads configuration and inline functions.
Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ralf Baechle <ralf@gnu.org>.
Based on the Alpha version by Richard Henderson <rth@tamu.edu>.
@ -57,18 +57,17 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
long int ret, temp;
__asm__ __volatile__
("/* Inline compare & swap */\n\t"
"ll %1,%5\n"
("/* Inline compare & swap */\n"
"1:\n\t"
"ll %1,%5\n\t"
".set push\n\t"
".set noreorder\n\t"
"bne %1,%3,2f\n\t"
" move %0,$0\n\t"
".set pop\n\t"
"move %0,%4\n\t"
"sc %0,%2\n\t"
"beqzl %0,1b\n\t"
" ll %1,%5\n\t"
".set pop\n"
"beqz %0,1b\n"
"2:\n\t"
"/* End compare & swap */"
: "=&r" (ret), "=&r" (temp), "=m" (*p)

View File

@ -1,5 +1,5 @@
/* Low-level functions for atomic operations. Mips version.
Copyright (C) 2001 Free Software Foundation, Inc.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -32,16 +32,12 @@ exchange_and_add (volatile uint32_t *mem, int val)
int result, tmp;
__asm__ __volatile__
("/* Inline exchange & add */\n\t"
"ll %0,%3\n"
("/* Inline exchange & add */\n"
"1:\n\t"
"ll %0,%3\n\t"
"addu %1,%4,%0\n\t"
"sc %1,%2\n\t"
".set push\n\t"
".set noreorder\n\t"
"beqzl %1,1b\n\t"
" ll %0,%3\n\t"
".set pop\n\t"
"beqz %1,1b\n\t"
"/* End exchange & add */"
: "=&r"(result), "=&r"(tmp), "=m"(*mem)
: "m" (*mem), "r"(val)
@ -57,16 +53,12 @@ atomic_add (volatile uint32_t *mem, int val)
int result;
__asm__ __volatile__
("/* Inline atomic add */\n\t"
"ll %0,%2\n"
("/* Inline atomic add */\n"
"1:\n\t"
"ll %0,%2\n\t"
"addu %0,%3,%0\n\t"
"sc %0,%1\n\t"
".set push\n\t"
".set noreorder\n\t"
"beqzl %0,1b\n\t"
" ll %0,%2\n\t"
".set pop\n\t"
"beqz %0,1b\n\t"
"/* End atomic add */"
: "=&r"(result), "=m"(*mem)
: "m" (*mem), "r"(val)
@ -80,18 +72,17 @@ compare_and_swap (volatile long int *p, long int oldval, long int newval)
long int ret, temp;
__asm__ __volatile__
("/* Inline compare & swap */\n\t"
"ll %1,%5\n"
("/* Inline compare & swap */\n"
"1:\n\t"
"ll %1,%5\n\t"
".set push\n\t"
".set noreorder\n\t"
"bne %1,%3,2f\n\t"
" move %0,$0\n\t"
".set pop\n\t"
"move %0,%4\n\t"
"sc %0,%2\n\t"
"beqzl %0,1b\n\t"
" ll %1,%5\n\t"
".set pop\n"
"beqz %0,1b\n"
"2:\n\t"
"/* End compare & swap */"
: "=&r" (ret), "=&r" (temp), "=m" (*p)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000 Free Software Foundation, Inc.
/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maciej W. Rozycki <macro@ds2.pg.gda.pl>, 2000.
@ -42,17 +42,16 @@ _test_and_set (int *p, int v) __THROW
int r, t;
__asm__ __volatile__
("/* Inline test and set */\n\t"
"ll %0,%3\n"
("/* Inline test and set */\n"
"1:\n\t"
"ll %0,%3\n\t"
".set push\n\t"
".set noreorder\n\t"
"beq %0,%4,2f\n\t"
" move %1,%4\n\t"
".set pop\n\t"
"sc %1,%2\n\t"
"beqzl %1,1b\n\t"
" ll %0,%3\n\t"
".set pop\n"
"beqz %1,1b\n"
"2:\n\t"
"/* End test and set */"
: "=&r" (r), "=&r" (t), "=m" (*p)