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__ // NOLINT
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)
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)
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