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()
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
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
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
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_machine_cmpswp4
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.