1/*
2 * @(#)alpha.gcc	11.1 (Sleepycat) 8/30/99
3 *
4 * For gcc/alpha, 0 is clear, 1 is set.
5 */
6#ifdef __GNUC__
7#define	MUTEX_SET(tsl) ({						\
8	register tsl_t *__l = (tsl);					\
9	int __r;							\
10	asm volatile(							\
11		"1:	ldl_l	%0,%1\n"				\
12		"	blbs	%0,2f\n"				\
13		"	mov	1,%0\n"					\
14		"	stl_c	%0,%1\n"				\
15		"	bne	%0,1b\n"				\
16		"	mb\n"						\
17		"2:"							\
18		: "=&r"(__r), "=m"(*__l) : "m"(*__l) : "memory");	\
19	__r;								\
20})
21#endif
22
23#ifdef __DECC
24#include <alpha/builtins.h>
25#define MUTEX_SET(tsl) (__LOCK_LONG_RETRY((tsl), 1) != 0)
26#endif
27
28#define	MUTEX_UNSET(tsl)	(*(tsl) = 0)
29#define	MUTEX_INIT(tsl)		MUTEX_UNSET(tsl)
30