Fixes by w3seek regarding interlocked functions. These were due to my

missing a mismatch between the glib functions and windows variants.

svn path=/trunk/; revision=13892
This commit is contained in:
Art Yerkes 2005-03-08 23:01:54 +00:00
parent 34d49aaa33
commit 53af8e03f3

View file

@ -136,8 +136,8 @@ InterlockedExchange(LPLONG target, LONG value )
"lock\n\txchgl %0,(%1)"
:"=r" (ret):"r" (target), "0" (value):"memory" );
#elif defined(_M_PPC)
ret = *target;
while( InterlockedCompareExchange( target, value, ret ) != value );
ret = *(volatile LONG *)target;
while( InterlockedCompareExchange( target, value, ret ) != ret );
#endif
return ret;
}
@ -202,9 +202,11 @@ InterlockedExchangeAdd(
:"r" (Addend), "0" (Increment)
:"memory" );
#elif defined(_M_PPC)
do
ret = *Addend;
while (!InterlockedCompareExchange(Addend, ret, ret + Increment));
LONG newval;
do {
ret = *(volatile LONG *)Addend;
newval = ret + Increment;
} while (InterlockedCompareExchange(Addend, ret, newval) != ret);
#endif
return ret;
}