static inline void atomic_retain(volatile int *p) { #if defined(_MSC_VER) _InterlockedIncrement((LONG volatile *)p); #else __asm__( "lock incl %0\n\t" : "+m" (*p) : : "cc", "memory" ); #endif } static inline void atomic_thread_fence(memory_order_release_t) { __asm__ __volatile__ ( ASM_LWSYNC : : : "memory" ); }