1 /* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Maciej W. Rozycki <macro@ds2.pg.gda.pl>, 2000.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18 
19 
20 /* L4/KYMA: Includes update from GCC
21  * mips-2014.05/mips-linux-gnu/libc/uclibc/usr/include/sys/tas.h */
22 
23 #ifndef _SYS_TAS_H
24 #define _SYS_TAS_H 1
25 
26 #include <features.h>
27 #include <sgidefs.h>
28 
29 __BEGIN_DECLS
30 
31 extern int _test_and_set (int *p, int v) __THROW;
32 
33 #ifdef __USE_EXTERN_INLINES
34 
35 # ifndef _EXTERN_INLINE
36 #  define _EXTERN_INLINE extern __inline
37 # endif
38 
39 _EXTERN_INLINE int
__NTH(_test_and_set (int * p,int v))40 __NTH (_test_and_set (int *p, int v))
41 {
42   int r, t;
43 
44   __asm__ __volatile__
45     ("/* Inline test and set */\n"
46      ".set	push\n\t"
47 #if _MIPS_SIM == _ABIO32  && __mips < 2
48      ".set	mips2\n\t"
49 #endif
50      "sync\n\t"
51      "1:\n\t"
52      "ll	%0,%3\n\t"
53      "move	%1,%4\n\t"
54      "beq	%0,%4,2f\n\t"
55      "sc	%1,%2\n\t"
56      "beqz	%1,1b\n"
57      "sync\n\t"
58      ".set	pop\n\t"
59      "2:\n\t"
60      "/* End test and set */"
61      : "=&r" (r), "=&r" (t), "=m" (*p)
62      : "m" (*p), "r" (v)
63      : "memory");
64 
65   return r;
66 }
67 
68 #endif /* __USE_EXTERN_INLINES */
69 
70 __END_DECLS
71 
72 #endif /* sys/tas.h */
73