*** empty log message ***
[cacao.git] / src / vm / jit / i386 / machine-instr.h
1 #ifndef _MACHINE_INSTR_H
2 #define _MACHINE_INSTR_H
3
4 static inline long
5 __attribute__ ((unused))
6 atomic_swap (volatile long *mem, long val)
7 {
8   __asm__ __volatile__ ("xchgl %2,%0"
9             : "=r" (val) : "0" (val), "m" (*mem));
10   return val;
11 }
12
13 static inline long int
14 __attribute__ ((unused))
15 compare_and_swap (volatile long int *p, long int oldval, long int newval)
16 {
17   long int ret;
18
19   __asm__ __volatile__ ("lock; cmpxchgl %2, %1"
20                         : "=a" (ret), "=m" (*p)
21                         : "r" (newval), "m" (*p), "0" (oldval));
22   return ret;
23 }
24
25 #endif