Author: jgardou
Date: Fri Jul 13 14:51:46 2012
New Revision: 56881

URL: http://svn.reactos.org/svn/reactos?rev=56881&view=rev
Log:
[GCC-INTRINSICS]
 * Use GCC intrinsics for InterlockedIncrement/Decrement functions 

Modified:
    trunk/reactos/include/crt/mingw32/intrin_x86.h

Modified: trunk/reactos/include/crt/mingw32/intrin_x86.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/mingw32/intrin_x86.h?rev=56881&r1=56880&r2=56881&view=diff
==============================================================================
--- trunk/reactos/include/crt/mingw32/intrin_x86.h [iso-8859-1] (original)
+++ trunk/reactos/include/crt/mingw32/intrin_x86.h [iso-8859-1] Fri Jul 13 
14:51:46 2012
@@ -248,6 +248,38 @@
 }
 #endif
 
+__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend)
+{
+       return __sync_sub_and_fetch(lpAddend, 1);
+}
+
+__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend)
+{
+       return __sync_add_and_fetch(lpAddend, 1);
+}
+
+__INTRIN_INLINE short _InterlockedDecrement16(volatile short * const lpAddend)
+{
+       return __sync_sub_and_fetch(lpAddend, 1);
+}
+
+__INTRIN_INLINE short _InterlockedIncrement16(volatile short * const lpAddend)
+{
+       return __sync_add_and_fetch(lpAddend, 1);
+}
+
+#if defined(_M_AMD64)
+__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const 
lpAddend)
+{
+       return __sync_sub_and_fetch(lpAddend, 1);
+}
+
+__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const 
lpAddend)
+{
+       return __sync_add_and_fetch(lpAddend, 1);
+}
+#endif
+
 #else
 
 __INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const 
Destination, const char Exchange, const char Comperand)
@@ -458,6 +490,38 @@
 
        return y;
 }
+
+__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend)
+{
+       return _InterlockedExchangeAdd(lpAddend, -1) - 1;
+}
+
+__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend)
+{
+       return _InterlockedExchangeAdd(lpAddend, 1) + 1;
+}
+
+__INTRIN_INLINE short _InterlockedDecrement16(volatile short * const lpAddend)
+{
+       return _InterlockedExchangeAdd16(lpAddend, -1) - 1;
+}
+
+__INTRIN_INLINE short _InterlockedIncrement16(volatile short * const lpAddend)
+{
+       return _InterlockedExchangeAdd16(lpAddend, 1) + 1;
+}
+
+#if defined(_M_AMD64)
+__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const 
lpAddend)
+{
+       return _InterlockedExchangeAdd64(lpAddend, -1) - 1;
+}
+
+__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const 
lpAddend)
+{
+       return _InterlockedExchangeAdd64(lpAddend, 1) + 1;
+}
+#endif
 
 #endif
 
@@ -504,38 +568,6 @@
 
        return Value;
 }
-
-__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend)
-{
-       return _InterlockedExchangeAdd(lpAddend, -1) - 1;
-}
-
-__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend)
-{
-       return _InterlockedExchangeAdd(lpAddend, 1) + 1;
-}
-
-__INTRIN_INLINE short _InterlockedDecrement16(volatile short * const lpAddend)
-{
-       return _InterlockedExchangeAdd16(lpAddend, -1) - 1;
-}
-
-__INTRIN_INLINE short _InterlockedIncrement16(volatile short * const lpAddend)
-{
-       return _InterlockedExchangeAdd16(lpAddend, 1) + 1;
-}
-
-#if defined(_M_AMD64)
-__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const 
lpAddend)
-{
-       return _InterlockedExchangeAdd64(lpAddend, -1) - 1;
-}
-
-__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const 
lpAddend)
-{
-       return _InterlockedExchangeAdd64(lpAddend, 1) + 1;
-}
-#endif
 
 __INTRIN_INLINE unsigned char _interlockedbittestandreset(volatile long * a, 
const long b)
 {


Reply via email to