From e4e38170f948a80ca585d2a0a6ea409ec91ed4ce Mon Sep 17 00:00:00 2001 From: rfm Date: Wed, 25 May 2011 16:47:11 +0000 Subject: [PATCH] Tweak atomic inc/dec code git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@33116 72102866-910b-0410-8b05-ffd578937521 --- Source/NSObject.m | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/NSObject.m b/Source/NSObject.m index 6e136f894..a19226773 100644 --- a/Source/NSObject.m +++ b/Source/NSObject.m @@ -226,12 +226,15 @@ typedef int32_t volatile *gsatomic_t; #define GSATOMICREAD(X) (*(X)) -#ifdef ATOMICTEST +#define ATOMIC_TESTING 1 + +#if defined(ATOMIC_TESTING) static __inline__ int GSAtomicIncrement(gsatomic_t X) { - int32_t tmp = 1; + register int tmp; __asm__ __volatile__ ( + "movl $1, %0\n\t" "lock xaddl %0, %1" :"=r" (tmp), "=m" (*X) :"r" (tmp), "m" (*X) @@ -242,8 +245,10 @@ GSAtomicIncrement(gsatomic_t X) static __inline__ int GSAtomicDecrement(gsatomic_t X) { - int32_t tmp = -1; + register int tmp; __asm__ __volatile__ ( + "movl $1, %0\n\t" + "negl %0\n\t" "lock xaddl %0, %1" :"=r" (tmp), "=m" (*X) :"r" (tmp), "m" (*X)