Ticket #4849: mingw64_iterlocked.patch

File mingw64_iterlocked.patch, 2.8 KB (added by Bobby Mihalca <bobbymihalca@…>, 9 years ago)
  • boost/detail/interlocked.hpp

    diff --git a/boost/detail/interlocked.hpp b/boost/detail/interlocked.hpp
    index 75e5a30..48bb1aa 100644
    a b extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );  
    125125# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
    126126# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
    127127
    128 #elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
     128#elif defined( __MINGW64__ )
    129129
    130 #if defined(__MINGW64__)
    131 #define BOOST_INTERLOCKED_IMPORT
    132 #else
    133 #define BOOST_INTERLOCKED_IMPORT __declspec(dllimport)
    134 #endif
     130#include <intrin.h>
     131#define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
     132#define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
     133#define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
     134#define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
     135#define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
     136#define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
     137#define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
    135138
     139#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
    136140
    137141namespace boost
    138142{
    namespace boost  
    140144namespace detail
    141145{
    142146
    143 extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * );
    144 extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * );
    145 extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long );
    146 extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long );
    147 extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long );
     147extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
     148extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
     149extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
     150extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
     151extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
    148152
    149153# if defined(_M_IA64) || defined(_M_AMD64)
    150 extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* );
    151 extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* );
     154extern "C" __declspec(dllimport) void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* );
     155extern "C" __declspec(dllimport) void* __stdcall InterlockedExchangePointer( void* volatile *, void* );
    152156# endif
    153157
    154158} // namespace detail