6 #ifndef XENIUM_DETAIL_PORT_HPP
7 #define XENIUM_DETAIL_PORT_HPP
9 #if !defined(__SANITIZE_THREAD__) && defined(__has_feature)
10 # if __has_feature(thread_sanitizer)
11 # define __SANITIZE_THREAD__
15 #if defined(__SANITIZE_THREAD__)
16 # define TSAN_MEMORY_ORDER(tsan_order, _) tsan_order
18 # define TSAN_MEMORY_ORDER(_tsan_order, normal_order) normal_order
21 #if !defined(XENIM_FORCEINLINE)
22 # if defined(_MSC_VER)
23 # define XENIUM_FORCEINLINE __forceinline
24 # elif defined(__GNUC__) && __GNUC__ > 3
25 # define XENIUM_FORCEINLINE inline __attribute__((__always_inline__))
27 # define XENIUM_FORCEINLINE inline
31 #if !defined(XENIUM_NOINLINE)
32 # if defined(_MSC_VER)
33 # define XENIUM_NOINLINE __declspec(noinline)
34 # elif defined(__GNUC__) && __GNUC__ > 3
35 # define XENIUM_NOINLINE __attribute__ ((__noinline__))
37 # define XENIUM_NOINLINE
41 #if defined(__has_builtin)
42 # if __has_builtin(__builtin_expect)
43 # define XENIUM_LIKELY(x) __builtin_expect(x, 1)
44 # define XENIUM_UNLIKELY(x) __builtin_expect(x, 0)
48 #if !defined(XENIUM_LIKELY) || !defined(XENIUM_UNLIKELY)
49 # define XENIUM_LIKELY(x) x
50 # define XENIUM_UNLIKELY(x) x
53 #if !defined(XENIUM_ARCH_X86) && (defined(__x86_64__) || defined(_M_AMD64))
54 # define XENIUM_ARCH_X86
57 #if !defined(XENIUM_ARCH_SPARC) && defined(__sparc__)
58 # define XENIUM_ARCH_SPARC