#include "winsup.h" #ifndef __NO_INTERLOCKED__ long ilockincr (long *m) { int __res; __asm__("\n\ movl $1,%0\n\ lock xadd %0,(%1)\n\ inc %0\n" : "=a" (__res), "=q" (m) : "1" (m) : "memory" ); return __res; } long ilockdecr (long *m) { int __res; __asm__("\n\ movl $0xffffffff,%0\n\ lock xadd %0,(%1)\n\ dec %0\n" : "=a" (__res), "=q" (m) : "1" (m) : "memory" ); return __res; } long ilockexch (long *t, long v) { int __res; __asm__("\n\ 1: lock cmpxchgl %3,(%1)\n\ jne 1b\n" : "=a" (__res), "=q" (t) : "1" (t), "q" (v), "0" (*t) : "memory" ); return __res; } long ilockcmpexch (long *t, long v, long c) { int __res; __asm__("\n\ lock cmpxchgl %3,(%1)\n" : "=a" (__res), "=q" (t) : "1" (t), "q" (v), "0" (c) : "memory" ); return __res; } #endif /*__NO_INTERLOCKED__*/