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"
    );
}
