diff --git a/CMakeModules/CheckAtomicOps.cmake b/CMakeModules/CheckAtomicOps.cmake index 07a13c05e..9cfd899c0 100644 --- a/CMakeModules/CheckAtomicOps.cmake +++ b/CMakeModules/CheckAtomicOps.cmake @@ -81,8 +81,9 @@ CHECK_CXX_SOURCE_RUNS(" int main(int, const char**) { - __declspec(align(32)) volatile long value = 0; - __declspec(align(32)) volatile void* ptr = &value; + volatile long value = 0; + long data = 0; + long* volatile ptr = &data; InterlockedIncrement(&value); InterlockedDecrement(&value); @@ -90,7 +91,7 @@ int main(int, const char**) if (0 != InterlockedCompareExchange(&value, 1, 0)) return EXIT_FAILURE; - if (ptr != InterlockedCompareExchangePointer(&ptr, ptr, ptr)) + if (ptr != InterlockedCompareExchangePointer((PVOID volatile*)&ptr, (PVOID)ptr, (PVOID)ptr)) return EXIT_FAILURE; return EXIT_SUCCESS; @@ -99,4 +100,4 @@ int main(int, const char**) IF(NOT _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_SUN AND NOT _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) SET(_OPENTHREADS_ATOMIC_USE_MUTEX) -ENDIF(NOT _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_SUN AND NOT _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) \ No newline at end of file +ENDIF(NOT _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS AND NOT _OPENTHREADS_ATOMIC_USE_SUN AND NOT _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) diff --git a/include/OpenThreads/Atomic b/include/OpenThreads/Atomic index 3a0fe9f6a..b29e475d8 100644 --- a/include/OpenThreads/Atomic +++ b/include/OpenThreads/Atomic @@ -99,7 +99,7 @@ class Atomic { mutable Mutex _mutex; #endif #if defined(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) - __declspec(align(32)) volatile long _value; + volatile long _value; #elif defined(_OPENTHREADS_ATOMIC_USE_SUN) volatile uint_t _value; #else @@ -129,7 +129,7 @@ public: #elif defined(_OPENTHREADS_ATOMIC_USE_SUN) return ptrOld == atomic_cas_ptr(&_ptr, ptrOld, ptrNew); #elif defined(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) - return ptrOld == InterlockedCompareExchangePointer(&_ptr, ptrNew, ptrOld); + return ptrOld == InterlockedCompareExchangePointer((PVOID volatile*)&_ptr, (PVOID)ptrNew, (PVOID)ptrOld); #elif defined(_OPENTHREADS_ATOMIC_USE_MUTEX) ScopedLock lock(_mutex); if (_ptr != ptrOld) @@ -171,9 +171,6 @@ private: #if defined(_OPENTHREADS_ATOMIC_USE_MUTEX) mutable Mutex _mutex; -#endif -#if defined(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED) - __declspec(align(32)) #endif T* volatile _ptr; };