15 #ifndef ATOMICADJUST_H
16 #define ATOMICADJUST_H
18 #include "dtoolbase.h"
19 #include "selectThreadImpl.h"
21 #if defined(CPPPARSER)
25 typedef void *UnalignedPointer;
26 typedef UnalignedPointer Pointer;
29 #elif defined(THREAD_DUMMY_IMPL) || defined(THREAD_SIMPLE_IMPL)
31 #include "atomicAdjustDummyImpl.h"
34 #elif (defined(__i386__) || defined(_M_IX86)) && !defined(__APPLE__)
39 #include "atomicAdjustI386Impl.h"
47 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1
48 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1
50 #elif (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))) || (defined(__clang__) && (__clang_major__ >= 3))
54 #include "atomicAdjustGccImpl.h"
57 #if (__GCC_ATOMIC_INT_LOCK_FREE + __GCC_ATOMIC_INT_LOCK_FREE) > 0
58 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1
60 #if __GCC_ATOMIC_POINTER_LOCK_FREE > 0
61 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1
64 #elif defined(THREAD_WIN32_IMPL)
66 #include "atomicAdjustWin32Impl.h"
69 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1
70 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1
72 #elif defined(THREAD_LINUX_IMPL)
74 #error Linux native threads are currently implemented only for i386; use Posix threads instead.
76 #elif defined(THREAD_POSIX_IMPL)
78 #include "atomicAdjustPosixImpl.h"
A trivial implementation for atomic adjustments for systems that don't require multiprogramming, and therefore don't require special atomic operations.