From a18fa6f911e4c796fcd6bd34922e471704755bea Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 28 Feb 2003 08:20:00 +0000 Subject: Fixup mips pthreads --- libpthread/linuxthreads/sysdeps/mips/pt-machine.h | 31 ++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'libpthread') diff --git a/libpthread/linuxthreads/sysdeps/mips/pt-machine.h b/libpthread/linuxthreads/sysdeps/mips/pt-machine.h index 59d26740f..93d862774 100644 --- a/libpthread/linuxthreads/sysdeps/mips/pt-machine.h +++ b/libpthread/linuxthreads/sysdeps/mips/pt-machine.h @@ -23,7 +23,36 @@ #ifndef _PT_MACHINE_H #define _PT_MACHINE_H 1 -#include +#include + +/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Maciej W. Rozycki , 2000. */ +static inline int +_test_and_set (int *p, int v) __THROW +{ + int r, t; + + __asm__ __volatile__ + ("/* Inline test and set */\n" + "1:\n\t" + ".set push\n\t" + ".set mips2\n\t" + "ll %0,%3\n\t" + "move %1,%4\n\t" + "beq %0,%4,2f\n\t" + "sc %1,%2\n\t" + ".set pop\n\t" + "beqz %1,1b\n" + "2:\n\t" + "/* End test and set */" + : "=&r" (r), "=&r" (t), "=m" (*p) + : "m" (*p), "r" (v) + : "memory"); + + return r; +} + #ifndef PT_EI # define PT_EI extern inline -- cgit v1.2.3