Compiler memory barriers
[akaros.git] / kern / arch / i686 / ros / membar.h
1 #ifndef _ARCH_MEMBAR_H
2 #define _ARCH_MEMBAR_H
3
4 /* Adding "memory" to keep the compiler from fucking with us */
5 #define mb() ({ asm volatile("mfence" ::: "memory"); })
6 #define rmb() ({ asm volatile("lfence" ::: "memory"); })
7 #define wmb() ({ asm volatile("" ::: "memory"); })
8 /* Compiler memory barrier */
9 #define cmb() ({ asm volatile("" ::: "memory"); })
10 /* Force a wmb, used in cases where an IPI could beat a write, even though
11  *  * write-orderings are respected. TODO: this probably do what you want. */
12 #define wmb_f() ({ asm volatile("sfence"); })
13
14 #endif