the GNU General Public License.
*/
-#ifndef __TBB_machine_H
+// TODO: revise by comparing with mac_ppc.h
+
+#if !defined(__TBB_machine_H) || defined(__TBB_machine_ibm_aix51_H)
#error Do not include this file directly; include tbb_machine.h instead
#endif
+#define __TBB_machine_ibm_aix51_H
+
#define __TBB_WORDSIZE 8
#define __TBB_BIG_ENDIAN 1
#include <sched.h>
extern "C" {
-
int32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);
int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);
-void __TBB_machine_flush ();
-
+void __TBB_machine_flush ();
+void __TBB_machine_lwsync ();
+void __TBB_machine_isync ();
}
-#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cas_32(P,V,C)
-#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cas_64(P,V,C)
-#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cas_64(P,V,C)
+// Mapping of old entry point names retained for the sake of backward binary compatibility
+#define __TBB_machine_cmpswp4 __TBB_machine_cas_32
+#define __TBB_machine_cmpswp8 __TBB_machine_cas_64
+
#define __TBB_Yield() sched_yield()
+#define __TBB_USE_GENERIC_PART_WORD_CAS 1
+#define __TBB_USE_GENERIC_FETCH_ADD 1
+#define __TBB_USE_GENERIC_FETCH_STORE 1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE 1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE 1
+
#if __GNUC__
-#define __TBB_full_memory_fence() __asm__ __volatile__("sync": : :"memory")
-#define __TBB_release_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
+ #define __TBB_control_consistency_helper() __asm__ __volatile__( "isync": : :"memory")
+ #define __TBB_acquire_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
+ #define __TBB_release_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
+ #define __TBB_full_memory_fence() __asm__ __volatile__( "sync": : :"memory")
#else
-// IBM C++ Compiler does not support inline assembly
-#define __TBB_full_memory_fence() __TBB_machine_flush ()
-#define __TBB_release_consistency_helper() __TBB_machine_flush ()
+ // IBM C++ Compiler does not support inline assembly
+ // TODO: Since XL 9.0 or earlier GCC syntax is supported. Replace with more
+ // lightweight implementation (like in mac_ppc.h)
+ #define __TBB_control_consistency_helper() __TBB_machine_isync ()
+ #define __TBB_acquire_consistency_helper() __TBB_machine_lwsync ()
+ #define __TBB_release_consistency_helper() __TBB_machine_lwsync ()
+ #define __TBB_full_memory_fence() __TBB_machine_flush ()
#endif