You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
5.6 KiB

  1. === modified file 'boost/detail/interlocked.hpp'
  2. --- boost/detail/interlocked.hpp 2014-08-22 00:51:15 +0000
  3. +++ boost/detail/interlocked.hpp 2014-08-22 18:54:49 +0000
  4. @@ -1,12 +1,6 @@
  5. #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
  6. #define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
  7. -// MS compatible compilers support #pragma once
  8. -
  9. -#if defined(_MSC_VER) && (_MSC_VER >= 1020)
  10. -# pragma once
  11. -#endif
  12. -
  13. //
  14. // boost/detail/interlocked.hpp
  15. //
  16. @@ -19,6 +13,11 @@
  17. #include <boost/config.hpp>
  18. +// MS compatible compilers support #pragma once
  19. +#ifdef BOOST_HAS_PRAGMA_ONCE
  20. +#pragma once
  21. +#endif
  22. +
  23. #if defined( BOOST_USE_WINDOWS_H )
  24. # include <windows.h>
  25. @@ -31,6 +30,30 @@
  26. # define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
  27. # define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
  28. +#elif defined( BOOST_USE_INTRIN_H )
  29. +
  30. +#include <intrin.h>
  31. +
  32. +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
  33. +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
  34. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
  35. +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
  36. +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
  37. +
  38. +# if defined(_M_IA64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__x86_64)
  39. +
  40. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
  41. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
  42. +
  43. +# else
  44. +
  45. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
  46. + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
  47. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
  48. + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
  49. +
  50. +# endif
  51. +
  52. #elif defined(_WIN32_WCE)
  53. #if _WIN32_WCE >= 0x600
  54. @@ -71,7 +94,7 @@
  55. #elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
  56. -#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600
  57. +#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1500
  58. #include <intrin.h>
  59. @@ -93,46 +116,53 @@
  60. #endif
  61. -# pragma intrinsic( _InterlockedIncrement )
  62. -# pragma intrinsic( _InterlockedDecrement )
  63. -# pragma intrinsic( _InterlockedCompareExchange )
  64. -# pragma intrinsic( _InterlockedExchange )
  65. -# pragma intrinsic( _InterlockedExchangeAdd )
  66. -
  67. # if defined(_M_IA64) || defined(_M_AMD64)
  68. extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
  69. extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
  70. -# pragma intrinsic( _InterlockedCompareExchangePointer )
  71. -# pragma intrinsic( _InterlockedExchangePointer )
  72. -
  73. -# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
  74. -# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
  75. -
  76. -# else
  77. -
  78. -# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
  79. - ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
  80. -# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
  81. - ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
  82. -
  83. -# endif
  84. -
  85. -# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
  86. -# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
  87. -# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
  88. -# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
  89. -# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
  90. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
  91. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
  92. +
  93. +# else
  94. +
  95. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
  96. + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
  97. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
  98. + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
  99. +
  100. +# endif
  101. +
  102. +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
  103. +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
  104. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
  105. +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
  106. +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
  107. +
  108. +// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.
  109. +#elif defined(__MINGW64_VERSION_MAJOR)
  110. +
  111. +// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.
  112. +#include <intrin.h>
  113. +
  114. +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
  115. +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
  116. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
  117. +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
  118. +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
  119. +# if defined(__x86_64__) || defined(__x86_64)
  120. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
  121. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
  122. +# else
  123. +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
  124. + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
  125. +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
  126. + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
  127. +# endif
  128. #elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
  129. -#if defined(__MINGW64__)
  130. -#define BOOST_INTERLOCKED_IMPORT
  131. -#else
  132. #define BOOST_INTERLOCKED_IMPORT __declspec(dllimport)
  133. -#endif
  134. -
  135. namespace boost
  136. {