You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by fa...@apache.org on 2008/01/16 13:11:34 UTC
svn commit: r612430 - /stdcxx/branches/4.2.x/include/rw/_mutex.h
Author: faridz
Date: Wed Jan 16 04:11:24 2008
New Revision: 612430
URL: http://svn.apache.org/viewvc?rev=612430&view=rev
Log:
2008-01-16 Farid Zaripov <fa...@epam.com>
* include/rw/_mutex.h: Use intrinsic interlocked functions on MSVC 7.1 and ICC.
Declare the interlocked functions instead of #including <intrin.h>.
Modified:
stdcxx/branches/4.2.x/include/rw/_mutex.h
Modified: stdcxx/branches/4.2.x/include/rw/_mutex.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/rw/_mutex.h?rev=612430&r1=612429&r2=612430&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/include/rw/_mutex.h (original)
+++ stdcxx/branches/4.2.x/include/rw/_mutex.h Wed Jan 16 04:11:24 2008
@@ -119,6 +119,12 @@
# include <windows.h>
# define _RWSTD_MUTEX_T _RTL_CRITICAL_SECTION
+# ifndef _MSC_VER
+# define _InterlockedIncrement InterlockedIncrement
+# define _InterlockedDecrement InterlockedDecrement
+# define _InterlockedExchange InterlockedExchange
+# endif // _MSC_VER
+
# else // if defined (_RWSTD_NO_FWD_DECLARATIONS)
// avoid #including this header (MFC doesn't like it)
@@ -142,7 +148,7 @@
DeleteCriticalSection (_RTL_CRITICAL_SECTION*);
-#if defined _RWSTD_INTERLOCKED_T && (!defined (_MSC_VER) || _MSC_VER < 1400)
+#if defined (_RWSTD_INTERLOCKED_T) && !defined (_MSC_VER)
__declspec (dllimport) long __stdcall
InterlockedIncrement (_RWSTD_INTERLOCKED_T*);
@@ -157,7 +163,7 @@
# define _InterlockedDecrement InterlockedDecrement
# define _InterlockedExchange InterlockedExchange
-#endif // _RWSTD_INTERLOCKED_T && (!_MSC_VER || _MSC_VER < 1400)
+#endif // _RWSTD_INTERLOCKED_T && !_MSC_VER
} // extern "C"
@@ -176,21 +182,35 @@
# endif // _RWSTD_NO_FWD_DECLARATIONS
-# if defined (_MSC_VER) && _MSC_VER >= 1400 && !defined (__INTEL_COMPILER)
-# include <intrin.h>
-
-# pragma intrinsic (_InterlockedIncrement)
-# pragma intrinsic (_InterlockedIncrement16)
-# pragma intrinsic (_InterlockedDecrement)
-# pragma intrinsic (_InterlockedDecrement16)
-# pragma intrinsic (_InterlockedExchange)
+# ifdef _MSC_VER
+extern "C" long __cdecl _InterlockedIncrement (volatile long*);
+extern "C" long __cdecl _InterlockedDecrement (volatile long*);
+extern "C" long __cdecl _InterlockedExchange (volatile long*, long);
+# ifndef __INTEL_COMPILER
+# pragma intrinsic (_InterlockedIncrement)
+# pragma intrinsic (_InterlockedDecrement)
+# pragma intrinsic (_InterlockedExchange)
+# endif // __INTEL_COMPILER
+
+# if _MSC_VER >= 1400 && !defined (__INTEL_COMPILER)
+extern "C" short __cdecl _InterlockedIncrement16 (volatile short*);
+extern "C" short __cdecl _InterlockedDecrement16 (volatile short*);
+# pragma intrinsic (_InterlockedIncrement16)
+# pragma intrinsic (_InterlockedDecrement16)
+# endif // _MSC_VER >= 1400 && !__INTEL_COMPILER
# ifdef _M_X64
-# pragma intrinsic (_InterlockedIncrement64)
-# pragma intrinsic (_InterlockedDecrement64)
-# pragma intrinsic (_InterlockedExchange64)
-# endif
-# endif // _MSC_VER >= 1400 && !__INTEL_COMPILER
+extern "C" long long __cdecl _InterlockedIncrement64 (volatile long long*);
+extern "C" long long __cdecl _InterlockedDecrement64 (volatile long long*);
+extern "C" long long __cdecl _InterlockedExchange64 (volatile long long*,
+ long long);
+# ifndef __INTEL_COMPILER
+# pragma intrinsic (_InterlockedIncrement64)
+# pragma intrinsic (_InterlockedDecrement64)
+# pragma intrinsic (_InterlockedExchange64)
+# endif // __INTEL_COMPILER
+# endif // _M_X64
+# endif // _MSC_VER
_RWSTD_NAMESPACE (__rw) {