00001 #ifndef __CAS_h__
00002 #define __CAS_h__
00003
00012 typedef unsigned long word_t;
00013
00025 extern __inline__ int cas (word_t *ref, word_t exp, word_t val) {
00026 unsigned char aux;
00027
00028 __asm__ __volatile__(
00029
00030 "lock\n\t"
00031
00032
00033 "cmpxchgl %2,%1\n\t"
00034
00035 "sete %0"
00036 : "=q" (aux), "=m" (*ref)
00037 : "r" (val), "m" (*ref), "a" (exp)
00038 : "memory");
00039
00040 return aux;
00041 }
00042 #endif
00043