xenium
Loading...
Searching...
No Matches
port.hpp
1//
2// Copyright (c) 2018-2020 Manuel Pöter.
3// Licensed under the MIT License. See LICENSE file in the project root for full license information.
4//
5
6#ifndef XENIUM_DETAIL_PORT_HPP
7#define XENIUM_DETAIL_PORT_HPP
8
9#if !defined(__SANITIZE_THREAD__) && defined(__has_feature)
10# if __has_feature(thread_sanitizer)
11# define __SANITIZE_THREAD__
12# endif
13#endif
14
15#if defined(__SANITIZE_THREAD__)
16# define TSAN_MEMORY_ORDER(tsan_order, _) tsan_order
17#else
18# define TSAN_MEMORY_ORDER(_tsan_order, normal_order) normal_order
19#endif
20
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__))
26# else
27# define XENIUM_FORCEINLINE inline
28# endif
29#endif
30
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__))
36# else
37# define XENIUM_NOINLINE
38# endif
39#endif
40
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)
45# endif
46#endif
47
48#if !defined(XENIUM_LIKELY) || !defined(XENIUM_UNLIKELY)
49# define XENIUM_LIKELY(x) x
50# define XENIUM_UNLIKELY(x) x
51#endif
52
53#if !defined(XENIUM_ARCH_X86) && (defined(__x86_64__) || defined(_M_AMD64))
54# define XENIUM_ARCH_X86
55#endif
56
57#if !defined(XENIUM_ARCH_SPARC) && defined(__sparc__)
58# define XENIUM_ARCH_SPARC
59#endif
60
61#endif