diff -up oiio-Release-1.1.3/src/include/thread.h.ppc oiio-Release-1.1.3/src/include/thread.h --- oiio-Release-1.1.3/src/include/thread.h.ppc 2013-01-10 02:13:37.000000000 +0100 +++ oiio-Release-1.1.3/src/include/thread.h 2013-01-28 15:07:23.190624263 +0100 @@ -98,7 +98,7 @@ #endif #if defined(__GNUC__) && (defined(_GLIBCXX_ATOMIC_BUILTINS) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 401)) -#if !defined(__FreeBSD__) || defined(__x86_64__) +#if !defined(__FreeBSD__) && !defined(__PPC__) || defined(__x86_64__) #define USE_GCC_ATOMICS #endif #endif @@ -224,6 +224,11 @@ atomic_exchange_and_add (volatile int *a #elif defined(_MSC_VER) // Windows return _InterlockedExchangeAdd ((volatile LONG *)at, x); +#elif defined (__PPC__) + long long r; + r = *at; + *at += x; + return r; #else # error No atomics on this platform. #endif @@ -249,6 +254,11 @@ atomic_exchange_and_add (volatile long l # else return InterlockedExchangeAdd64 ((volatile LONGLONG *)at, x); # endif +#elif defined (__PPC__) + long long r; + r = *at; + *at += x; + return r; #else # error No atomics on this platform. #endif @@ -274,6 +284,8 @@ atomic_compare_and_exchange (volatile in return OSAtomicCompareAndSwap32Barrier (compareval, newval, at); #elif defined(_MSC_VER) return (_InterlockedCompareExchange ((volatile LONG *)at, newval, compareval) == compareval); +#elif defined(__PPC__) + return ((*at == compareval) ? (*at = newval), 1 : 0); #else # error No atomics on this platform. #endif @@ -293,6 +305,8 @@ atomic_compare_and_exchange (volatile lo return OSAtomicCompareAndSwap64Barrier (compareval, newval, at); #elif defined(_MSC_VER) return (_InterlockedCompareExchange64 ((volatile LONGLONG *)at, newval, compareval) == compareval); +#elif defined(__PPC__) + return ((*at == compareval) ? (*at = newval), 1 : 0); #else # error No atomics on this platform. #endif @@ -324,7 +338,7 @@ pause (int delay) { #if USE_TBB __TBB_Pause(delay); -#elif defined(__GNUC__) +#elif defined(__GNUC__) && !defined (__PPC__) for (int i = 0; i < delay; ++i) { __asm__ __volatile__("pause;"); }