[ros-diffs] [tkreuzer] 34749: add _InterlockedExchange64 to intin_x86.h

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Thu Jul 24 21:22:16 CEST 2008


Author: tkreuzer
Date: Thu Jul 24 14:22:16 2008
New Revision: 34749

URL: http://svn.reactos.org/svn/reactos?rev=34749&view=rev
Log:
add _InterlockedExchange64 to intin_x86.h

Modified:
    branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h

Modified: branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h?rev=34749&r1=34748&r2=34749&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h [iso-8859-1] Thu Jul 24 14:22:16 2008
@@ -121,6 +121,15 @@
 	return __sync_lock_test_and_set(Target, Value);
 }
 
+#if defined(_M_AMD64)
+static __inline__ __attribute__((always_inline)) long long _InterlockedExchange64(volatile long long * const Target, const long long Value)
+{
+	/* NOTE: __sync_lock_test_and_set would be an acquire barrier, so we force a full barrier */
+	__sync_synchronize();
+	return __sync_lock_test_and_set(Target, Value);
+}
+#endif
+
 static __inline__ __attribute__((always_inline)) void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value)
 {
 	/* NOTE: ditto */



More information about the Ros-diffs mailing list