30static_assert(
GEN_SIMD_WIDTH % 16u == 0,
"SIMD vector size is not an integer multiple of 16 bytes");
38#define VECTOR_FOR(i, w, inc) \
39 _Pragma("clang loop unroll(full) vectorize(enable) interleave(enable) vectorize_width(w)") \
40 for (unsigned int i = 0; i < w; i += inc)
41#elif defined __INTEL_COMPILER
42#define VECTOR_FOR(i, w, inc) \
43 _Pragma("simd vectorlength(w*8)") \
44 for (unsigned int i = 0; i < w; i += inc)
46#define VECTOR_FOR(i, w, inc) \
47 for (unsigned int i = 0; i < w; i += inc)
50#define VECTOR_FOR(i, w, inc) \
51 for (unsigned int i = 0; i < w; i += inc)
60template <
typename T>
struct W;
61template <>
struct W<double> {
62 constexpr static unsigned int c = 1;
63 constexpr static unsigned int r = 2;
65template <>
struct W<float> {
66 constexpr static unsigned int c = 1;
67 constexpr static unsigned int r = 2;
70 constexpr static unsigned int r = 1;
72template <>
struct W<uint16_t> {
73 constexpr static unsigned int c = 1;
74 constexpr static unsigned int r = 2;
83template <
typename T>
struct W;
84template <>
struct W<double> {
88template <>
struct W<float> {
95template <>
struct W<uint16_t> {
#define NAMESPACE_BEGIN(A)