Use gcc builtin rather than asm for memory barriers

This should make things more portable.

On my machine, __sync_synchronize() uses mfence rather than lock; addl;
Looking at the kernel memory barriers, this should be fine:
http://lxr.free-electrons.com/source/arch/x86/um/asm/barrier.h

The kernel favours using mfence, but falls back to lock; addl; when it's
not available (32 bit non-SSE machines).

https://bugs.freedesktop.org/show_bug.cgi?id=86997
This commit is contained in:
Christophe Fergeau 2013-04-10 13:59:34 +02:00
parent cffb8baee1
commit 6b86c1a510

View File

@ -34,12 +34,7 @@
#ifdef __GNUC__
#ifdef __i386__
#define spice_mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
#else
//mfence
#define spice_mb() __asm__ __volatile__ ("lock; addl $0,0(%%rsp)": : :"memory")
#endif
#define spice_mb() __sync_synchronize ()
#else