17 #if !defined(__TBB_machine_H) || defined(__TBB_machine_linux_intel64_H)
18 #error Do not #include this internal file directly; use public TBB headers instead.
21 #define __TBB_machine_linux_intel64_H
26 #define __TBB_WORDSIZE 8
27 #define __TBB_ENDIANNESS __TBB_ENDIAN_LITTLE
29 #define __TBB_compiler_fence() __asm__ __volatile__("": : :"memory")
30 #define __TBB_control_consistency_helper() __TBB_compiler_fence()
31 #define __TBB_acquire_consistency_helper() __TBB_compiler_fence()
32 #define __TBB_release_consistency_helper() __TBB_compiler_fence()
34 #ifndef __TBB_full_memory_fence
35 #define __TBB_full_memory_fence() __asm__ __volatile__("mfence": : :"memory")
38 #define __TBB_MACHINE_DEFINE_ATOMICS(S,T,X) \
39 static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
43 __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
44 : "=a"(result), "=m"(*(volatile T*)ptr) \
45 : "q"(value), "0"(comparand), "m"(*(volatile T*)ptr) \
50 static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
53 __asm__ __volatile__("lock\nxadd" X " %0,%1" \
54 : "=r"(result),"=m"(*(volatile T*)ptr) \
55 : "0"(addend), "m"(*(volatile T*)ptr) \
60 static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
63 __asm__ __volatile__("lock\nxchg" X " %0,%1" \
64 : "=r"(result),"=m"(*(volatile T*)ptr) \
65 : "0"(value), "m"(*(volatile T*)ptr) \
75 #undef __TBB_MACHINE_DEFINE_ATOMICS
78 __asm__ __volatile__(
"lock\norq %1,%0" :
"=m"(*(
volatile uint64_t*)ptr) :
"r"(
value),
"m"(*(
volatile uint64_t*)ptr) :
"memory");
82 __asm__ __volatile__(
"lock\nandq %1,%0" :
"=m"(*(
volatile uint64_t*)ptr) :
"r"(
value),
"m"(*(
volatile uint64_t*)ptr) :
"memory");
85 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
86 #define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
88 #define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE 1
89 #define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE 1
90 #define __TBB_USE_GENERIC_RELAXED_LOAD_STORE 1
91 #define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
static void __TBB_machine_and(volatile void *ptr, uint64_t value)
#define __TBB_MACHINE_DEFINE_ATOMICS(S, T, X)
static void __TBB_machine_or(volatile void *ptr, uint64_t 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 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