#elif (defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86))
#define PIPE_ATOMIC_ASM_GCC_X86
#elif defined(PIPE_CC_GCC)
-#define PIPE_ATOMIC_GCC_INTRINISIC
+#define PIPE_ATOMIC_GCC_INTRINSIC
#else
#define PIPE_ATOMIC_MUTEX
#endif
/* Implementation using GCC-provided synchronization intrinsics
*/
-#if defined(PIPE_ATOMIC_ASM_GCC_INTRINSIC)
+#if defined(PIPE_ATOMIC_GCC_INTRINSIC)
#define PIPE_ATOMIC "GCC Sync Intrinsics"
struct pipe_atomic
{
- long count;
+ volatile long count;
};
#define p_atomic_set(_v, _i) ((_v)->count = (_i))
static INLINE boolean
p_atomic_dec_zero(struct pipe_atomic *v)
{
- return InterlockedDecrement(&v->count);
+ return InterlockedDecrement(&v->count) == 0;
}
static INLINE void
* Add an assembly port instead. It may abort and
* doesn't destroy used mutexes.
*/
-#warning "using mutex-based fallback for pipe_atomic"
struct pipe_atomic {
pipe_mutex mutex;