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