1*1a3d31e3SAndroid Build Coastguard Worker #ifndef BARRIER_H 2*1a3d31e3SAndroid Build Coastguard Worker #define BARRIER_H 3*1a3d31e3SAndroid Build Coastguard Worker 4*1a3d31e3SAndroid Build Coastguard Worker #if defined(__ia64__) 5*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile ("mf" ::: "memory") 6*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__x86_64__) 7*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile("sfence" ::: "memory") 8*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__i386__) 9*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile ("": : :"memory") 10*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__ppc__) || defined(__powerpc__) 11*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile ("eieio" : : : "memory") 12*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__s390__) || defined(__s390x__) 13*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile ("bcr 15,0" : : : "memory") 14*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__alpha__) 15*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile("wmb": : :"memory") 16*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__hppa__) 17*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile("":::"memory") 18*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__sparc__) 19*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile("":::"memory") 20*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__m68000__) || defined(__m68k__) || defined(mc68000) || defined(_M_M68K) 21*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() asm volatile("":::"memory") 22*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__mips__) /* also mipsel */ 23*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() do { } while(0) 24*1a3d31e3SAndroid Build Coastguard Worker #elif defined(__arm__) 25*1a3d31e3SAndroid Build Coastguard Worker /* taken from linux/arch/arm/kernel/entry-armv.S, thanks to pbrook! */ 26*1a3d31e3SAndroid Build Coastguard Worker typedef void (__kernel_dmb_t)(void); 27*1a3d31e3SAndroid Build Coastguard Worker #define __kernel_dmb (*(__kernel_dmb_t *)0xffff0fa0) 28*1a3d31e3SAndroid Build Coastguard Worker #define store_barrier() __kernel_dmb() 29*1a3d31e3SAndroid Build Coastguard Worker #else 30*1a3d31e3SAndroid Build Coastguard Worker #error Define store_barrier() for your CPU 31*1a3d31e3SAndroid Build Coastguard Worker #endif 32*1a3d31e3SAndroid Build Coastguard Worker 33*1a3d31e3SAndroid Build Coastguard Worker #endif 34