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_... ============================================================================== --- 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) {