about summary refs log tree commit diff
path: root/db2/mutex/x86.gcc
blob: 886a6811a22dc24a011b66609497b19413d5f733 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
 * @(#)x86.gcc	10.2 (Sleepycat) 6/21/97
 *
 * For gcc/x86, 0 is clear, 1 is set.
 */
#define	TSL_SET(tsl) ({							\
	register tsl_t *__l = (tsl);					\
	int __r;							\
	asm volatile("movl $1,%%eax; xchgb %1,%%al; xorl $1,%%eax"	\
	    : "=&a" (__r), "=m" (*__l)					\
	    : "1" (*__l)						\
	    );								\
	__r & 1;							\
})

#define	TSL_UNSET(tsl)	(*(tsl) = 0)
#define	TSL_INIT(tsl)	TSL_UNSET(tsl)