24 #if !defined(SIMDE_COMMON_H) 25 #define SIMDE_COMMON_H 31 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) 32 #define SIMDE_ALIGN(alignment) _Alignas(alignment) 33 #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) 34 #define SIMDE_ALIGN(alignment) alignas(alignment) 35 #elif HEDLEY_GCC_VERSION_CHECK(2, 95, 0) || \ 36 HEDLEY_CRAY_VERSION_CHECK(8, 4, 0) || \ 37 HEDLEY_IBM_VERSION_CHECK(11, 1, 0) || \ 38 HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 39 HEDLEY_PGI_VERSION_CHECK(19, 4, 0) || \ 40 HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \ 41 HEDLEY_TINYC_VERSION_CHECK(0, 9, 24) || \ 42 HEDLEY_TI_VERSION_CHECK(8, 1, 0) 43 #define SIMDE_ALIGN(alignment) __attribute__((aligned(alignment))) 44 #elif defined(_MSC_VER) && (!defined(_M_IX86) || defined(_M_AMD64)) 45 #define SIMDE_ALIGN(alignment) __declspec(align(alignment)) 47 #define SIMDE_ALIGN(alignment) 50 #define simde_assert_aligned(alignment, val) \ 51 simde_assert_int(((uintptr_t)(val)) % (alignment), ==, 0) 53 #if HEDLEY_GCC_HAS_ATTRIBUTE(vector_size, 4, 6, 0) 54 #define SIMDE__ENABLE_GCC_VEC_EXT 57 #if !defined(SIMDE_ENABLE_OPENMP) && \ 58 ((defined(_OPENMP) && (_OPENMP >= 201307L)) || \ 59 (defined(_OPENMP_SIMD) && (_OPENMP_SIMD >= 201307L))) 60 #define SIMDE_ENABLE_OPENMP 63 #if !defined(SIMDE_ENABLE_CILKPLUS) && defined(__cilk) 64 #define SIMDE_ENABLE_CILKPLUS 67 #if defined(SIMDE_ENABLE_OPENMP) 68 #define SIMDE__VECTORIZE _Pragma("omp simd") 69 #define SIMDE__VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(omp simd safelen(l)) 70 #define SIMDE__VECTORIZE_REDUCTION(r) HEDLEY_PRAGMA(omp simd reduction(r)) 71 #define SIMDE__VECTORIZE_ALIGNED(a) HEDLEY_PRAGMA(omp simd aligned(a)) 72 #elif defined(SIMDE_ENABLE_CILKPLUS) 73 #define SIMDE__VECTORIZE _Pragma("simd") 74 #define SIMDE__VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(simd vectorlength(l)) 75 #define SIMDE__VECTORIZE_REDUCTION(r) HEDLEY_PRAGMA(simd reduction(r)) 76 #define SIMDE__VECTORIZE_ALIGNED(a) HEDLEY_PRAGMA(simd aligned(a)) 77 #elif defined(__INTEL_COMPILER) 78 #define SIMDE__VECTORIZE _Pragma("simd") 79 #define SIMDE__VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(simd vectorlength(l)) 80 #define SIMDE__VECTORIZE_REDUCTION(r) HEDLEY_PRAGMA(simd reduction(r)) 81 #define SIMDE__VECTORIZE_ALIGNED(a) 82 #elif defined(__clang__) 83 #define SIMDE__VECTORIZE _Pragma("clang loop vectorize(enable)") 84 #define SIMDE__VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(clang loop vectorize_width(l)) 85 #define SIMDE__VECTORIZE_REDUCTION(r) SIMDE__VECTORIZE 86 #define SIMDE__VECTORIZE_ALIGNED(a) 87 #elif HEDLEY_GCC_VERSION_CHECK(4, 9, 0) 88 #define SIMDE__VECTORIZE _Pragma("GCC ivdep") 89 #define SIMDE__VECTORIZE_SAFELEN(l) SIMDE__VECTORIZE 90 #define SIMDE__VECTORIZE_REDUCTION(r) SIMDE__VECTORIZE 91 #define SIMDE__VECTORIZE_ALIGNED(a) 92 #elif HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) 93 #define SIMDE__VECTORIZE _Pragma("_CRI ivdep") 94 #define SIMDE__VECTORIZE_SAFELEN(l) SIMDE__VECTORIZE 95 #define SIMDE__VECTORIZE_REDUCTION(r) SIMDE__VECTORIZE 96 #define SIMDE__VECTORIZE_ALIGNED(a) 98 #define SIMDE__VECTORIZE 99 #define SIMDE__VECTORIZE_SAFELEN(l) 100 #define SIMDE__VECTORIZE_REDUCTION(r) 101 #define SIMDE__VECTORIZE_ALIGNED(a) 104 #if HEDLEY_GCC_HAS_ATTRIBUTE(unused, 3, 1, 0) 105 #define SIMDE__UNUSED __attribute__((__unused__)) 107 #define SIMDE__UNUSED 110 #if HEDLEY_GCC_HAS_ATTRIBUTE(artificial, 4, 3, 0) 111 #define SIMDE__ARTIFICIAL __attribute__((__artificial__)) 113 #define SIMDE__ARTIFICIAL 118 #if defined(SIMDE_NO_INLINE) 119 #define SIMDE__FUNCTION_ATTRIBUTES HEDLEY_NEVER_INLINE SIMDE__UNUSED static 121 #define SIMDE__FUNCTION_ATTRIBUTES HEDLEY_INLINE SIMDE__ARTIFICIAL static 124 #if defined(_MSC_VER) 125 #define SIMDE__BEGIN_DECLS \ 126 HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(disable : 4996 4204)) \ 128 #define SIMDE__END_DECLS HEDLEY_DIAGNOSTIC_POP HEDLEY_END_C_DECLS 130 #define SIMDE__BEGIN_DECLS HEDLEY_BEGIN_C_DECLS 131 #define SIMDE__END_DECLS HEDLEY_END_C_DECLS 134 #if defined(__SIZEOF_INT128__) 135 #define SIMDE__HAVE_INT128 136 typedef __int128 simde_int128;
137 typedef unsigned __int128 simde_uint128;
144 #if !defined(SIMDE_FLOAT32_TYPE) 145 #define SIMDE_FLOAT32_TYPE float 146 #define SIMDE_FLOAT32_C(value) value##f 148 #define SIMDE_FLOAT32_C(value) ((SIMDE_FLOAT32_TYPE)value) 152 "Unable to find 32-bit floating-point type.");
154 #if !defined(SIMDE_FLOAT64_TYPE) 155 #define SIMDE_FLOAT64_TYPE double 156 #define SIMDE_FLOAT64_C(value) value 158 #define SIMDE_FLOAT32_C(value) ((SIMDE_FLOAT64_TYPE)value) 162 "Unable to find 64-bit floating-point type.");
189 #if !defined(SIMDE_NO_ASSUME_VECTORIZATION) && \ 190 !defined(SIMDE_ASSUME_VECTORIZATION) 191 #if defined(__SSE__) || defined(__ARM_NEON) || defined(__mips_msa) || \ 193 #define SIMDE_ASSUME_VECTORIZATION 201 #if HEDLEY_CLANG_HAS_BUILTIN(__builtin_shufflevector) 202 #define SIMDE__SHUFFLE_VECTOR(elem_size, vec_size, a, b, ...) \ 203 __builtin_shufflevector(a, b, __VA_ARGS__) 204 #elif HEDLEY_GCC_HAS_BUILTIN(__builtin_shuffle, 4, 7, 0) && \ 205 !defined(__INTEL_COMPILER) 206 #define SIMDE__SHUFFLE_VECTOR(elem_size, vec_size, a, b, ...) \ 207 __builtin_shuffle(a, b, \ 208 (int##elem_size##_t __attribute__( \ 209 (__vector_size__(vec_size)))){__VA_ARGS__}) 215 #if !defined(SIMDE_ACCURACY_ITERS) 216 #define SIMDE_ACCURACY_ITERS 2 222 #if defined(SIMDE__REALLY_GCC) 223 #undef SIMDE__REALLY_GCC 225 #if !defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) 226 #define SIMDE__REALLY_GCC 0 228 #define SIMDE__REALLY_GCC 1 231 #if defined(SIMDE__ASSUME_ALIGNED) 232 #undef SIMDE__ASSUME_ALIGNED 234 #if HEDLEY_INTEL_VERSION_CHECK(9, 0, 0) 235 #define SIMDE__ASSUME_ALIGNED(ptr, align) __assume_aligned(ptr, align) 236 #elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) 237 #define SIMDE__ASSUME_ALIGNED(ptr, align) \ 238 __assume((((char *)ptr) - ((char *)0)) % (align) == 0) 239 #elif HEDLEY_GCC_HAS_BUILTIN(__builtin_assume_aligned, 4, 7, 0) 240 #define SIMDE__ASSUME_ALIGNED(ptr, align) \ 241 (ptr = (__typeof__(ptr))__builtin_assume_aligned((ptr), align)) 242 #elif HEDLEY_CLANG_HAS_BUILTIN(__builtin_assume) 243 #define SIMDE__ASSUME_ALIGNED(ptr, align) \ 244 __builtin_assume((((char *)ptr) - ((char *)0)) % (align) == 0) 245 #elif HEDLEY_GCC_HAS_BUILTIN(__builtin_unreachable, 4, 5, 0) 246 #define SIMDE__ASSUME_ALIGNED(ptr, align) \ 247 ((((char *)ptr) - ((char *)0)) % (align) == 0) \ 249 : (__builtin_unreachable(), 0) 251 #define SIMDE__ASSUME_ALIGNED(ptr, align) 260 #if !defined(SIMDE_IGNORE_COMPILER_BUGS) 261 #if SIMDE__REALLY_GCC 262 #if !HEDLEY_GCC_VERSION_CHECK(4, 9, 0) 263 #define SIMDE_BUG_GCC_REV_208793 265 #if !HEDLEY_GCC_VERSION_CHECK(5, 0, 0) 266 #define SIMDE_BUG_GCC_BAD_MM_SRA_EPI32 268 #if !HEDLEY_GCC_VERSION_CHECK(4, 6, 0) 269 #define SIMDE_BUG_GCC_BAD_MM_EXTRACT_EPI8 272 #if defined(__EMSCRIPTEN__) 273 #define SIMDE_BUG_EMSCRIPTEN_MISSING_IMPL 274 #define SIMDE_BUG_EMSCRIPTEN_5242 SIMDE_FLOAT32_TYPE simde_float32
Definition: simde-common.h:150
HEDLEY_STATIC_ASSERT(sizeof(simde_float32)==4, "Unable to find 32-bit floating-point type.")
#define SIMDE_FLOAT64_TYPE
Definition: simde-common.h:155
SIMDE_FLOAT64_TYPE simde_float64
Definition: simde-common.h:160
#define SIMDE_FLOAT32_TYPE
Definition: simde-common.h:145