16#include <TargetConditionals.h>
19namespace hi::inline v1 {
21#define HI_BT_DEBUG 'D'
22#define HI_BT_RELEASE 'R'
25#define HI_BUILD_TYPE HI_BT_RELEASE
27#define HI_BUILD_TYPE HI_BT_DEBUG
30enum class build_type {
32 release = HI_BT_RELEASE,
34 current = HI_BUILD_TYPE
37#define HI_OS_WINDOWS 'W'
38#define HI_OS_MACOS 'A'
39#define HI_OS_MOBILE 'M'
40#define HI_OS_OTHER 'O'
43#define HI_OPERATING_SYSTEM HI_OS_WINDOWS
44#elif defined(TARGET_OS_MAC) && !defined(TARGET_OS_IPHONE)
45#define HI_OPERATING_SYSTEM HI_OS_MACOS
46#elif defined(TARGET_OS_IPHONE) || defined(__ANDROID__)
47#define HI_OPERATING_SYSTEM HI_OS_MOBILE
49#define HI_OPERATING_SYSTEM HI_OS_OTHER
52enum class operating_system {
53 windows = HI_OS_WINDOWS,
55 mobile = HI_OS_MOBILE,
58 current = HI_OPERATING_SYSTEM
63#define HI_CC_CLANG 'c'
66#define HI_COMPILER HI_CC_CLANG
67#elif defined(_MSC_BUILD)
68#define HI_COMPILER HI_CC_MSVC
69#elif defined(__GNUC__)
70#define HI_COMPILER HI_CC_GCC
72#error "Could not detect the compiler."
86#define HI_CPU_ARM64 'A'
87#define HI_CPU_UNKNOWN '-'
89#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64)
90#define HI_PROCESSOR HI_CPU_X64
91#elif defined(__aarch64__) || defined(_M_ARM64)
92#define HI_PROCESSOR HI_CPU_ARM64
93#elif defined(__i386__) || defined(_M_IX86)
94#define HI_PROCESSOR HI_CPU_X86
95#elif defined(__arm__) || defined(__arm) || defeind(_ARM) || defined(_M_ARM)
96#define HI_PROCESSOR HI_CPU_ARM
98#define HI_PROCESSOR HI_CPU_UNKNOWN
101enum class processor {
105 arm64 = HI_CPU_ARM64,
106 unknown = HI_CPU_UNKNOWN,
108 current = HI_PROCESSOR
111#if HI_PROCESSOR == HI_CPU_X86
112using intreg_t = int32_t;
113using uintreg_t = uint32_t;
114constexpr std::size_t hardware_destructive_interference_size = 128;
115constexpr std::size_t hardware_constructive_interference_size = 64;
116#elif HI_PROCESSOR == HI_CPU_X64
117using intreg_t = int64_t;
118using uintreg_t = uint64_t;
119constexpr std::size_t hardware_destructive_interference_size = 128;
120constexpr std::size_t hardware_constructive_interference_size = 64;
121#elif HI_PROCESSOR == HI_CPU_ARM
122using intreg_t = int32_t;
123using uintreg_t = uint32_t;
124constexpr std::size_t hardware_destructive_interference_size = 128;
125constexpr std::size_t hardware_constructive_interference_size = 64;
126#elif HI_PROCESSOR == HI_CPU_ARM64
127using intreg_t = int64_t;
128using uintreg_t = uint64_t;
129constexpr std::size_t hardware_destructive_interference_size = 128;
130constexpr std::size_t hardware_constructive_interference_size = 64;
132#error "missing implementation for CPU specific register and cache-line sizes"
135#if defined(__AVX512BW__) && defined(__AVX512CD__) && defined(__AVX512DQ__) && defined(__AVX512F__) && defined(__AVX512VL__)
136#define HI_X86_64_V4 1
137#define HI_X86_64_V3 1
138#define HI_X86_64_V2_5 1
139#define HI_X86_64_V2 1
140#define HI_X86_64_V1 1
144#define HI_HAS_SSE4_1 1
145#define HI_HAS_SSE4_2 1
146#define HI_HAS_SSSE3 1
151#define HI_HAS_AVX512F 1
152#define HI_HAS_AVX512BW 1
153#define HI_HAS_AVX512CD 1
154#define HI_HAS_AVX512DQ 1
155#define HI_HAS_AVX512VL 1
157#elif defined(__AVX2__)
158#define HI_X86_64_V3 1
159#define HI_X86_64_V2_5 1
160#define HI_X86_64_V2 1
161#define HI_X86_64_V1 1
165#define HI_HAS_SSE4_1 1
166#define HI_HAS_SSE4_2 1
167#define HI_HAS_SSSE3 1
173#elif defined(__AVX__)
174#define HI_X86_64_V2_5 1
175#define HI_X86_64_V2 1
176#define HI_X86_64_V1 1
180#define HI_HAS_SSE4_1 1
181#define HI_HAS_SSE4_2 1
182#define HI_HAS_SSSE3 1
186#elif defined(__SSE4_2__) && defined(__SSSE3__)
187#define HI_X86_64_V2 1
188#define HI_X86_64_V1 1
192#define HI_HAS_SSE4_1 1
193#define HI_HAS_SSE4_2 1
194#define HI_HAS_SSSE3 1
196#elif HI_PROCESSOR == HI_CPU_X64
197#define HI_X86_64_V1 1
201#elif HI_PROCESSOR == HI_CPU_X86
202#elif HI_PROCESSOR == HI_CPU_ARM64
203#elif HI_PROCESSOR == HI_CPU_ARM
236#if HI_PROCESSOR == HI_CPU_X64
244#elif HI_PROCESSOR == HI_CPU_ARM
248constexpr std::size_t hardware_destructive_interference_size = 64;
253constexpr std::size_t hardware_constructive_interference_size = 64;
255#elif HI_PROCESSOR == HI_CPU_UNKNOWN
256constexpr std::size_t hardware_destructive_interference_size = 128;
257constexpr std::size_t hardware_constructive_interference_size = 64;
259#error "Missing implementation of hardware_destructive_interference_size and hardware_constructive_interference_size"
262#if HI_OPERATING_SYSTEM == HI_OS_WINDOWS
266#elif HI_OPERATING_SYSTEM == HI_OS_MACOS
268using file_handle = int;
270#elif HI_OPERATING_SYSTEM == HI_OS_LINUX
272using file_handle = int;
275#error "file_handle Not implemented."
void * os_handle
Minimum offset between two objects to avoid false sharing.
Definition architecture.hpp:263