6c9f5a1ca4
Upstream has accepted the NOP solution for arm and s390 but some patching may still be necessary. TBB is no longer required as the internal spinlocks are faster than the TBB implementation.
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
diff -up oiio-Release-1.1.10/src/include/thread.h.ppc oiio-Release-1.1.10/src/include/thread.h
|
|
--- oiio-Release-1.1.10/src/include/thread.h.ppc 2013-05-27 16:16:38.902025786 +0200
|
|
+++ oiio-Release-1.1.10/src/include/thread.h 2013-05-27 17:00:19.856167856 +0200
|
|
@@ -112,7 +112,7 @@ InterlockedExchangeAdd64 (volatile long
|
|
#endif
|
|
|
|
#if defined(__GNUC__) && (defined(_GLIBCXX_ATOMIC_BUILTINS) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 401))
|
|
-#if !defined(__FreeBSD__) || defined(__x86_64__)
|
|
+#if !defined(__FreeBSD__) && !defined(__powerpc__) || defined(__x86_64__)
|
|
#define USE_GCC_ATOMICS
|
|
#endif
|
|
#endif
|
|
@@ -235,6 +235,11 @@ atomic_exchange_and_add (volatile int *a
|
|
#elif defined(_MSC_VER)
|
|
// Windows
|
|
return _InterlockedExchangeAdd ((volatile LONG *)at, x);
|
|
+#elif defined (__powerpc__)
|
|
+ long long r;
|
|
+ r = *at;
|
|
+ *at += x;
|
|
+ return r;
|
|
#else
|
|
# error No atomics on this platform.
|
|
#endif
|
|
@@ -257,6 +262,11 @@ atomic_exchange_and_add (volatile long l
|
|
# else
|
|
return InterlockedExchangeAdd64 ((volatile LONGLONG *)at, x);
|
|
# endif
|
|
+#elif defined (__powerpc__)
|
|
+ long long r;
|
|
+ r = *at;
|
|
+ *at += x;
|
|
+ return r;
|
|
#else
|
|
# error No atomics on this platform.
|
|
#endif
|
|
@@ -280,6 +290,8 @@ atomic_compare_and_exchange (volatile in
|
|
return a->compare_and_swap (newval, compareval) == newval;
|
|
#elif defined(_MSC_VER)
|
|
return (_InterlockedCompareExchange ((volatile LONG *)at, newval, compareval) == compareval);
|
|
+#elif defined(__powerpc__)
|
|
+ return ((*at == compareval) ? (*at = newval), 1 : 0);
|
|
#else
|
|
# error No atomics on this platform.
|
|
#endif
|
|
@@ -297,6 +309,8 @@ atomic_compare_and_exchange (volatile lo
|
|
return a->compare_and_swap (newval, compareval) == newval;
|
|
#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
|