17 #if !defined(__TBB_machine_H) || defined(__TBB_machine_icc_generic_H)    18 #error Do not #include this internal file directly; use public TBB headers instead.    21 #if ! __TBB_ICC_BUILTIN_ATOMICS_PRESENT    22     #error "Intel(R) C++ Compiler of at least 12.0 version is needed to use ICC intrinsics port"    25 #define __TBB_machine_icc_generic_H    38     #define __TBB_WORDSIZE 4    40     #define __TBB_WORDSIZE 8    42 #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE    45 #ifndef __TBB_compiler_fence    48     #pragma intrinsic(_ReadWriteBarrier)    49     #define __TBB_compiler_fence()    _ReadWriteBarrier()    51     #define __TBB_compiler_fence()    __asm__ __volatile__("": : :"memory")    55 #ifndef __TBB_full_memory_fence    58     #pragma intrinsic(_mm_mfence)    59     #define __TBB_full_memory_fence() _mm_mfence()    61     #define __TBB_full_memory_fence() __asm__ __volatile__("mfence": : :"memory")    65 #ifndef __TBB_control_consistency_helper    66 #define __TBB_control_consistency_helper() __TBB_compiler_fence()    79 namespace icc_intrinsics_port {
    93 template <
typename T, 
size_t S>
   103 template <
typename T, 
size_t S>
   105     static inline T 
load ( 
const T& location ) {
   113 template <
typename T, 
size_t S>
   115     static T 
load ( 
const volatile T& location ) {
   126 namespace tbb{ 
namespace internal { 
namespace icc_intrinsics_port{
   135 #define __TBB_MACHINE_DEFINE_ATOMICS(S,T,M)                                                     \   136 inline T __TBB_machine_cmpswp##S##M( volatile void *ptr, T value, T comparand ) {               \   137     __atomic_compare_exchange_strong_explicit(                                                  \   141             , tbb::internal::icc_intrinsics_port::M                                             \   142             , tbb::internal::icc_intrinsics_port::M);                                           \   146 inline T __TBB_machine_fetchstore##S##M(volatile void *ptr, T value) {                          \   147     return __atomic_exchange_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);   \   150 inline T __TBB_machine_fetchadd##S##M(volatile void *ptr, T value) {                            \   151     return __atomic_fetch_add_explicit((T*)ptr, value, tbb::internal::icc_intrinsics_port::M);  \   175 #undef __TBB_MACHINE_DEFINE_ATOMICS   177 #define __TBB_USE_FENCED_ATOMICS                            1   180 #if __TBB_FORCE_64BIT_ALIGNMENT_BROKEN   190 template <
typename T>
   191 struct machine_load_store<T,8> {
   196             return __TBB_machine_generic_load8acquire(&location);
   203             return __TBB_machine_generic_store8release(&location,
value);
   208 template <
typename T>
   209 struct machine_load_store_relaxed<T,8> {
   210     static T 
load( 
const volatile T& location ) {
   214             return __TBB_machine_generic_load8relaxed(&location);
   217     static void store( 
volatile T &location, T 
value ) {
   221             return __TBB_machine_generic_store8relaxed(&location,
value);
   226 template <
typename T >
   227 struct machine_load_store_seq_cst<T,8> {
   228     static T 
load ( 
const volatile T& location ) {
   232             return __TBB_machine_generic_load8full_fence(&location);
   237     static void store ( 
volatile T &location, T 
value ) {
   241             return __TBB_machine_generic_store8full_fence(&location,
value);
   249 template <
typename T>
   254 template <
typename T>
 
static void store(volatile T &location, T value)
 
void __TBB_machine_AND(T *operand, T addend)
 
static void store(T &location, T value)
 
bool is_aligned(T *pointer, uintptr_t alignment)
A function to check if passed in pointer is aligned on a specific border.
 
static T load(const volatile T &location)
 
#define __TBB_MACHINE_DEFINE_STORE8_GENERIC_FENCED(M)
 
static T load(const T &location)
 
#define __TBB_MACHINE_DEFINE_ATOMICS(S, T, M)
 
static void store_with_release(volatile T &location, T value)
 
T convert_argument(T value)
 
static T load_with_acquire(const volatile T &location)
 
void __TBB_machine_OR(T *operand, T addend)
 
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
 
#define __TBB_MACHINE_DEFINE_LOAD8_GENERIC_FENCED(M)