17 #if !defined(__TBB_machine_H) || defined(__TBB_machine_macos_common_H)
18 #error Do not #include this internal file directly; use public TBB headers instead.
21 #define __TBB_machine_macos_common_H
24 #define __TBB_Yield() sched_yield()
28 #include <sys/types.h>
29 #include <sys/sysctl.h>
32 int name[2] = {CTL_HW, HW_AVAILCPU};
34 size_t size =
sizeof(ncpu);
35 sysctl(
name, 2, &ncpu, &
size, NULL, 0 );
39 #define __TBB_HardwareConcurrency() __TBB_macos_available_cpu()
41 #ifndef __TBB_full_memory_fence
44 #define __TBB_UnknownArchitecture 1
47 #if __TBB_UnknownArchitecture
49 #include <libkern/OSAtomic.h>
54 int64_t*
address = (int64_t*)ptr;
55 while( !OSAtomicCompareAndSwap64Barrier(comparand,
value,
address) ){
59 int64_t snapshot = OSAtomicAdd64( 0,
address );
61 if( snapshot!=comparand )
return snapshot;
66 #define __TBB_machine_cmpswp8 __TBB_machine_cmpswp8_OsX
70 #if __TBB_UnknownArchitecture
72 #ifndef __TBB_WORDSIZE
73 #define __TBB_WORDSIZE __SIZEOF_POINTER__
76 #ifdef __TBB_ENDIANNESS
79 #define __TBB_ENDIANNESS __TBB_ENDIAN_BIG
80 #elif __LITTLE_ENDIAN__
81 #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
83 #define __TBB_ENDIANNESS __TBB_ENDIAN_UNSUPPORTED
91 #define __TBB_control_consistency_helper() OSMemoryBarrier()
92 #define __TBB_acquire_consistency_helper() OSMemoryBarrier()
93 #define __TBB_release_consistency_helper() OSMemoryBarrier()
94 #define __TBB_full_memory_fence() OSMemoryBarrier()
99 int32_t*
address = (int32_t*)ptr;
100 while( !OSAtomicCompareAndSwap32Barrier(comparand,
value,
address) ){
102 if( snapshot!=comparand )
return snapshot;
110 return OSAtomicAdd32Barrier(addend, (int32_t*)ptr) - addend;
116 return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;
119 #define __TBB_USE_GENERIC_PART_WORD_CAS 1
120 #define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD 1
121 #define __TBB_USE_GENERIC_FETCH_STORE 1
122 #define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE 1
123 #define __TBB_USE_GENERIC_RELAXED_LOAD_STORE 1
124 #if __TBB_WORDSIZE == 4
125 #define __TBB_USE_GENERIC_DWORD_LOAD_STORE 1
127 #define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
static int32_t __TBB_machine_cmpswp4(volatile void *ptr, int32_t value, int32_t comparand)
static int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend)
static int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t value, int64_t comparand)
static int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend)
static int __TBB_macos_available_cpu()
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
void const char const char int ITT_FORMAT __itt_group_sync x void const char * name
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void * address
bool is_aligned(T *pointer, uintptr_t alignment)
A function to check if passed in pointer is aligned on a specific border.