16#include <TargetConditionals.h>
19namespace hi::inline
v1 {
21#define HI_OS_WINDOWS 'W'
22#define HI_OS_MACOS 'A'
23#define HI_OS_MOBILE 'M'
24#define HI_OS_OTHER 'O'
27#define HI_OPERATING_SYSTEM HI_OS_WINDOWS
28#elif defined(TARGET_OS_MAC) && !defined(TARGET_OS_IPHONE)
29#define HI_OPERATING_SYSTEM HI_OS_MACOS
30#elif defined(TARGET_OS_IPHONE) || defined(__ANDROID__)
31#define HI_OPERATING_SYSTEM HI_OS_MOBILE
33#define HI_OPERATING_SYSTEM HI_OS_OTHER
36enum class operating_system {
37 windows = HI_OS_WINDOWS,
39 mobile = HI_OS_MOBILE,
47#define HI_CC_CLANG 'c'
50#define HI_COMPILER HI_CC_CLANG
51#elif defined(_MSC_BUILD)
52#define HI_COMPILER HI_CC_MSVC
53#elif defined(__GNUC__)
54#define HI_COMPILER HI_CC_GCC
56#error "Could not detect the compiler."
70#define HI_CPU_ARM64 'A'
71#define HI_CPU_UNKNOWN '-'
73#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64)
74#define HI_PROCESSOR HI_CPU_X64
75#elif defined(__aarch64__) || defined(_M_ARM64)
76#define HI_PROCESSOR HI_CPU_ARM64
77#elif defined(__i386__) || defined(_M_IX86)
78#define HI_PROCESSOR HI_CPU_X86
79#elif defined(__arm__) || defined(__arm) || defeind(_ARM) || defined(_M_ARM)
80#define HI_PROCESSOR HI_CPU_ARM
82#define HI_PROCESSOR HI_CPU_UNKNOWN
90 unknown = HI_CPU_UNKNOWN,
95#if HI_PROCESSOR == HI_CPU_X86
96constexpr std::size_t hardware_destructive_interference_size = 128;
97constexpr std::size_t hardware_constructive_interference_size = 64;
98using intreg_t = int32_t;
99using uintreg_t = uint32_t;
100#elif HI_PROCESSOR == HI_CPU_X64
101constexpr std::size_t hardware_destructive_interference_size = 128;
102constexpr std::size_t hardware_constructive_interference_size = 64;
103using intreg_t = int64_t;
104using uintreg_t = uint64_t;
105#elif HI_PROCESSOR == HI_CPU_ARM
106constexpr std::size_t hardware_destructive_interference_size = 128;
107constexpr std::size_t hardware_constructive_interference_size = 64;
108using intreg_t = int32_t;
109using uintreg_t = uint32_t;
110#elif HI_PROCESSOR == HI_CPU_ARM64
111constexpr std::size_t hardware_destructive_interference_size = 128;
112constexpr std::size_t hardware_constructive_interference_size = 64;
113using intreg_t = int64_t;
114using uintreg_t = uint64_t;
116#error "missing implementation for CPU specific register and cache-line sizes"
119#if defined(__AVX512BW__) && defined(__AVX512CD__) && defined(__AVX512DQ__) && defined(__AVX512F__) && defined(__AVX512VL__)
120#define HI_X86_64_LEVEL 4
121#elif defined(__AVX2__)
122#define HI_X86_64_LEVEL 3
123#elif defined(__SSE4_2__) && defined(__SSSE3__)
124#define HI_X86_64_LEVEL 2
125#elif HI_PROCESSOR == HI_CPU_X64
126#define HI_X86_64_LEVEL 1
129#if defined(HI_X86_64_MAX_LEVEL) && defined(HI_X86_64_LEVEL) && HI_X86_64_MAX_LEVEL < HI_X86_64_LEVEL
130#undef HI_X86_64_LEVEL
131#define HI_X86_64_LEVEL HI_X86_64_MAX_LEVEL
134#if defined(HI_X86_64_LEVEL) && HI_X86_64_LEVEL >= 4
135#define HI_HAS_AVX512F 1
136#define HI_HAS_AVX512BW 1
137#define HI_HAS_AVX512CD 1
138#define HI_HAS_AVX512DQ 1
139#define HI_HAS_AVX512VL 1
142#if defined(HI_X86_64_LEVEL) && HI_X86_64_LEVEL >= 3
149#define HI_HAS_LZCNT 1
150#define HI_HAS_MOVBE 1
151#define HI_HAS_OSXSAVE 1
154#if defined(HI_X86_64_LEVEL) && HI_X86_64_LEVEL >= 2
155#define HI_HAS_CMPXCHG16B 1
156#define HI_HAS_LAHF_SAHF 1
157#define HI_HAS_POPCNT 1
159#define HI_HAS_SSE4_1 1
160#define HI_HAS_SSE4_2 1
161#define HI_HAS_SSSE3 1
164#if defined(HI_X86_64_LEVEL) && HI_X86_64_LEVEL >= 1
170#define HI_HAS_OSFXSR 1
176#if (HI_COMPILER == HI_CC_GCC || HI_COMPILER == HI_CC_CLANG) && (HI_PROCESSOR == HI_CPU_X64 || HI_PROCESSOR == HI_CPU_ARM64)
177#define HI_HAS_INT128 1
188#if HI_OPERATING_SYSTEM == HI_OS_WINDOWS
189using os_handle =
void *;
190using file_handle = os_handle;
192#elif HI_OPERATING_SYSTEM == HI_OS_MACOS
193using os_handle = int;
194using file_handle = int;
196#elif HI_OPERATING_SYSTEM == HI_OS_LINUX
197using os_handle = int;
198using file_handle = int;
201#error "file_handle Not implemented."
@ current
Continue from the current position.
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm.hpp:13
__int128 int128_t
Signed 128 bit integer.
Definition architecture.hpp:180
unsigned __int128 uint128_t
Unsigned 128 bit integer.
Definition architecture.hpp:184