32 #ifndef MCKL_RANDOM_INTERNAL_INCREMENT_AVX512_64_2_HPP 33 #define MCKL_RANDOM_INTERNAL_INCREMENT_AVX512_64_2_HPP 46 static constexpr std::size_t K_ = 1;
49 static void eval(
const std::array<T, K_> &ctr, std::array<__m512i, 2> &s)
52 _mm512_set1_epi64(static_cast<MCKL_INT64>(std::get<0>(ctr)));
54 std::get<0>(s) = _mm512_add_epi64(c,
55 _mm512_set_epi64(0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01));
56 std::get<1>(s) = _mm512_add_epi64(c,
57 _mm512_set_epi64(0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09));
64 static constexpr std::size_t K_ = 2;
67 static void eval(
const std::array<T, K_> &ctr, std::array<__m512i, 2> &s)
69 __m512i c = _mm512_set_epi64(static_cast<MCKL_INT64>(std::get<1>(ctr)),
70 static_cast<MCKL_INT64>(std::get<0>(ctr)),
71 static_cast<MCKL_INT64>(std::get<1>(ctr)),
72 static_cast<MCKL_INT64>(std::get<0>(ctr)),
73 static_cast<MCKL_INT64>(std::get<1>(ctr)),
74 static_cast<MCKL_INT64>(std::get<0>(ctr)),
75 static_cast<MCKL_INT64>(std::get<1>(ctr)),
76 static_cast<MCKL_INT64>(std::get<0>(ctr)));
78 std::get<0>(s) = _mm512_add_epi64(
79 c, _mm512_set_epi64(0, 0x04, 0, 0x03, 0, 0x02, 0, 0x01));
80 std::get<1>(s) = _mm512_add_epi64(
81 c, _mm512_set_epi64(0, 0x08, 0, 0x07, 0, 0x06, 0, 0x05));
88 static constexpr std::size_t K_ = 4;
91 static void eval(
const std::array<T, K_> &ctr, std::array<__m512i, 2> &s)
93 __m512i c = _mm512_set_epi64(static_cast<MCKL_INT64>(std::get<3>(ctr)),
94 static_cast<MCKL_INT64>(std::get<2>(ctr)),
95 static_cast<MCKL_INT64>(std::get<1>(ctr)),
96 static_cast<MCKL_INT64>(std::get<0>(ctr)),
97 static_cast<MCKL_INT64>(std::get<3>(ctr)),
98 static_cast<MCKL_INT64>(std::get<2>(ctr)),
99 static_cast<MCKL_INT64>(std::get<1>(ctr)),
100 static_cast<MCKL_INT64>(std::get<0>(ctr)));
103 _mm512_add_epi64(c, _mm512_set_epi64(0, 0, 0, 2, 0, 0, 0, 1));
105 _mm512_add_epi64(c, _mm512_set_epi64(0, 0, 0, 4, 0, 0, 0, 3));
109 template <
typename T>
112 static constexpr std::size_t K_ = 8;
115 static void eval(
const std::array<T, K_> &ctr, std::array<__m512i, 2> &s)
117 __m512i c = _mm512_set_epi64(static_cast<MCKL_INT64>(std::get<7>(ctr)),
118 static_cast<MCKL_INT64>(std::get<6>(ctr)),
119 static_cast<MCKL_INT64>(std::get<5>(ctr)),
120 static_cast<MCKL_INT64>(std::get<4>(ctr)),
121 static_cast<MCKL_INT64>(std::get<3>(ctr)),
122 static_cast<MCKL_INT64>(std::get<2>(ctr)),
123 static_cast<MCKL_INT64>(std::get<1>(ctr)),
124 static_cast<MCKL_INT64>(std::get<0>(ctr)));
127 _mm512_add_epi64(c, _mm512_set_epi64(0, 0, 0, 0, 0, 0, 0, 1));
129 _mm512_add_epi64(c, _mm512_set_epi64(0, 0, 0, 0, 0, 0, 0, 2));
133 template <
typename T>
136 static constexpr std::size_t K_ = 16;
139 static void eval(
const std::array<T, K_> &ctr, std::array<__m512i, 2> &s)
141 std::memcpy(s.data(), ctr.data(), 128);
142 std::get<0>(s) = _mm512_add_epi64(
143 std::get<0>(s), _mm512_set_epi64(0, 0, 0, 0, 0, 0, 0, 1));
153 #endif // MCKL_RANDOM_INTERNAL_INCREMENT_AVX512_64_2_HPP static void eval(const std::array< T, K_ > &ctr, std::array< __m512i, 2 > &s)
static void eval(const std::array< T, K_ > &ctr, std::array< __m512i, 2 > &s)
#define MCKL_PUSH_GCC_WARNING(warning)
static void eval(const std::array< T, K_ > &ctr, std::array< __m512i, 2 > &s)
static void eval(const std::array< T, K_ > &ctr, std::array< __m512i, 2 > &s)
static void eval(const std::array< T, K_ > &ctr, std::array< __m512i, 2 > &s)
#define MCKL_POP_GCC_WARNING