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)
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