21 #define INSTRSET_H 116 24 #if (defined(_M_AMD64) || defined(_M_X64) || defined(__amd64) ) && ! defined(__x86_64__) 25 #define __x86_64__ 1 // There are many different macros for this, decide on only one 31 #if defined ( __AVX512F__ ) || defined ( __AVX512__ ) // || defined ( __AVX512ER__ ) 33 #elif defined ( __AVX2__ ) 35 #elif defined ( __AVX__ ) 37 #elif defined ( __SSE4_2__ ) 39 #elif defined ( __SSE4_1__ ) 41 #elif defined ( __SSSE3__ ) 43 #elif defined ( __SSE3__ ) 45 #elif defined ( __SSE2__ ) || defined ( __x86_64__ ) 47 #elif defined ( __SSE__ ) 49 #elif defined ( _M_IX86_FP ) // Defined in MS compiler. 1: SSE, 2: SSE2 50 #define INSTRSET _M_IX86_FP 53 #endif // instruction set defines 57 #if INSTRSET > 7 // AVX2 and later 58 #if defined (__GNUC__) && ! defined (__INTEL_COMPILER) 59 #include <x86intrin.h> 63 #include <immintrin.h> 66 #include <immintrin.h> 68 #include <nmmintrin.h> 70 #include <smmintrin.h> 72 #include <tmmintrin.h> 74 #include <pmmintrin.h> 76 #include <emmintrin.h> 78 #include <xmmintrin.h> 81 #if INSTRSET >= 8 && !defined(__FMA__) 83 #if defined (__GNUC__) && ! defined (__INTEL_COMPILER) && ! defined (__clang__) 85 #pragma message "It is recommended to specify also option -mfma when using -mavx2 or higher" 92 #if defined (__XOP__) || defined (__FMA4__) 94 #include <x86intrin.h> 96 #include <ammintrin.h> 98 #elif defined (__SSE4A__) // AMD SSE4A 99 #include <ammintrin.h> 103 #if defined (__FMA__) && (defined(__GNUC__) || defined(__clang__)) && ! defined (__INTEL_COMPILER) 104 #include <fmaintrin.h> 108 #if defined (__FMA4__) && (defined(__GNUC__) || defined(__clang__)) 109 #include <fma4intrin.h> 114 #if defined(__GNUC__) || defined(__clang__) || (defined(_MSC_VER) && _MSC_VER >= 1600) 117 #elif defined(_MSC_VER) 119 typedef signed __int8
int8_t;
120 typedef unsigned __int8
uint8_t;
121 typedef signed __int16
int16_t;
123 typedef signed __int32
int32_t;
125 typedef signed __int64
int64_t;
127 #ifndef _INTPTR_T_DEFINED 128 #define _INTPTR_T_DEFINED 154 #ifdef _MSC_VER // Microsoft compiler or compatible Intel compiler 165 #if defined(__GNUC__) && !defined (GCC_VERSION) && !defined (__clang__) 166 #define GCC_VERSION ((__GNUC__) * 10000 + (__GNUC_MINOR__) * 100 + (__GNUC_PATCHLEVEL__)) 170 #if defined (__clang__) 171 #define CLANG_VERSION ((__clang_major__) * 10000 + (__clang_minor__) * 100 + (__clang_patchlevel__)) 179 #if defined (_WINDEF_) && defined(min) && defined(max) 191 #define const_int(n) (Const_int_t <n>()) // n must be compile-time integer constant 192 #define const_uint(n) (Const_uint_t<n>()) // n must be compile-time unsigned integer constant unsigned long long uint64_t
unsigned short int uint16_t
int instrset_detect(void)