LMMS
Loading...
Searching...
No Matches
wdlatomic.h
Go to the documentation of this file.
1#ifndef _WDL_ATOMIC_H_
2#define _WDL_ATOMIC_H_
3
4#include "wdltypes.h"
5
6#ifdef _WIN32
7
8static int wdl_atomic_incr(int *v) { return (int) InterlockedIncrement((LONG *)v); }
9static int wdl_atomic_decr(int *v) { return (int) InterlockedDecrement((LONG *)v); }
10static int wdl_atomic_incr(volatile int *v) { return (int) InterlockedIncrement((LONG *)v); }
11static int wdl_atomic_decr(volatile int *v) { return (int) InterlockedDecrement((LONG *)v); }
12
13#elif (!defined(__APPLE__) || !defined(__ppc__)) && (defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))))
14
15static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(int *v) { return __sync_add_and_fetch(v,1); }
16static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(int *v) { return __sync_add_and_fetch(v,~0); }
17static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(volatile int *v) { return __sync_add_and_fetch(v,1); }
18static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(volatile int *v) { return __sync_add_and_fetch(v,~0); }
19
20#elif defined(__APPLE__)
21// used by GCC < 4.2 on OSX
22#include <libkern/OSAtomic.h>
23
24static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(int *v) { return (int) OSAtomicIncrement32Barrier((int32_t*)v); }
25static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(int *v) { return (int) OSAtomicDecrement32Barrier((int32_t*)v); }
26static WDL_STATICFUNC_UNUSED int wdl_atomic_incr(volatile int *v) { return (int) OSAtomicIncrement32Barrier((int32_t*)v); }
27static WDL_STATICFUNC_UNUSED int wdl_atomic_decr(volatile int *v) { return (int) OSAtomicDecrement32Barrier((int32_t*)v); }
28#else
29
30// unsupported!
31#pragma message("Need win32 or apple or gcc 4.2+ for wdlatomic.h, doh")
32
33#endif
34
35#endif
unsigned v[N_MAX]
Definition inflate.c:1584
int int32_t
Definition mid.cpp:97
signed int LONG
Definition swell-types.h:182
#define WDL_STATICFUNC_UNUSED
Definition wdltypes.h:87