X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tbb%2Finclude%2Ftbb%2Fmachine%2Fxbox360_ppc.h;h=e95dbbd402a2afd687ff59354a05b1dfe1bb0838;hb=4c96b4064a92f65beead3cb2453d727187bed40f;hp=7bde3082a045bcff000267a53c041532441e5284;hpb=46ab0514ba58ee00183ff0584c7ea7c9e3d76494;p=casparcg diff --git a/tbb/include/tbb/machine/xbox360_ppc.h b/tbb/include/tbb/machine/xbox360_ppc.h index 7bde3082a..e95dbbd40 100644 --- a/tbb/include/tbb/machine/xbox360_ppc.h +++ b/tbb/include/tbb/machine/xbox360_ppc.h @@ -26,10 +26,14 @@ 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_xbox360_ppc_H) #error Do not include this file directly; include tbb_machine.h instead #endif +#define __TBB_machine_xbox360_ppc_H + #define NONET #define NOD3D #include "xtl.h" @@ -38,6 +42,8 @@ #if _MSC_VER >= 1300 extern "C" void _MemoryBarrier(); #pragma intrinsic(_MemoryBarrier) +#define __TBB_control_consistency_helper() __isync() +#define __TBB_acquire_consistency_helper() _MemoryBarrier() #define __TBB_release_consistency_helper() _MemoryBarrier() #endif @@ -46,27 +52,30 @@ extern "C" void _MemoryBarrier(); #define __TBB_WORDSIZE 4 #define __TBB_BIG_ENDIAN 1 -//todo: define __TBB_DECL_FENCED_ATOMICS and define acquire/release primitives to maximize performance - -typedef __int64 int64_t; //required for definition of Store8/Load8 in atomic.h -typedef unsigned char uint8_t; //same reason +//todo: define __TBB_USE_FENCED_ATOMICS and define acquire/release primitives to maximize performance -inline __int32 __TBB_machine_cmpswp4(volatile void *ptr, __int32 value, __int32 comparand ) -{ - __lwsync(); +inline __int32 __TBB_machine_cmpswp4(volatile void *ptr, __int32 value, __int32 comparand ) { + __sync(); __int32 result = InterlockedCompareExchange((volatile LONG*)ptr, value, comparand); - __lwsync(); + __isync(); return result; } inline __int64 __TBB_machine_cmpswp8(volatile void *ptr, __int64 value, __int64 comparand ) { - __lwsync(); + __sync(); __int64 result = InterlockedCompareExchange64((volatile LONG64*)ptr, value, comparand); - __lwsync(); + __isync(); return result; } +#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 +#define __TBB_USE_GENERIC_DWORD_LOAD_STORE 1 + #pragma optimize( "", off ) inline void __TBB_machine_pause (__int32 delay ) { @@ -74,10 +83,6 @@ inline void __TBB_machine_pause (__int32 delay ) } #pragma optimize( "", on ) - -#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C) -#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C) -#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C) #define __TBB_Yield() Sleep(0) #define __TBB_Pause(V) __TBB_machine_pause(V)