32 #ifndef MCKL_INTERNAL_AVX512_OP_HPP 33 #define MCKL_INTERNAL_AVX512_OP_HPP 45 MCKL_INLINE inline void slli_epi32(std::array<__m512i, 4> &s)
47 std::get<0>(s) = _mm512_slli_epi32(std::get<0>(s), imm8);
48 std::get<1>(s) = _mm512_slli_epi32(std::get<1>(s), imm8);
49 std::get<2>(s) = _mm512_slli_epi32(std::get<2>(s), imm8);
50 std::get<3>(s) = _mm512_slli_epi32(std::get<3>(s), imm8);
54 MCKL_INLINE inline void srli_epi32(std::array<__m512i, 4> &s)
56 std::get<0>(s) = _mm512_srli_epi32(std::get<0>(s), imm8);
57 std::get<1>(s) = _mm512_srli_epi32(std::get<1>(s), imm8);
58 std::get<2>(s) = _mm512_srli_epi32(std::get<2>(s), imm8);
59 std::get<3>(s) = _mm512_srli_epi32(std::get<3>(s), imm8);
63 MCKL_INLINE inline void slli_epi64(std::array<__m512i, 4> &s)
65 std::get<0>(s) = _mm512_slli_epi64(std::get<0>(s), imm8);
66 std::get<1>(s) = _mm512_slli_epi64(std::get<1>(s), imm8);
67 std::get<2>(s) = _mm512_slli_epi64(std::get<2>(s), imm8);
68 std::get<3>(s) = _mm512_slli_epi64(std::get<3>(s), imm8);
72 MCKL_INLINE inline void srli_epi64(std::array<__m512i, 4> &s)
74 std::get<0>(s) = _mm512_srli_epi64(std::get<0>(s), imm8);
75 std::get<1>(s) = _mm512_srli_epi64(std::get<1>(s), imm8);
76 std::get<2>(s) = _mm512_srli_epi64(std::get<2>(s), imm8);
77 std::get<3>(s) = _mm512_srli_epi64(std::get<3>(s), imm8);
81 MCKL_INLINE inline void shuffle_epi32(std::array<__m512i, 4> &s)
83 std::get<0>(s) = _mm512_shuffle_epi32(std::get<0>(s), imm8);
84 std::get<1>(s) = _mm512_shuffle_epi32(std::get<1>(s), imm8);
85 std::get<2>(s) = _mm512_shuffle_epi32(std::get<2>(s), imm8);
86 std::get<3>(s) = _mm512_shuffle_epi32(std::get<3>(s), imm8);
89 MCKL_INLINE inline void and_si512(
const std::array<__m512i, 4> &s,
90 const __m512i &a, std::array<__m512i, 4> &t)
92 std::get<0>(t) = _mm512_and_si512(std::get<0>(s), a);
93 std::get<1>(t) = _mm512_and_si512(std::get<1>(s), a);
94 std::get<2>(t) = _mm512_and_si512(std::get<2>(s), a);
95 std::get<3>(t) = _mm512_and_si512(std::get<3>(s), a);
98 MCKL_INLINE inline void and_si512(std::array<__m512i, 4> &s,
const __m512i &a)
100 std::get<0>(s) = _mm512_and_si512(std::get<0>(s), a);
101 std::get<1>(s) = _mm512_and_si512(std::get<1>(s), a);
102 std::get<2>(s) = _mm512_and_si512(std::get<2>(s), a);
103 std::get<3>(s) = _mm512_and_si512(std::get<3>(s), a);
107 std::array<__m512i, 4> &s,
const std::array<__m512i, 4> &a)
109 std::get<0>(s) = _mm512_xor_si512(std::get<0>(s), std::get<0>(a));
110 std::get<1>(s) = _mm512_xor_si512(std::get<1>(s), std::get<1>(a));
111 std::get<2>(s) = _mm512_xor_si512(std::get<2>(s), std::get<2>(a));
112 std::get<3>(s) = _mm512_xor_si512(std::get<3>(s), std::get<3>(a));
115 MCKL_INLINE inline void xor_si512(std::array<__m512i, 4> &s,
const __m512i &a)
117 std::get<0>(s) = _mm512_xor_si512(std::get<0>(s), a);
118 std::get<1>(s) = _mm512_xor_si512(std::get<1>(s), a);
119 std::get<2>(s) = _mm512_xor_si512(std::get<2>(s), a);
120 std::get<3>(s) = _mm512_xor_si512(std::get<3>(s), a);
124 std::array<__m512i, 4> &s,
const std::array<__m512i, 4> &a)
126 std::get<0>(s) = _mm512_add_epi32(std::get<0>(s), std::get<0>(a));
127 std::get<1>(s) = _mm512_add_epi32(std::get<1>(s), std::get<1>(a));
128 std::get<2>(s) = _mm512_add_epi32(std::get<2>(s), std::get<2>(a));
129 std::get<3>(s) = _mm512_add_epi32(std::get<3>(s), std::get<3>(a));
133 std::array<__m512i, 4> &s,
const std::array<__m512i, 4> &a)
135 std::get<0>(s) = _mm512_add_epi64(std::get<0>(s), std::get<0>(a));
136 std::get<1>(s) = _mm512_add_epi64(std::get<1>(s), std::get<1>(a));
137 std::get<2>(s) = _mm512_add_epi64(std::get<2>(s), std::get<2>(a));
138 std::get<3>(s) = _mm512_add_epi64(std::get<3>(s), std::get<3>(a));
141 MCKL_INLINE inline void add_epi64(std::array<__m512i, 4> &s,
const __m512i &a)
143 std::get<0>(s) = _mm512_add_epi64(std::get<0>(s), a);
144 std::get<1>(s) = _mm512_add_epi64(std::get<1>(s), a);
145 std::get<2>(s) = _mm512_add_epi64(std::get<2>(s), a);
146 std::get<3>(s) = _mm512_add_epi64(std::get<3>(s), a);
149 MCKL_INLINE inline void mul_epu32(
const std::array<__m512i, 4> &s,
150 const __m512i &a, std::array<__m512i, 4> &t)
152 std::get<0>(t) = _mm512_mul_epu32(std::get<0>(s), a);
153 std::get<1>(t) = _mm512_mul_epu32(std::get<1>(s), a);
154 std::get<2>(t) = _mm512_mul_epu32(std::get<2>(s), a);
155 std::get<3>(t) = _mm512_mul_epu32(std::get<3>(s), a);
158 MCKL_INLINE inline void add_ps(std::array<__m512i, 4> &s,
const __m512i &a)
160 std::get<0>(s) = _mm512_castps_si512(_mm512_add_ps(
161 _mm512_castsi512_ps(std::get<0>(s)), _mm512_castsi512_ps(a)));
162 std::get<1>(s) = _mm512_castps_si512(_mm512_add_ps(
163 _mm512_castsi512_ps(std::get<1>(s)), _mm512_castsi512_ps(a)));
164 std::get<2>(s) = _mm512_castps_si512(_mm512_add_ps(
165 _mm512_castsi512_ps(std::get<2>(s)), _mm512_castsi512_ps(a)));
166 std::get<3>(s) = _mm512_castps_si512(_mm512_add_ps(
167 _mm512_castsi512_ps(std::get<3>(s)), _mm512_castsi512_ps(a)));
170 MCKL_INLINE inline void mul_ps(std::array<__m512i, 4> &s,
const __m512i &a)
172 std::get<0>(s) = _mm512_castps_si512(_mm512_mul_ps(
173 _mm512_castsi512_ps(std::get<0>(s)), _mm512_castsi512_ps(a)));
174 std::get<1>(s) = _mm512_castps_si512(_mm512_mul_ps(
175 _mm512_castsi512_ps(std::get<1>(s)), _mm512_castsi512_ps(a)));
176 std::get<2>(s) = _mm512_castps_si512(_mm512_mul_ps(
177 _mm512_castsi512_ps(std::get<2>(s)), _mm512_castsi512_ps(a)));
178 std::get<3>(s) = _mm512_castps_si512(_mm512_mul_ps(
179 _mm512_castsi512_ps(std::get<3>(s)), _mm512_castsi512_ps(a)));
182 MCKL_INLINE inline void add_pd(std::array<__m512i, 4> &s,
const __m512i &a)
184 std::get<0>(s) = _mm512_castpd_si512(_mm512_add_pd(
185 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
186 std::get<1>(s) = _mm512_castpd_si512(_mm512_add_pd(
187 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
188 std::get<2>(s) = _mm512_castpd_si512(_mm512_add_pd(
189 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
190 std::get<3>(s) = _mm512_castpd_si512(_mm512_add_pd(
191 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
195 std::array<__m512i, 4> &s,
const std::array<__m512i, 4> &a)
198 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<0>(s)),
199 _mm512_castsi512_pd(std::get<0>(a))));
201 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<1>(s)),
202 _mm512_castsi512_pd(std::get<1>(a))));
204 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<2>(s)),
205 _mm512_castsi512_pd(std::get<2>(a))));
207 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<3>(s)),
208 _mm512_castsi512_pd(std::get<3>(a))));
211 MCKL_INLINE inline void sub_pd(std::array<__m512i, 4> &s,
const __m512i &a)
213 std::get<0>(s) = _mm512_castpd_si512(_mm512_sub_pd(
214 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
215 std::get<1>(s) = _mm512_castpd_si512(_mm512_sub_pd(
216 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
217 std::get<2>(s) = _mm512_castpd_si512(_mm512_sub_pd(
218 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
219 std::get<3>(s) = _mm512_castpd_si512(_mm512_sub_pd(
220 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
223 MCKL_INLINE inline void mul_pd(std::array<__m512i, 4> &s,
const __m512i &a)
225 std::get<0>(s) = _mm512_castpd_si512(_mm512_mul_pd(
226 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
227 std::get<1>(s) = _mm512_castpd_si512(_mm512_mul_pd(
228 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
229 std::get<2>(s) = _mm512_castpd_si512(_mm512_mul_pd(
230 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
231 std::get<3>(s) = _mm512_castpd_si512(_mm512_mul_pd(
232 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
236 std::array<__m512i, 4> &s,
const std::array<__m512i, 4> &a)
239 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<0>(s)),
240 _mm512_castsi512_pd(std::get<0>(a))));
242 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<1>(s)),
243 _mm512_castsi512_pd(std::get<1>(a))));
245 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<2>(s)),
246 _mm512_castsi512_pd(std::get<2>(a))));
248 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<3>(s)),
249 _mm512_castsi512_pd(std::get<3>(a))));
253 MCKL_INLINE inline void slli_epi32(std::array<__m512i, 8> &s)
255 std::get<0>(s) = _mm512_slli_epi32(std::get<0>(s), imm8);
256 std::get<1>(s) = _mm512_slli_epi32(std::get<1>(s), imm8);
257 std::get<2>(s) = _mm512_slli_epi32(std::get<2>(s), imm8);
258 std::get<3>(s) = _mm512_slli_epi32(std::get<3>(s), imm8);
259 std::get<4>(s) = _mm512_slli_epi32(std::get<4>(s), imm8);
260 std::get<5>(s) = _mm512_slli_epi32(std::get<5>(s), imm8);
261 std::get<6>(s) = _mm512_slli_epi32(std::get<6>(s), imm8);
262 std::get<7>(s) = _mm512_slli_epi32(std::get<7>(s), imm8);
266 MCKL_INLINE inline void srli_epi32(std::array<__m512i, 8> &s)
268 std::get<0>(s) = _mm512_srli_epi32(std::get<0>(s), imm8);
269 std::get<1>(s) = _mm512_srli_epi32(std::get<1>(s), imm8);
270 std::get<2>(s) = _mm512_srli_epi32(std::get<2>(s), imm8);
271 std::get<3>(s) = _mm512_srli_epi32(std::get<3>(s), imm8);
272 std::get<4>(s) = _mm512_srli_epi32(std::get<4>(s), imm8);
273 std::get<5>(s) = _mm512_srli_epi32(std::get<5>(s), imm8);
274 std::get<6>(s) = _mm512_srli_epi32(std::get<6>(s), imm8);
275 std::get<7>(s) = _mm512_srli_epi32(std::get<7>(s), imm8);
279 MCKL_INLINE inline void slli_epi64(std::array<__m512i, 8> &s)
281 std::get<0>(s) = _mm512_slli_epi64(std::get<0>(s), imm8);
282 std::get<1>(s) = _mm512_slli_epi64(std::get<1>(s), imm8);
283 std::get<2>(s) = _mm512_slli_epi64(std::get<2>(s), imm8);
284 std::get<3>(s) = _mm512_slli_epi64(std::get<3>(s), imm8);
285 std::get<4>(s) = _mm512_slli_epi64(std::get<4>(s), imm8);
286 std::get<5>(s) = _mm512_slli_epi64(std::get<5>(s), imm8);
287 std::get<6>(s) = _mm512_slli_epi64(std::get<6>(s), imm8);
288 std::get<7>(s) = _mm512_slli_epi64(std::get<7>(s), imm8);
292 MCKL_INLINE inline void srli_epi64(std::array<__m512i, 8> &s)
294 std::get<0>(s) = _mm512_srli_epi64(std::get<0>(s), imm8);
295 std::get<1>(s) = _mm512_srli_epi64(std::get<1>(s), imm8);
296 std::get<2>(s) = _mm512_srli_epi64(std::get<2>(s), imm8);
297 std::get<3>(s) = _mm512_srli_epi64(std::get<3>(s), imm8);
298 std::get<4>(s) = _mm512_srli_epi64(std::get<4>(s), imm8);
299 std::get<5>(s) = _mm512_srli_epi64(std::get<5>(s), imm8);
300 std::get<6>(s) = _mm512_srli_epi64(std::get<6>(s), imm8);
301 std::get<7>(s) = _mm512_srli_epi64(std::get<7>(s), imm8);
305 MCKL_INLINE inline void shuffle_epi32(std::array<__m512i, 8> &s)
307 std::get<0>(s) = _mm512_shuffle_epi32(std::get<0>(s), imm8);
308 std::get<1>(s) = _mm512_shuffle_epi32(std::get<1>(s), imm8);
309 std::get<2>(s) = _mm512_shuffle_epi32(std::get<2>(s), imm8);
310 std::get<3>(s) = _mm512_shuffle_epi32(std::get<3>(s), imm8);
311 std::get<4>(s) = _mm512_shuffle_epi32(std::get<4>(s), imm8);
312 std::get<5>(s) = _mm512_shuffle_epi32(std::get<5>(s), imm8);
313 std::get<6>(s) = _mm512_shuffle_epi32(std::get<6>(s), imm8);
314 std::get<7>(s) = _mm512_shuffle_epi32(std::get<7>(s), imm8);
317 MCKL_INLINE inline void and_si512(
const std::array<__m512i, 8> &s,
318 const __m512i &a, std::array<__m512i, 8> &t)
320 std::get<0>(t) = _mm512_and_si512(std::get<0>(s), a);
321 std::get<1>(t) = _mm512_and_si512(std::get<1>(s), a);
322 std::get<2>(t) = _mm512_and_si512(std::get<2>(s), a);
323 std::get<3>(t) = _mm512_and_si512(std::get<3>(s), a);
324 std::get<4>(t) = _mm512_and_si512(std::get<4>(s), a);
325 std::get<5>(t) = _mm512_and_si512(std::get<5>(s), a);
326 std::get<6>(t) = _mm512_and_si512(std::get<6>(s), a);
327 std::get<7>(t) = _mm512_and_si512(std::get<7>(s), a);
330 MCKL_INLINE inline void and_si512(std::array<__m512i, 8> &s,
const __m512i &a)
332 std::get<0>(s) = _mm512_and_si512(std::get<0>(s), a);
333 std::get<1>(s) = _mm512_and_si512(std::get<1>(s), a);
334 std::get<2>(s) = _mm512_and_si512(std::get<2>(s), a);
335 std::get<3>(s) = _mm512_and_si512(std::get<3>(s), a);
336 std::get<4>(s) = _mm512_and_si512(std::get<4>(s), a);
337 std::get<5>(s) = _mm512_and_si512(std::get<5>(s), a);
338 std::get<6>(s) = _mm512_and_si512(std::get<6>(s), a);
339 std::get<7>(s) = _mm512_and_si512(std::get<7>(s), a);
343 std::array<__m512i, 8> &s,
const std::array<__m512i, 8> &a)
345 std::get<0>(s) = _mm512_xor_si512(std::get<0>(s), std::get<0>(a));
346 std::get<1>(s) = _mm512_xor_si512(std::get<1>(s), std::get<1>(a));
347 std::get<2>(s) = _mm512_xor_si512(std::get<2>(s), std::get<2>(a));
348 std::get<3>(s) = _mm512_xor_si512(std::get<3>(s), std::get<3>(a));
349 std::get<4>(s) = _mm512_xor_si512(std::get<4>(s), std::get<4>(a));
350 std::get<5>(s) = _mm512_xor_si512(std::get<5>(s), std::get<5>(a));
351 std::get<6>(s) = _mm512_xor_si512(std::get<6>(s), std::get<6>(a));
352 std::get<7>(s) = _mm512_xor_si512(std::get<7>(s), std::get<7>(a));
355 MCKL_INLINE inline void xor_si512(std::array<__m512i, 8> &s,
const __m512i &a)
357 std::get<0>(s) = _mm512_xor_si512(std::get<0>(s), a);
358 std::get<1>(s) = _mm512_xor_si512(std::get<1>(s), a);
359 std::get<2>(s) = _mm512_xor_si512(std::get<2>(s), a);
360 std::get<3>(s) = _mm512_xor_si512(std::get<3>(s), a);
361 std::get<4>(s) = _mm512_xor_si512(std::get<4>(s), a);
362 std::get<5>(s) = _mm512_xor_si512(std::get<5>(s), a);
363 std::get<6>(s) = _mm512_xor_si512(std::get<6>(s), a);
364 std::get<7>(s) = _mm512_xor_si512(std::get<7>(s), a);
368 std::array<__m512i, 8> &s,
const std::array<__m512i, 8> &a)
370 std::get<0>(s) = _mm512_add_epi32(std::get<0>(s), std::get<0>(a));
371 std::get<1>(s) = _mm512_add_epi32(std::get<1>(s), std::get<1>(a));
372 std::get<2>(s) = _mm512_add_epi32(std::get<2>(s), std::get<2>(a));
373 std::get<3>(s) = _mm512_add_epi32(std::get<3>(s), std::get<3>(a));
374 std::get<4>(s) = _mm512_add_epi32(std::get<4>(s), std::get<4>(a));
375 std::get<5>(s) = _mm512_add_epi32(std::get<5>(s), std::get<5>(a));
376 std::get<6>(s) = _mm512_add_epi32(std::get<6>(s), std::get<6>(a));
377 std::get<7>(s) = _mm512_add_epi32(std::get<7>(s), std::get<7>(a));
381 std::array<__m512i, 8> &s,
const std::array<__m512i, 8> &a)
383 std::get<0>(s) = _mm512_add_epi64(std::get<0>(s), std::get<0>(a));
384 std::get<1>(s) = _mm512_add_epi64(std::get<1>(s), std::get<1>(a));
385 std::get<2>(s) = _mm512_add_epi64(std::get<2>(s), std::get<2>(a));
386 std::get<3>(s) = _mm512_add_epi64(std::get<3>(s), std::get<3>(a));
387 std::get<4>(s) = _mm512_add_epi64(std::get<4>(s), std::get<4>(a));
388 std::get<5>(s) = _mm512_add_epi64(std::get<5>(s), std::get<5>(a));
389 std::get<6>(s) = _mm512_add_epi64(std::get<6>(s), std::get<6>(a));
390 std::get<7>(s) = _mm512_add_epi64(std::get<7>(s), std::get<7>(a));
393 MCKL_INLINE inline void add_epi64(std::array<__m512i, 8> &s,
const __m512i &a)
395 std::get<0>(s) = _mm512_add_epi64(std::get<0>(s), a);
396 std::get<1>(s) = _mm512_add_epi64(std::get<1>(s), a);
397 std::get<2>(s) = _mm512_add_epi64(std::get<2>(s), a);
398 std::get<3>(s) = _mm512_add_epi64(std::get<3>(s), a);
399 std::get<4>(s) = _mm512_add_epi64(std::get<4>(s), a);
400 std::get<5>(s) = _mm512_add_epi64(std::get<5>(s), a);
401 std::get<6>(s) = _mm512_add_epi64(std::get<6>(s), a);
402 std::get<7>(s) = _mm512_add_epi64(std::get<7>(s), a);
405 MCKL_INLINE inline void mul_epu32(
const std::array<__m512i, 8> &s,
406 const __m512i &a, std::array<__m512i, 8> &t)
408 std::get<0>(t) = _mm512_mul_epu32(std::get<0>(s), a);
409 std::get<1>(t) = _mm512_mul_epu32(std::get<1>(s), a);
410 std::get<2>(t) = _mm512_mul_epu32(std::get<2>(s), a);
411 std::get<3>(t) = _mm512_mul_epu32(std::get<3>(s), a);
412 std::get<4>(t) = _mm512_mul_epu32(std::get<4>(s), a);
413 std::get<5>(t) = _mm512_mul_epu32(std::get<5>(s), a);
414 std::get<6>(t) = _mm512_mul_epu32(std::get<6>(s), a);
415 std::get<7>(t) = _mm512_mul_epu32(std::get<7>(s), a);
418 MCKL_INLINE inline void add_ps(std::array<__m512i, 8> &s,
const __m512i &a)
420 std::get<0>(s) = _mm512_castps_si512(_mm512_add_ps(
421 _mm512_castsi512_ps(std::get<0>(s)), _mm512_castsi512_ps(a)));
422 std::get<1>(s) = _mm512_castps_si512(_mm512_add_ps(
423 _mm512_castsi512_ps(std::get<1>(s)), _mm512_castsi512_ps(a)));
424 std::get<2>(s) = _mm512_castps_si512(_mm512_add_ps(
425 _mm512_castsi512_ps(std::get<2>(s)), _mm512_castsi512_ps(a)));
426 std::get<3>(s) = _mm512_castps_si512(_mm512_add_ps(
427 _mm512_castsi512_ps(std::get<3>(s)), _mm512_castsi512_ps(a)));
428 std::get<4>(s) = _mm512_castps_si512(_mm512_add_ps(
429 _mm512_castsi512_ps(std::get<4>(s)), _mm512_castsi512_ps(a)));
430 std::get<5>(s) = _mm512_castps_si512(_mm512_add_ps(
431 _mm512_castsi512_ps(std::get<5>(s)), _mm512_castsi512_ps(a)));
432 std::get<6>(s) = _mm512_castps_si512(_mm512_add_ps(
433 _mm512_castsi512_ps(std::get<6>(s)), _mm512_castsi512_ps(a)));
434 std::get<7>(s) = _mm512_castps_si512(_mm512_add_ps(
435 _mm512_castsi512_ps(std::get<7>(s)), _mm512_castsi512_ps(a)));
438 MCKL_INLINE inline void mul_ps(std::array<__m512i, 8> &s,
const __m512i &a)
440 std::get<0>(s) = _mm512_castps_si512(_mm512_mul_ps(
441 _mm512_castsi512_ps(std::get<0>(s)), _mm512_castsi512_ps(a)));
442 std::get<1>(s) = _mm512_castps_si512(_mm512_mul_ps(
443 _mm512_castsi512_ps(std::get<1>(s)), _mm512_castsi512_ps(a)));
444 std::get<2>(s) = _mm512_castps_si512(_mm512_mul_ps(
445 _mm512_castsi512_ps(std::get<2>(s)), _mm512_castsi512_ps(a)));
446 std::get<3>(s) = _mm512_castps_si512(_mm512_mul_ps(
447 _mm512_castsi512_ps(std::get<3>(s)), _mm512_castsi512_ps(a)));
448 std::get<4>(s) = _mm512_castps_si512(_mm512_mul_ps(
449 _mm512_castsi512_ps(std::get<4>(s)), _mm512_castsi512_ps(a)));
450 std::get<5>(s) = _mm512_castps_si512(_mm512_mul_ps(
451 _mm512_castsi512_ps(std::get<5>(s)), _mm512_castsi512_ps(a)));
452 std::get<6>(s) = _mm512_castps_si512(_mm512_mul_ps(
453 _mm512_castsi512_ps(std::get<6>(s)), _mm512_castsi512_ps(a)));
454 std::get<7>(s) = _mm512_castps_si512(_mm512_mul_ps(
455 _mm512_castsi512_ps(std::get<7>(s)), _mm512_castsi512_ps(a)));
458 MCKL_INLINE inline void add_pd(std::array<__m512i, 8> &s,
const __m512i &a)
460 std::get<0>(s) = _mm512_castpd_si512(_mm512_add_pd(
461 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
462 std::get<1>(s) = _mm512_castpd_si512(_mm512_add_pd(
463 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
464 std::get<2>(s) = _mm512_castpd_si512(_mm512_add_pd(
465 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
466 std::get<3>(s) = _mm512_castpd_si512(_mm512_add_pd(
467 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
468 std::get<4>(s) = _mm512_castpd_si512(_mm512_add_pd(
469 _mm512_castsi512_pd(std::get<4>(s)), _mm512_castsi512_pd(a)));
470 std::get<5>(s) = _mm512_castpd_si512(_mm512_add_pd(
471 _mm512_castsi512_pd(std::get<5>(s)), _mm512_castsi512_pd(a)));
472 std::get<6>(s) = _mm512_castpd_si512(_mm512_add_pd(
473 _mm512_castsi512_pd(std::get<6>(s)), _mm512_castsi512_pd(a)));
474 std::get<7>(s) = _mm512_castpd_si512(_mm512_add_pd(
475 _mm512_castsi512_pd(std::get<7>(s)), _mm512_castsi512_pd(a)));
479 std::array<__m512i, 8> &s,
const std::array<__m512i, 8> &a)
482 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<0>(s)),
483 _mm512_castsi512_pd(std::get<0>(a))));
485 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<1>(s)),
486 _mm512_castsi512_pd(std::get<1>(a))));
488 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<2>(s)),
489 _mm512_castsi512_pd(std::get<2>(a))));
491 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<3>(s)),
492 _mm512_castsi512_pd(std::get<3>(a))));
494 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<4>(s)),
495 _mm512_castsi512_pd(std::get<4>(a))));
497 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<5>(s)),
498 _mm512_castsi512_pd(std::get<5>(a))));
500 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<6>(s)),
501 _mm512_castsi512_pd(std::get<6>(a))));
503 _mm512_castpd_si512(_mm512_add_pd(_mm512_castsi512_pd(std::get<7>(s)),
504 _mm512_castsi512_pd(std::get<7>(a))));
507 MCKL_INLINE inline void sub_pd(std::array<__m512i, 8> &s,
const __m512i &a)
509 std::get<0>(s) = _mm512_castpd_si512(_mm512_sub_pd(
510 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
511 std::get<1>(s) = _mm512_castpd_si512(_mm512_sub_pd(
512 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
513 std::get<2>(s) = _mm512_castpd_si512(_mm512_sub_pd(
514 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
515 std::get<3>(s) = _mm512_castpd_si512(_mm512_sub_pd(
516 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
517 std::get<4>(s) = _mm512_castpd_si512(_mm512_sub_pd(
518 _mm512_castsi512_pd(std::get<4>(s)), _mm512_castsi512_pd(a)));
519 std::get<5>(s) = _mm512_castpd_si512(_mm512_sub_pd(
520 _mm512_castsi512_pd(std::get<5>(s)), _mm512_castsi512_pd(a)));
521 std::get<6>(s) = _mm512_castpd_si512(_mm512_sub_pd(
522 _mm512_castsi512_pd(std::get<6>(s)), _mm512_castsi512_pd(a)));
523 std::get<7>(s) = _mm512_castpd_si512(_mm512_sub_pd(
524 _mm512_castsi512_pd(std::get<7>(s)), _mm512_castsi512_pd(a)));
527 MCKL_INLINE inline void mul_pd(std::array<__m512i, 8> &s,
const __m512i &a)
529 std::get<0>(s) = _mm512_castpd_si512(_mm512_mul_pd(
530 _mm512_castsi512_pd(std::get<0>(s)), _mm512_castsi512_pd(a)));
531 std::get<1>(s) = _mm512_castpd_si512(_mm512_mul_pd(
532 _mm512_castsi512_pd(std::get<1>(s)), _mm512_castsi512_pd(a)));
533 std::get<2>(s) = _mm512_castpd_si512(_mm512_mul_pd(
534 _mm512_castsi512_pd(std::get<2>(s)), _mm512_castsi512_pd(a)));
535 std::get<3>(s) = _mm512_castpd_si512(_mm512_mul_pd(
536 _mm512_castsi512_pd(std::get<3>(s)), _mm512_castsi512_pd(a)));
537 std::get<4>(s) = _mm512_castpd_si512(_mm512_mul_pd(
538 _mm512_castsi512_pd(std::get<4>(s)), _mm512_castsi512_pd(a)));
539 std::get<5>(s) = _mm512_castpd_si512(_mm512_mul_pd(
540 _mm512_castsi512_pd(std::get<5>(s)), _mm512_castsi512_pd(a)));
541 std::get<6>(s) = _mm512_castpd_si512(_mm512_mul_pd(
542 _mm512_castsi512_pd(std::get<6>(s)), _mm512_castsi512_pd(a)));
543 std::get<7>(s) = _mm512_castpd_si512(_mm512_mul_pd(
544 _mm512_castsi512_pd(std::get<7>(s)), _mm512_castsi512_pd(a)));
548 std::array<__m512i, 8> &s,
const std::array<__m512i, 8> &a)
551 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<0>(s)),
552 _mm512_castsi512_pd(std::get<0>(a))));
554 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<1>(s)),
555 _mm512_castsi512_pd(std::get<1>(a))));
557 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<2>(s)),
558 _mm512_castsi512_pd(std::get<2>(a))));
560 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<3>(s)),
561 _mm512_castsi512_pd(std::get<3>(a))));
563 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<4>(s)),
564 _mm512_castsi512_pd(std::get<4>(a))));
566 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<5>(s)),
567 _mm512_castsi512_pd(std::get<5>(a))));
569 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<6>(s)),
570 _mm512_castsi512_pd(std::get<6>(a))));
572 _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(std::get<7>(s)),
573 _mm512_castsi512_pd(std::get<7>(a))));
577 MCKL_INLINE inline void slli_epi32(std::array<__m512i, 16> &s)
579 std::get<0x0>(s) = _mm512_slli_epi32(std::get<0x0>(s), imm8);
580 std::get<0x1>(s) = _mm512_slli_epi32(std::get<0x1>(s), imm8);
581 std::get<0x2>(s) = _mm512_slli_epi32(std::get<0x2>(s), imm8);
582 std::get<0x3>(s) = _mm512_slli_epi32(std::get<0x3>(s), imm8);
583 std::get<0x4>(s) = _mm512_slli_epi32(std::get<0x4>(s), imm8);
584 std::get<0x5>(s) = _mm512_slli_epi32(std::get<0x5>(s), imm8);
585 std::get<0x6>(s) = _mm512_slli_epi32(std::get<0x6>(s), imm8);
586 std::get<0x7>(s) = _mm512_slli_epi32(std::get<0x7>(s), imm8);
587 std::get<0x8>(s) = _mm512_slli_epi32(std::get<0x8>(s), imm8);
588 std::get<0x9>(s) = _mm512_slli_epi32(std::get<0x9>(s), imm8);
589 std::get<0xA>(s) = _mm512_slli_epi32(std::get<0xA>(s), imm8);
590 std::get<0xB>(s) = _mm512_slli_epi32(std::get<0xB>(s), imm8);
591 std::get<0xC>(s) = _mm512_slli_epi32(std::get<0xC>(s), imm8);
592 std::get<0xD>(s) = _mm512_slli_epi32(std::get<0xD>(s), imm8);
593 std::get<0xE>(s) = _mm512_slli_epi32(std::get<0xE>(s), imm8);
594 std::get<0xF>(s) = _mm512_slli_epi32(std::get<0xF>(s), imm8);
598 MCKL_INLINE inline void srli_epi32(std::array<__m512i, 16> &s)
600 std::get<0x0>(s) = _mm512_srli_epi32(std::get<0x0>(s), imm8);
601 std::get<0x1>(s) = _mm512_srli_epi32(std::get<0x1>(s), imm8);
602 std::get<0x2>(s) = _mm512_srli_epi32(std::get<0x2>(s), imm8);
603 std::get<0x3>(s) = _mm512_srli_epi32(std::get<0x3>(s), imm8);
604 std::get<0x4>(s) = _mm512_srli_epi32(std::get<0x4>(s), imm8);
605 std::get<0x5>(s) = _mm512_srli_epi32(std::get<0x5>(s), imm8);
606 std::get<0x6>(s) = _mm512_srli_epi32(std::get<0x6>(s), imm8);
607 std::get<0x7>(s) = _mm512_srli_epi32(std::get<0x7>(s), imm8);
608 std::get<0x8>(s) = _mm512_srli_epi32(std::get<0x8>(s), imm8);
609 std::get<0x9>(s) = _mm512_srli_epi32(std::get<0x9>(s), imm8);
610 std::get<0xA>(s) = _mm512_srli_epi32(std::get<0xA>(s), imm8);
611 std::get<0xB>(s) = _mm512_srli_epi32(std::get<0xB>(s), imm8);
612 std::get<0xC>(s) = _mm512_srli_epi32(std::get<0xC>(s), imm8);
613 std::get<0xD>(s) = _mm512_srli_epi32(std::get<0xD>(s), imm8);
614 std::get<0xE>(s) = _mm512_srli_epi32(std::get<0xE>(s), imm8);
615 std::get<0xF>(s) = _mm512_srli_epi32(std::get<0xF>(s), imm8);
619 MCKL_INLINE inline void slli_epi64(std::array<__m512i, 16> &s)
621 std::get<0x0>(s) = _mm512_slli_epi64(std::get<0x0>(s), imm8);
622 std::get<0x1>(s) = _mm512_slli_epi64(std::get<0x1>(s), imm8);
623 std::get<0x2>(s) = _mm512_slli_epi64(std::get<0x2>(s), imm8);
624 std::get<0x3>(s) = _mm512_slli_epi64(std::get<0x3>(s), imm8);
625 std::get<0x4>(s) = _mm512_slli_epi64(std::get<0x4>(s), imm8);
626 std::get<0x5>(s) = _mm512_slli_epi64(std::get<0x5>(s), imm8);
627 std::get<0x6>(s) = _mm512_slli_epi64(std::get<0x6>(s), imm8);
628 std::get<0x7>(s) = _mm512_slli_epi64(std::get<0x7>(s), imm8);
629 std::get<0x8>(s) = _mm512_slli_epi64(std::get<0x8>(s), imm8);
630 std::get<0x9>(s) = _mm512_slli_epi64(std::get<0x9>(s), imm8);
631 std::get<0xA>(s) = _mm512_slli_epi64(std::get<0xA>(s), imm8);
632 std::get<0xB>(s) = _mm512_slli_epi64(std::get<0xB>(s), imm8);
633 std::get<0xC>(s) = _mm512_slli_epi64(std::get<0xC>(s), imm8);
634 std::get<0xD>(s) = _mm512_slli_epi64(std::get<0xD>(s), imm8);
635 std::get<0xE>(s) = _mm512_slli_epi64(std::get<0xE>(s), imm8);
636 std::get<0xF>(s) = _mm512_slli_epi64(std::get<0xF>(s), imm8);
640 MCKL_INLINE inline void srli_epi64(std::array<__m512i, 16> &s)
642 std::get<0x0>(s) = _mm512_srli_epi64(std::get<0x0>(s), imm8);
643 std::get<0x1>(s) = _mm512_srli_epi64(std::get<0x1>(s), imm8);
644 std::get<0x2>(s) = _mm512_srli_epi64(std::get<0x2>(s), imm8);
645 std::get<0x3>(s) = _mm512_srli_epi64(std::get<0x3>(s), imm8);
646 std::get<0x4>(s) = _mm512_srli_epi64(std::get<0x4>(s), imm8);
647 std::get<0x5>(s) = _mm512_srli_epi64(std::get<0x5>(s), imm8);
648 std::get<0x6>(s) = _mm512_srli_epi64(std::get<0x6>(s), imm8);
649 std::get<0x7>(s) = _mm512_srli_epi64(std::get<0x7>(s), imm8);
650 std::get<0x8>(s) = _mm512_srli_epi64(std::get<0x8>(s), imm8);
651 std::get<0x9>(s) = _mm512_srli_epi64(std::get<0x9>(s), imm8);
652 std::get<0xA>(s) = _mm512_srli_epi64(std::get<0xA>(s), imm8);
653 std::get<0xB>(s) = _mm512_srli_epi64(std::get<0xB>(s), imm8);
654 std::get<0xC>(s) = _mm512_srli_epi64(std::get<0xC>(s), imm8);
655 std::get<0xD>(s) = _mm512_srli_epi64(std::get<0xD>(s), imm8);
656 std::get<0xE>(s) = _mm512_srli_epi64(std::get<0xE>(s), imm8);
657 std::get<0xF>(s) = _mm512_srli_epi64(std::get<0xF>(s), imm8);
661 MCKL_INLINE inline void shuffle_epi32(std::array<__m512i, 16> &s)
663 std::get<0x0>(s) = _mm512_shuffle_epi32(std::get<0x0>(s), imm8);
664 std::get<0x1>(s) = _mm512_shuffle_epi32(std::get<0x1>(s), imm8);
665 std::get<0x2>(s) = _mm512_shuffle_epi32(std::get<0x2>(s), imm8);
666 std::get<0x3>(s) = _mm512_shuffle_epi32(std::get<0x3>(s), imm8);
667 std::get<0x4>(s) = _mm512_shuffle_epi32(std::get<0x4>(s), imm8);
668 std::get<0x5>(s) = _mm512_shuffle_epi32(std::get<0x5>(s), imm8);
669 std::get<0x6>(s) = _mm512_shuffle_epi32(std::get<0x6>(s), imm8);
670 std::get<0x7>(s) = _mm512_shuffle_epi32(std::get<0x7>(s), imm8);
671 std::get<0x8>(s) = _mm512_shuffle_epi32(std::get<0x8>(s), imm8);
672 std::get<0x9>(s) = _mm512_shuffle_epi32(std::get<0x9>(s), imm8);
673 std::get<0xA>(s) = _mm512_shuffle_epi32(std::get<0xA>(s), imm8);
674 std::get<0xB>(s) = _mm512_shuffle_epi32(std::get<0xB>(s), imm8);
675 std::get<0xC>(s) = _mm512_shuffle_epi32(std::get<0xC>(s), imm8);
676 std::get<0xD>(s) = _mm512_shuffle_epi32(std::get<0xD>(s), imm8);
677 std::get<0xE>(s) = _mm512_shuffle_epi32(std::get<0xE>(s), imm8);
678 std::get<0xF>(s) = _mm512_shuffle_epi32(std::get<0xF>(s), imm8);
681 MCKL_INLINE inline void and_si512(
const std::array<__m512i, 16> &s,
682 const __m512i &a, std::array<__m512i, 16> &t)
684 std::get<0x0>(t) = _mm512_and_si512(std::get<0x0>(s), a);
685 std::get<0x1>(t) = _mm512_and_si512(std::get<0x1>(s), a);
686 std::get<0x2>(t) = _mm512_and_si512(std::get<0x2>(s), a);
687 std::get<0x3>(t) = _mm512_and_si512(std::get<0x3>(s), a);
688 std::get<0x4>(t) = _mm512_and_si512(std::get<0x4>(s), a);
689 std::get<0x5>(t) = _mm512_and_si512(std::get<0x5>(s), a);
690 std::get<0x6>(t) = _mm512_and_si512(std::get<0x6>(s), a);
691 std::get<0x7>(t) = _mm512_and_si512(std::get<0x7>(s), a);
692 std::get<0x8>(t) = _mm512_and_si512(std::get<0x8>(s), a);
693 std::get<0x9>(t) = _mm512_and_si512(std::get<0x9>(s), a);
694 std::get<0xA>(t) = _mm512_and_si512(std::get<0xA>(s), a);
695 std::get<0xB>(t) = _mm512_and_si512(std::get<0xB>(s), a);
696 std::get<0xC>(t) = _mm512_and_si512(std::get<0xC>(s), a);
697 std::get<0xD>(t) = _mm512_and_si512(std::get<0xD>(s), a);
698 std::get<0xE>(t) = _mm512_and_si512(std::get<0xE>(s), a);
699 std::get<0xF>(t) = _mm512_and_si512(std::get<0xF>(s), a);
702 MCKL_INLINE inline void and_si512(std::array<__m512i, 16> &s,
const __m512i &a)
704 std::get<0x0>(s) = _mm512_and_si512(std::get<0x0>(s), a);
705 std::get<0x1>(s) = _mm512_and_si512(std::get<0x1>(s), a);
706 std::get<0x2>(s) = _mm512_and_si512(std::get<0x2>(s), a);
707 std::get<0x3>(s) = _mm512_and_si512(std::get<0x3>(s), a);
708 std::get<0x4>(s) = _mm512_and_si512(std::get<0x4>(s), a);
709 std::get<0x5>(s) = _mm512_and_si512(std::get<0x5>(s), a);
710 std::get<0x6>(s) = _mm512_and_si512(std::get<0x6>(s), a);
711 std::get<0x7>(s) = _mm512_and_si512(std::get<0x7>(s), a);
712 std::get<0x8>(s) = _mm512_and_si512(std::get<0x8>(s), a);
713 std::get<0x9>(s) = _mm512_and_si512(std::get<0x9>(s), a);
714 std::get<0xA>(s) = _mm512_and_si512(std::get<0xA>(s), a);
715 std::get<0xB>(s) = _mm512_and_si512(std::get<0xB>(s), a);
716 std::get<0xC>(s) = _mm512_and_si512(std::get<0xC>(s), a);
717 std::get<0xD>(s) = _mm512_and_si512(std::get<0xD>(s), a);
718 std::get<0xE>(s) = _mm512_and_si512(std::get<0xE>(s), a);
719 std::get<0xF>(s) = _mm512_and_si512(std::get<0xF>(s), a);
723 std::array<__m512i, 16> &s,
const std::array<__m512i, 16> &a)
725 std::get<0x0>(s) = _mm512_xor_si512(std::get<0x0>(s), std::get<0x0>(a));
726 std::get<0x1>(s) = _mm512_xor_si512(std::get<0x1>(s), std::get<0x1>(a));
727 std::get<0x2>(s) = _mm512_xor_si512(std::get<0x2>(s), std::get<0x2>(a));
728 std::get<0x3>(s) = _mm512_xor_si512(std::get<0x3>(s), std::get<0x3>(a));
729 std::get<0x4>(s) = _mm512_xor_si512(std::get<0x4>(s), std::get<0x4>(a));
730 std::get<0x5>(s) = _mm512_xor_si512(std::get<0x5>(s), std::get<0x5>(a));
731 std::get<0x6>(s) = _mm512_xor_si512(std::get<0x6>(s), std::get<0x6>(a));
732 std::get<0x7>(s) = _mm512_xor_si512(std::get<0x7>(s), std::get<0x7>(a));
733 std::get<0x8>(s) = _mm512_xor_si512(std::get<0x8>(s), std::get<0x8>(a));
734 std::get<0x9>(s) = _mm512_xor_si512(std::get<0x9>(s), std::get<0x9>(a));
735 std::get<0xA>(s) = _mm512_xor_si512(std::get<0xA>(s), std::get<0xA>(a));
736 std::get<0xB>(s) = _mm512_xor_si512(std::get<0xB>(s), std::get<0xB>(a));
737 std::get<0xC>(s) = _mm512_xor_si512(std::get<0xC>(s), std::get<0xC>(a));
738 std::get<0xD>(s) = _mm512_xor_si512(std::get<0xD>(s), std::get<0xD>(a));
739 std::get<0xE>(s) = _mm512_xor_si512(std::get<0xE>(s), std::get<0xE>(a));
740 std::get<0xF>(s) = _mm512_xor_si512(std::get<0xF>(s), std::get<0xF>(a));
743 MCKL_INLINE inline void xor_si512(std::array<__m512i, 16> &s,
const __m512i &a)
745 std::get<0x0>(s) = _mm512_xor_si512(std::get<0x0>(s), a);
746 std::get<0x1>(s) = _mm512_xor_si512(std::get<0x1>(s), a);
747 std::get<0x2>(s) = _mm512_xor_si512(std::get<0x2>(s), a);
748 std::get<0x3>(s) = _mm512_xor_si512(std::get<0x3>(s), a);
749 std::get<0x4>(s) = _mm512_xor_si512(std::get<0x4>(s), a);
750 std::get<0x5>(s) = _mm512_xor_si512(std::get<0x5>(s), a);
751 std::get<0x6>(s) = _mm512_xor_si512(std::get<0x6>(s), a);
752 std::get<0x7>(s) = _mm512_xor_si512(std::get<0x7>(s), a);
753 std::get<0x8>(s) = _mm512_xor_si512(std::get<0x8>(s), a);
754 std::get<0x9>(s) = _mm512_xor_si512(std::get<0x9>(s), a);
755 std::get<0xA>(s) = _mm512_xor_si512(std::get<0xA>(s), a);
756 std::get<0xB>(s) = _mm512_xor_si512(std::get<0xB>(s), a);
757 std::get<0xC>(s) = _mm512_xor_si512(std::get<0xC>(s), a);
758 std::get<0xD>(s) = _mm512_xor_si512(std::get<0xD>(s), a);
759 std::get<0xE>(s) = _mm512_xor_si512(std::get<0xE>(s), a);
760 std::get<0xF>(s) = _mm512_xor_si512(std::get<0xF>(s), a);
764 std::array<__m512i, 16> &s,
const std::array<__m512i, 16> &a)
766 std::get<0x0>(s) = _mm512_add_epi32(std::get<0x0>(s), std::get<0x0>(a));
767 std::get<0x1>(s) = _mm512_add_epi32(std::get<0x1>(s), std::get<0x1>(a));
768 std::get<0x2>(s) = _mm512_add_epi32(std::get<0x2>(s), std::get<0x2>(a));
769 std::get<0x3>(s) = _mm512_add_epi32(std::get<0x3>(s), std::get<0x3>(a));
770 std::get<0x4>(s) = _mm512_add_epi32(std::get<0x4>(s), std::get<0x4>(a));
771 std::get<0x5>(s) = _mm512_add_epi32(std::get<0x5>(s), std::get<0x5>(a));
772 std::get<0x6>(s) = _mm512_add_epi32(std::get<0x6>(s), std::get<0x6>(a));
773 std::get<0x7>(s) = _mm512_add_epi32(std::get<0x7>(s), std::get<0x7>(a));
774 std::get<0x8>(s) = _mm512_add_epi32(std::get<0x8>(s), std::get<0x8>(a));
775 std::get<0x9>(s) = _mm512_add_epi32(std::get<0x9>(s), std::get<0x9>(a));
776 std::get<0xA>(s) = _mm512_add_epi32(std::get<0xA>(s), std::get<0xA>(a));
777 std::get<0xB>(s) = _mm512_add_epi32(std::get<0xB>(s), std::get<0xB>(a));
778 std::get<0xC>(s) = _mm512_add_epi32(std::get<0xC>(s), std::get<0xC>(a));
779 std::get<0xD>(s) = _mm512_add_epi32(std::get<0xD>(s), std::get<0xD>(a));
780 std::get<0xE>(s) = _mm512_add_epi32(std::get<0xE>(s), std::get<0xE>(a));
781 std::get<0xF>(s) = _mm512_add_epi32(std::get<0xF>(s), std::get<0xF>(a));
785 std::array<__m512i, 16> &s,
const std::array<__m512i, 16> &a)
787 std::get<0x0>(s) = _mm512_add_epi64(std::get<0x0>(s), std::get<0x0>(a));
788 std::get<0x1>(s) = _mm512_add_epi64(std::get<0x1>(s), std::get<0x1>(a));
789 std::get<0x2>(s) = _mm512_add_epi64(std::get<0x2>(s), std::get<0x2>(a));
790 std::get<0x3>(s) = _mm512_add_epi64(std::get<0x3>(s), std::get<0x3>(a));
791 std::get<0x4>(s) = _mm512_add_epi64(std::get<0x4>(s), std::get<0x4>(a));
792 std::get<0x5>(s) = _mm512_add_epi64(std::get<0x5>(s), std::get<0x5>(a));
793 std::get<0x6>(s) = _mm512_add_epi64(std::get<0x6>(s), std::get<0x6>(a));
794 std::get<0x7>(s) = _mm512_add_epi64(std::get<0x7>(s), std::get<0x7>(a));
795 std::get<0x8>(s) = _mm512_add_epi64(std::get<0x8>(s), std::get<0x8>(a));
796 std::get<0x9>(s) = _mm512_add_epi64(std::get<0x9>(s), std::get<0x9>(a));
797 std::get<0xA>(s) = _mm512_add_epi64(std::get<0xA>(s), std::get<0xA>(a));
798 std::get<0xB>(s) = _mm512_add_epi64(std::get<0xB>(s), std::get<0xB>(a));
799 std::get<0xC>(s) = _mm512_add_epi64(std::get<0xC>(s), std::get<0xC>(a));
800 std::get<0xD>(s) = _mm512_add_epi64(std::get<0xD>(s), std::get<0xD>(a));
801 std::get<0xE>(s) = _mm512_add_epi64(std::get<0xE>(s), std::get<0xE>(a));
802 std::get<0xF>(s) = _mm512_add_epi64(std::get<0xF>(s), std::get<0xF>(a));
805 MCKL_INLINE inline void add_epi64(std::array<__m512i, 16> &s,
const __m512i &a)
807 std::get<0x0>(s) = _mm512_add_epi64(std::get<0x0>(s), a);
808 std::get<0x1>(s) = _mm512_add_epi64(std::get<0x1>(s), a);
809 std::get<0x2>(s) = _mm512_add_epi64(std::get<0x2>(s), a);
810 std::get<0x3>(s) = _mm512_add_epi64(std::get<0x3>(s), a);
811 std::get<0x4>(s) = _mm512_add_epi64(std::get<0x4>(s), a);
812 std::get<0x5>(s) = _mm512_add_epi64(std::get<0x5>(s), a);
813 std::get<0x6>(s) = _mm512_add_epi64(std::get<0x6>(s), a);
814 std::get<0x7>(s) = _mm512_add_epi64(std::get<0x7>(s), a);
815 std::get<0x8>(s) = _mm512_add_epi64(std::get<0x8>(s), a);
816 std::get<0x9>(s) = _mm512_add_epi64(std::get<0x9>(s), a);
817 std::get<0xA>(s) = _mm512_add_epi64(std::get<0xA>(s), a);
818 std::get<0xB>(s) = _mm512_add_epi64(std::get<0xB>(s), a);
819 std::get<0xC>(s) = _mm512_add_epi64(std::get<0xC>(s), a);
820 std::get<0xD>(s) = _mm512_add_epi64(std::get<0xD>(s), a);
821 std::get<0xE>(s) = _mm512_add_epi64(std::get<0xE>(s), a);
822 std::get<0xF>(s) = _mm512_add_epi64(std::get<0xF>(s), a);
825 MCKL_INLINE inline void mul_epu32(
const std::array<__m512i, 16> &s,
826 const __m512i &a, std::array<__m512i, 16> &t)
828 std::get<0x0>(t) = _mm512_mul_epu32(std::get<0x0>(s), a);
829 std::get<0x1>(t) = _mm512_mul_epu32(std::get<0x1>(s), a);
830 std::get<0x2>(t) = _mm512_mul_epu32(std::get<0x2>(s), a);
831 std::get<0x3>(t) = _mm512_mul_epu32(std::get<0x3>(s), a);
832 std::get<0x4>(t) = _mm512_mul_epu32(std::get<0x4>(s), a);
833 std::get<0x5>(t) = _mm512_mul_epu32(std::get<0x5>(s), a);
834 std::get<0x6>(t) = _mm512_mul_epu32(std::get<0x6>(s), a);
835 std::get<0x7>(t) = _mm512_mul_epu32(std::get<0x7>(s), a);
836 std::get<0x8>(t) = _mm512_mul_epu32(std::get<0x8>(s), a);
837 std::get<0x9>(t) = _mm512_mul_epu32(std::get<0x9>(s), a);
838 std::get<0xA>(t) = _mm512_mul_epu32(std::get<0xA>(s), a);
839 std::get<0xB>(t) = _mm512_mul_epu32(std::get<0xB>(s), a);
840 std::get<0xC>(t) = _mm512_mul_epu32(std::get<0xC>(s), a);
841 std::get<0xD>(t) = _mm512_mul_epu32(std::get<0xD>(s), a);
842 std::get<0xE>(t) = _mm512_mul_epu32(std::get<0xE>(s), a);
843 std::get<0xF>(t) = _mm512_mul_epu32(std::get<0xF>(s), a);
846 MCKL_INLINE inline void add_ps(std::array<__m512i, 16> &s,
const __m512i &a)
848 std::get<0x0>(s) = _mm512_castps_si512(_mm512_add_ps(
849 _mm512_castsi512_ps(std::get<0x0>(s)), _mm512_castsi512_ps(a)));
850 std::get<0x1>(s) = _mm512_castps_si512(_mm512_add_ps(
851 _mm512_castsi512_ps(std::get<0x1>(s)), _mm512_castsi512_ps(a)));
852 std::get<0x2>(s) = _mm512_castps_si512(_mm512_add_ps(
853 _mm512_castsi512_ps(std::get<0x2>(s)), _mm512_castsi512_ps(a)));
854 std::get<0x3>(s) = _mm512_castps_si512(_mm512_add_ps(
855 _mm512_castsi512_ps(std::get<0x3>(s)), _mm512_castsi512_ps(a)));
856 std::get<0x4>(s) = _mm512_castps_si512(_mm512_add_ps(
857 _mm512_castsi512_ps(std::get<0x4>(s)), _mm512_castsi512_ps(a)));
858 std::get<0x5>(s) = _mm512_castps_si512(_mm512_add_ps(
859 _mm512_castsi512_ps(std::get<0x5>(s)), _mm512_castsi512_ps(a)));
860 std::get<0x6>(s) = _mm512_castps_si512(_mm512_add_ps(
861 _mm512_castsi512_ps(std::get<0x6>(s)), _mm512_castsi512_ps(a)));
862 std::get<0x7>(s) = _mm512_castps_si512(_mm512_add_ps(
863 _mm512_castsi512_ps(std::get<0x7>(s)), _mm512_castsi512_ps(a)));
864 std::get<0x8>(s) = _mm512_castps_si512(_mm512_add_ps(
865 _mm512_castsi512_ps(std::get<0x8>(s)), _mm512_castsi512_ps(a)));
866 std::get<0x9>(s) = _mm512_castps_si512(_mm512_add_ps(
867 _mm512_castsi512_ps(std::get<0x9>(s)), _mm512_castsi512_ps(a)));
868 std::get<0xA>(s) = _mm512_castps_si512(_mm512_add_ps(
869 _mm512_castsi512_ps(std::get<0xA>(s)), _mm512_castsi512_ps(a)));
870 std::get<0xB>(s) = _mm512_castps_si512(_mm512_add_ps(
871 _mm512_castsi512_ps(std::get<0xB>(s)), _mm512_castsi512_ps(a)));
872 std::get<0xC>(s) = _mm512_castps_si512(_mm512_add_ps(
873 _mm512_castsi512_ps(std::get<0xC>(s)), _mm512_castsi512_ps(a)));
874 std::get<0xD>(s) = _mm512_castps_si512(_mm512_add_ps(
875 _mm512_castsi512_ps(std::get<0xD>(s)), _mm512_castsi512_ps(a)));
876 std::get<0xE>(s) = _mm512_castps_si512(_mm512_add_ps(
877 _mm512_castsi512_ps(std::get<0xE>(s)), _mm512_castsi512_ps(a)));
878 std::get<0xF>(s) = _mm512_castps_si512(_mm512_add_ps(
879 _mm512_castsi512_ps(std::get<0xF>(s)), _mm512_castsi512_ps(a)));
882 MCKL_INLINE inline void mul_ps(std::array<__m512i, 16> &s,
const __m512i &a)
884 std::get<0x0>(s) = _mm512_castps_si512(_mm512_mul_ps(
885 _mm512_castsi512_ps(std::get<0x0>(s)), _mm512_castsi512_ps(a)));
886 std::get<0x1>(s) = _mm512_castps_si512(_mm512_mul_ps(
887 _mm512_castsi512_ps(std::get<0x1>(s)), _mm512_castsi512_ps(a)));
888 std::get<0x2>(s) = _mm512_castps_si512(_mm512_mul_ps(
889 _mm512_castsi512_ps(std::get<0x2>(s)), _mm512_castsi512_ps(a)));
890 std::get<0x3>(s) = _mm512_castps_si512(_mm512_mul_ps(
891 _mm512_castsi512_ps(std::get<0x3>(s)), _mm512_castsi512_ps(a)));
892 std::get<0x4>(s) = _mm512_castps_si512(_mm512_mul_ps(
893 _mm512_castsi512_ps(std::get<0x4>(s)), _mm512_castsi512_ps(a)));
894 std::get<0x5>(s) = _mm512_castps_si512(_mm512_mul_ps(
895 _mm512_castsi512_ps(std::get<0x5>(s)), _mm512_castsi512_ps(a)));
896 std::get<0x6>(s) = _mm512_castps_si512(_mm512_mul_ps(
897 _mm512_castsi512_ps(std::get<0x6>(s)), _mm512_castsi512_ps(a)));
898 std::get<0x7>(s) = _mm512_castps_si512(_mm512_mul_ps(
899 _mm512_castsi512_ps(std::get<0x7>(s)), _mm512_castsi512_ps(a)));
900 std::get<0x8>(s) = _mm512_castps_si512(_mm512_mul_ps(
901 _mm512_castsi512_ps(std::get<0x8>(s)), _mm512_castsi512_ps(a)));
902 std::get<0x9>(s) = _mm512_castps_si512(_mm512_mul_ps(
903 _mm512_castsi512_ps(std::get<0x9>(s)), _mm512_castsi512_ps(a)));
904 std::get<0xA>(s) = _mm512_castps_si512(_mm512_mul_ps(
905 _mm512_castsi512_ps(std::get<0xA>(s)), _mm512_castsi512_ps(a)));
906 std::get<0xB>(s) = _mm512_castps_si512(_mm512_mul_ps(
907 _mm512_castsi512_ps(std::get<0xB>(s)), _mm512_castsi512_ps(a)));
908 std::get<0xC>(s) = _mm512_castps_si512(_mm512_mul_ps(
909 _mm512_castsi512_ps(std::get<0xC>(s)), _mm512_castsi512_ps(a)));
910 std::get<0xD>(s) = _mm512_castps_si512(_mm512_mul_ps(
911 _mm512_castsi512_ps(std::get<0xD>(s)), _mm512_castsi512_ps(a)));
912 std::get<0xE>(s) = _mm512_castps_si512(_mm512_mul_ps(
913 _mm512_castsi512_ps(std::get<0xE>(s)), _mm512_castsi512_ps(a)));
914 std::get<0xF>(s) = _mm512_castps_si512(_mm512_mul_ps(
915 _mm512_castsi512_ps(std::get<0xF>(s)), _mm512_castsi512_ps(a)));
918 MCKL_INLINE inline void add_pd(std::array<__m512i, 16> &s,
const __m512i &a)
920 std::get<0x0>(s) = _mm512_castpd_si512(_mm512_add_pd(
921 _mm512_castsi512_pd(std::get<0x0>(s)), _mm512_castsi512_pd(a)));
922 std::get<0x1>(s) = _mm512_castpd_si512(_mm512_add_pd(
923 _mm512_castsi512_pd(std::get<0x1>(s)), _mm512_castsi512_pd(a)));
924 std::get<0x2>(s) = _mm512_castpd_si512(_mm512_add_pd(
925 _mm512_castsi512_pd(std::get<0x2>(s)), _mm512_castsi512_pd(a)));
926 std::get<0x3>(s) = _mm512_castpd_si512(_mm512_add_pd(
927 _mm512_castsi512_pd(std::get<0x3>(s)), _mm512_castsi512_pd(a)));
928 std::get<0x4>(s) = _mm512_castpd_si512(_mm512_add_pd(
929 _mm512_castsi512_pd(std::get<0x4>(s)), _mm512_castsi512_pd(a)));
930 std::get<0x5>(s) = _mm512_castpd_si512(_mm512_add_pd(
931 _mm512_castsi512_pd(std::get<0x5>(s)), _mm512_castsi512_pd(a)));
932 std::get<0x6>(s) = _mm512_castpd_si512(_mm512_add_pd(
933 _mm512_castsi512_pd(std::get<0x6>(s)), _mm512_castsi512_pd(a)));
934 std::get<0x7>(s) = _mm512_castpd_si512(_mm512_add_pd(
935 _mm512_castsi512_pd(std::get<0x7>(s)), _mm512_castsi512_pd(a)));
936 std::get<0x8>(s) = _mm512_castpd_si512(_mm512_add_pd(
937 _mm512_castsi512_pd(std::get<0x8>(s)), _mm512_castsi512_pd(a)));
938 std::get<0x9>(s) = _mm512_castpd_si512(_mm512_add_pd(
939 _mm512_castsi512_pd(std::get<0x9>(s)), _mm512_castsi512_pd(a)));
940 std::get<0xA>(s) = _mm512_castpd_si512(_mm512_add_pd(
941 _mm512_castsi512_pd(std::get<0xA>(s)), _mm512_castsi512_pd(a)));
942 std::get<0xB>(s) = _mm512_castpd_si512(_mm512_add_pd(
943 _mm512_castsi512_pd(std::get<0xB>(s)), _mm512_castsi512_pd(a)));
944 std::get<0xC>(s) = _mm512_castpd_si512(_mm512_add_pd(
945 _mm512_castsi512_pd(std::get<0xC>(s)), _mm512_castsi512_pd(a)));
946 std::get<0xD>(s) = _mm512_castpd_si512(_mm512_add_pd(
947 _mm512_castsi512_pd(std::get<0xD>(s)), _mm512_castsi512_pd(a)));
948 std::get<0xE>(s) = _mm512_castpd_si512(_mm512_add_pd(
949 _mm512_castsi512_pd(std::get<0xE>(s)), _mm512_castsi512_pd(a)));
950 std::get<0xF>(s) = _mm512_castpd_si512(_mm512_add_pd(
951 _mm512_castsi512_pd(std::get<0xF>(s)), _mm512_castsi512_pd(a)));
955 std::array<__m512i, 16> &s,
const std::array<__m512i, 16> &a)
957 std::get<0x0>(s) = _mm512_castpd_si512(
958 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x0>(s)),
959 _mm512_castsi512_pd(std::get<0x0>(a))));
960 std::get<0x1>(s) = _mm512_castpd_si512(
961 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x1>(s)),
962 _mm512_castsi512_pd(std::get<0x1>(a))));
963 std::get<0x2>(s) = _mm512_castpd_si512(
964 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x2>(s)),
965 _mm512_castsi512_pd(std::get<0x2>(a))));
966 std::get<0x3>(s) = _mm512_castpd_si512(
967 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x3>(s)),
968 _mm512_castsi512_pd(std::get<0x3>(a))));
969 std::get<0x4>(s) = _mm512_castpd_si512(
970 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x4>(s)),
971 _mm512_castsi512_pd(std::get<0x4>(a))));
972 std::get<0x5>(s) = _mm512_castpd_si512(
973 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x5>(s)),
974 _mm512_castsi512_pd(std::get<0x5>(a))));
975 std::get<0x6>(s) = _mm512_castpd_si512(
976 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x6>(s)),
977 _mm512_castsi512_pd(std::get<0x6>(a))));
978 std::get<0x7>(s) = _mm512_castpd_si512(
979 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x7>(s)),
980 _mm512_castsi512_pd(std::get<0x7>(a))));
981 std::get<0x8>(s) = _mm512_castpd_si512(
982 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x8>(s)),
983 _mm512_castsi512_pd(std::get<0x8>(a))));
984 std::get<0x9>(s) = _mm512_castpd_si512(
985 _mm512_add_pd(_mm512_castsi512_pd(std::get<0x9>(s)),
986 _mm512_castsi512_pd(std::get<0x9>(a))));
987 std::get<0xA>(s) = _mm512_castpd_si512(
988 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xA>(s)),
989 _mm512_castsi512_pd(std::get<0xA>(a))));
990 std::get<0xB>(s) = _mm512_castpd_si512(
991 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xB>(s)),
992 _mm512_castsi512_pd(std::get<0xB>(a))));
993 std::get<0xC>(s) = _mm512_castpd_si512(
994 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xC>(s)),
995 _mm512_castsi512_pd(std::get<0xC>(a))));
996 std::get<0xD>(s) = _mm512_castpd_si512(
997 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xD>(s)),
998 _mm512_castsi512_pd(std::get<0xD>(a))));
999 std::get<0xE>(s) = _mm512_castpd_si512(
1000 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xE>(s)),
1001 _mm512_castsi512_pd(std::get<0xE>(a))));
1002 std::get<0xF>(s) = _mm512_castpd_si512(
1003 _mm512_add_pd(_mm512_castsi512_pd(std::get<0xF>(s)),
1004 _mm512_castsi512_pd(std::get<0xF>(a))));
1007 MCKL_INLINE inline void sub_pd(std::array<__m512i, 16> &s,
const __m512i &a)
1009 std::get<0x0>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1010 _mm512_castsi512_pd(std::get<0x0>(s)), _mm512_castsi512_pd(a)));
1011 std::get<0x1>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1012 _mm512_castsi512_pd(std::get<0x1>(s)), _mm512_castsi512_pd(a)));
1013 std::get<0x2>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1014 _mm512_castsi512_pd(std::get<0x2>(s)), _mm512_castsi512_pd(a)));
1015 std::get<0x3>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1016 _mm512_castsi512_pd(std::get<0x3>(s)), _mm512_castsi512_pd(a)));
1017 std::get<0x4>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1018 _mm512_castsi512_pd(std::get<0x4>(s)), _mm512_castsi512_pd(a)));
1019 std::get<0x5>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1020 _mm512_castsi512_pd(std::get<0x5>(s)), _mm512_castsi512_pd(a)));
1021 std::get<0x6>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1022 _mm512_castsi512_pd(std::get<0x6>(s)), _mm512_castsi512_pd(a)));
1023 std::get<0x7>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1024 _mm512_castsi512_pd(std::get<0x7>(s)), _mm512_castsi512_pd(a)));
1025 std::get<0x8>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1026 _mm512_castsi512_pd(std::get<0x8>(s)), _mm512_castsi512_pd(a)));
1027 std::get<0x9>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1028 _mm512_castsi512_pd(std::get<0x9>(s)), _mm512_castsi512_pd(a)));
1029 std::get<0xA>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1030 _mm512_castsi512_pd(std::get<0xA>(s)), _mm512_castsi512_pd(a)));
1031 std::get<0xB>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1032 _mm512_castsi512_pd(std::get<0xB>(s)), _mm512_castsi512_pd(a)));
1033 std::get<0xC>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1034 _mm512_castsi512_pd(std::get<0xC>(s)), _mm512_castsi512_pd(a)));
1035 std::get<0xD>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1036 _mm512_castsi512_pd(std::get<0xD>(s)), _mm512_castsi512_pd(a)));
1037 std::get<0xE>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1038 _mm512_castsi512_pd(std::get<0xE>(s)), _mm512_castsi512_pd(a)));
1039 std::get<0xF>(s) = _mm512_castpd_si512(_mm512_sub_pd(
1040 _mm512_castsi512_pd(std::get<0xF>(s)), _mm512_castsi512_pd(a)));
1043 MCKL_INLINE inline void mul_pd(std::array<__m512i, 16> &s,
const __m512i &a)
1045 std::get<0x0>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1046 _mm512_castsi512_pd(std::get<0x0>(s)), _mm512_castsi512_pd(a)));
1047 std::get<0x1>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1048 _mm512_castsi512_pd(std::get<0x1>(s)), _mm512_castsi512_pd(a)));
1049 std::get<0x2>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1050 _mm512_castsi512_pd(std::get<0x2>(s)), _mm512_castsi512_pd(a)));
1051 std::get<0x3>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1052 _mm512_castsi512_pd(std::get<0x3>(s)), _mm512_castsi512_pd(a)));
1053 std::get<0x4>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1054 _mm512_castsi512_pd(std::get<0x4>(s)), _mm512_castsi512_pd(a)));
1055 std::get<0x5>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1056 _mm512_castsi512_pd(std::get<0x5>(s)), _mm512_castsi512_pd(a)));
1057 std::get<0x6>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1058 _mm512_castsi512_pd(std::get<0x6>(s)), _mm512_castsi512_pd(a)));
1059 std::get<0x7>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1060 _mm512_castsi512_pd(std::get<0x7>(s)), _mm512_castsi512_pd(a)));
1061 std::get<0x8>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1062 _mm512_castsi512_pd(std::get<0x8>(s)), _mm512_castsi512_pd(a)));
1063 std::get<0x9>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1064 _mm512_castsi512_pd(std::get<0x9>(s)), _mm512_castsi512_pd(a)));
1065 std::get<0xA>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1066 _mm512_castsi512_pd(std::get<0xA>(s)), _mm512_castsi512_pd(a)));
1067 std::get<0xB>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1068 _mm512_castsi512_pd(std::get<0xB>(s)), _mm512_castsi512_pd(a)));
1069 std::get<0xC>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1070 _mm512_castsi512_pd(std::get<0xC>(s)), _mm512_castsi512_pd(a)));
1071 std::get<0xD>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1072 _mm512_castsi512_pd(std::get<0xD>(s)), _mm512_castsi512_pd(a)));
1073 std::get<0xE>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1074 _mm512_castsi512_pd(std::get<0xE>(s)), _mm512_castsi512_pd(a)));
1075 std::get<0xF>(s) = _mm512_castpd_si512(_mm512_mul_pd(
1076 _mm512_castsi512_pd(std::get<0xF>(s)), _mm512_castsi512_pd(a)));
1080 std::array<__m512i, 16> &s,
const std::array<__m512i, 16> &a)
1082 std::get<0x0>(s) = _mm512_castpd_si512(
1083 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x0>(s)),
1084 _mm512_castsi512_pd(std::get<0x0>(a))));
1085 std::get<0x1>(s) = _mm512_castpd_si512(
1086 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x1>(s)),
1087 _mm512_castsi512_pd(std::get<0x1>(a))));
1088 std::get<0x2>(s) = _mm512_castpd_si512(
1089 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x2>(s)),
1090 _mm512_castsi512_pd(std::get<0x2>(a))));
1091 std::get<0x3>(s) = _mm512_castpd_si512(
1092 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x3>(s)),
1093 _mm512_castsi512_pd(std::get<0x3>(a))));
1094 std::get<0x4>(s) = _mm512_castpd_si512(
1095 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x4>(s)),
1096 _mm512_castsi512_pd(std::get<0x4>(a))));
1097 std::get<0x5>(s) = _mm512_castpd_si512(
1098 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x5>(s)),
1099 _mm512_castsi512_pd(std::get<0x5>(a))));
1100 std::get<0x6>(s) = _mm512_castpd_si512(
1101 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x6>(s)),
1102 _mm512_castsi512_pd(std::get<0x6>(a))));
1103 std::get<0x7>(s) = _mm512_castpd_si512(
1104 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x7>(s)),
1105 _mm512_castsi512_pd(std::get<0x7>(a))));
1106 std::get<0x8>(s) = _mm512_castpd_si512(
1107 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x8>(s)),
1108 _mm512_castsi512_pd(std::get<0x8>(a))));
1109 std::get<0x9>(s) = _mm512_castpd_si512(
1110 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0x9>(s)),
1111 _mm512_castsi512_pd(std::get<0x9>(a))));
1112 std::get<0xA>(s) = _mm512_castpd_si512(
1113 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xA>(s)),
1114 _mm512_castsi512_pd(std::get<0xA>(a))));
1115 std::get<0xB>(s) = _mm512_castpd_si512(
1116 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xB>(s)),
1117 _mm512_castsi512_pd(std::get<0xB>(a))));
1118 std::get<0xC>(s) = _mm512_castpd_si512(
1119 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xC>(s)),
1120 _mm512_castsi512_pd(std::get<0xC>(a))));
1121 std::get<0xD>(s) = _mm512_castpd_si512(
1122 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xD>(s)),
1123 _mm512_castsi512_pd(std::get<0xD>(a))));
1124 std::get<0xE>(s) = _mm512_castpd_si512(
1125 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xE>(s)),
1126 _mm512_castsi512_pd(std::get<0xE>(a))));
1127 std::get<0xF>(s) = _mm512_castpd_si512(
1128 _mm512_mul_pd(_mm512_castsi512_pd(std::get<0xF>(s)),
1129 _mm512_castsi512_pd(std::get<0xF>(a))));
1138 #endif // MCKL_INTERNAL_AVX512_OP_HPP #define MCKL_PUSH_GCC_WARNING(warning)
#define MCKL_POP_GCC_WARNING