1499e961fffae64cf15b5e6646eaee7f8c6e586f
[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 compare_and_swap (volatile long *p, long oldval, long newval)
7 {
8   long ret;
9
10   __asm__ __volatile__ ("lock; cmpxchgl %2, %1"
11                         : "=a" (ret), "=m" (*p)
12                         : "r" (newval), "m" (*p), "0" (oldval));
13   return ret;
14 }
15
16 #define STORE_ORDER_BARRIER() __asm__ __volatile__ ("" : : : "memory");
17 #define MEMORY_BARRIER_AFTER_ATOMIC() /* nothing */
18 #define MEMORY_BARRIER() __asm__ __volatile__ ( \
19                 "lock; add $0, 0(%%esp)" : : : "memory" );
20
21 #endif