 |
Open Broadcaster Software
Free, open source software for live streaming and recording
|
Go to the documentation of this file.
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_FLOAT64_TYPE simde_float64
Definition: simde-common.h:160
SIMDE_FLOAT32_TYPE simde_float32
Definition: simde-common.h:150
#define SIMDE_FLOAT32_TYPE
Definition: simde-common.h:145
HEDLEY_STATIC_ASSERT(sizeof(simde_float32)==4, "Unable to find 32-bit floating-point type.")
#define SIMDE_FLOAT64_TYPE
Definition: simde-common.h:155