1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

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> 2002-02-07 Ulrich Drepper <drepper@redhat.com>
* internals.h: Move declarations/definitions of * internals.h: Move declarations/definitions of
@ -9,6 +16,7 @@
* sysdeps/i386/tls.h: Add TLS definitions also for !FLOATING_STACKS. * sysdeps/i386/tls.h: Add TLS definitions also for !FLOATING_STACKS.
Define THREAD_GETMEM accordingly. Define THREAD_GETMEM accordingly.
>>>>>>> 1.469
2002-02-06 Ulrich Drepper <drepper@redhat.com> 2002-02-06 Ulrich Drepper <drepper@redhat.com>
* sysdeps/i386/tls.h: Include <stddef.h> for size_t. * 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; unsigned int tmp1, tmp2;
asm volatile asm volatile
("\t\t\t# spin_lock\n\t" ("\t\t\t# spin_lock\n"
"ll %1,%3\n"
"1:\n\t" "1:\n\t"
"ll %1,%3\n\t"
".set push\n\t" ".set push\n\t"
".set noreorder\n\t" ".set noreorder\n\t"
"bnez %1,1b\n\t" "bnez %1,1b\n\t"
" li %2,1\n\t" " li %2,1\n\t"
".set pop\n\t"
"sc %2,%0\n\t" "sc %2,%0\n\t"
"beqzl %2,1b\n\t" "beqz %2,1b"
" ll %1,%3\n\t"
".set pop"
: "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2) : "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2)
: "m" (*lock) : "m" (*lock)
: "memory"); : "memory");

View File

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

View File

@ -1,5 +1,5 @@
/* Low-level functions for atomic operations. Mips version. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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; int result, tmp;
__asm__ __volatile__ __asm__ __volatile__
("/* Inline exchange & add */\n\t" ("/* Inline exchange & add */\n"
"ll %0,%3\n"
"1:\n\t" "1:\n\t"
"ll %0,%3\n\t"
"addu %1,%4,%0\n\t" "addu %1,%4,%0\n\t"
"sc %1,%2\n\t" "sc %1,%2\n\t"
".set push\n\t" "beqz %1,1b\n\t"
".set noreorder\n\t"
"beqzl %1,1b\n\t"
" ll %0,%3\n\t"
".set pop\n\t"
"/* End exchange & add */" "/* End exchange & add */"
: "=&r"(result), "=&r"(tmp), "=m"(*mem) : "=&r"(result), "=&r"(tmp), "=m"(*mem)
: "m" (*mem), "r"(val) : "m" (*mem), "r"(val)
@ -57,16 +53,12 @@ atomic_add (volatile uint32_t *mem, int val)
int result; int result;
__asm__ __volatile__ __asm__ __volatile__
("/* Inline atomic add */\n\t" ("/* Inline atomic add */\n"
"ll %0,%2\n"
"1:\n\t" "1:\n\t"
"ll %0,%2\n\t"
"addu %0,%3,%0\n\t" "addu %0,%3,%0\n\t"
"sc %0,%1\n\t" "sc %0,%1\n\t"
".set push\n\t" "beqz %0,1b\n\t"
".set noreorder\n\t"
"beqzl %0,1b\n\t"
" ll %0,%2\n\t"
".set pop\n\t"
"/* End atomic add */" "/* End atomic add */"
: "=&r"(result), "=m"(*mem) : "=&r"(result), "=m"(*mem)
: "m" (*mem), "r"(val) : "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; long int ret, temp;
__asm__ __volatile__ __asm__ __volatile__
("/* Inline compare & swap */\n\t" ("/* Inline compare & swap */\n"
"ll %1,%5\n"
"1:\n\t" "1:\n\t"
"ll %1,%5\n\t"
".set push\n\t" ".set push\n\t"
".set noreorder\n\t" ".set noreorder\n\t"
"bne %1,%3,2f\n\t" "bne %1,%3,2f\n\t"
" move %0,$0\n\t" " move %0,$0\n\t"
".set pop\n\t"
"move %0,%4\n\t" "move %0,%4\n\t"
"sc %0,%2\n\t" "sc %0,%2\n\t"
"beqzl %0,1b\n\t" "beqz %0,1b\n"
" ll %1,%5\n\t"
".set pop\n"
"2:\n\t" "2:\n\t"
"/* End compare & swap */" "/* End compare & swap */"
: "=&r" (ret), "=&r" (temp), "=m" (*p) : "=&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. This file is part of the GNU C Library.
Contributed by Maciej W. Rozycki <macro@ds2.pg.gda.pl>, 2000. 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; int r, t;
__asm__ __volatile__ __asm__ __volatile__
("/* Inline test and set */\n\t" ("/* Inline test and set */\n"
"ll %0,%3\n"
"1:\n\t" "1:\n\t"
"ll %0,%3\n\t"
".set push\n\t" ".set push\n\t"
".set noreorder\n\t" ".set noreorder\n\t"
"beq %0,%4,2f\n\t" "beq %0,%4,2f\n\t"
" move %1,%4\n\t" " move %1,%4\n\t"
".set pop\n\t"
"sc %1,%2\n\t" "sc %1,%2\n\t"
"beqzl %1,1b\n\t" "beqz %1,1b\n"
" ll %0,%3\n\t"
".set pop\n"
"2:\n\t" "2:\n\t"
"/* End test and set */" "/* End test and set */"
: "=&r" (r), "=&r" (t), "=m" (*p) : "=&r" (r), "=&r" (t), "=m" (*p)