3#include "native/isa_import.h"
4#include "native/x86/gfni.h"
5#include "native/x86/integer_constant.h"
10#if NATIVE_HOST_X86 || defined(NATIVE_DOXYGEN)
35 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni))
45 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Imm8 <= 255)
55 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Imm8 <= 255)
65 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
66 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))
68 constexpr simd<std::uint8_t, 16, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<std::uint8_t, 16, Arch> a,
simd<std::uint8_t, 16, Arch> b)
noexcept {
69 if consteval {
return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset()); }
76 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
77 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))
87 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
88 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
90 constexpr simd<std::uint8_t, 16, Arch> gf2p8affineqb_mask(
simd<std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<std::uint8_t, 16, Arch> a,
simd<std::uint64_t, 2, Arch> matrix)
noexcept {
91 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset()); }
98 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
99 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
102 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix,
simd<std::uint8_t, 16, Arch>{}, k.to_bitset()); }
109 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
110 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
112 constexpr simd<std::uint8_t, 16, Arch> gf2p8affineinvqb_mask(
simd<std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<std::uint8_t, 16, Arch> a,
simd<std::uint64_t, 2, Arch> matrix)
noexcept {
113 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset()); }
120 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
121 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
124 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix,
simd<std::uint8_t, 16, Arch>{}, k.to_bitset()); }
133 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx))
143 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx) && Imm8 <= 255)
153 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx) && Imm8 <= 255)
163 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
164 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))
166 constexpr simd<std::uint8_t, 32, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<std::uint8_t, 32, Arch> a,
simd<std::uint8_t, 32, Arch> b)
noexcept {
167 if consteval {
return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset()); }
174 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
175 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))
185 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
186 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
188 constexpr simd<std::uint8_t, 32, Arch> gf2p8affineqb_mask(
simd<std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<std::uint8_t, 32, Arch> a,
simd<std::uint64_t, 4, Arch> matrix)
noexcept {
189 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset()); }
196 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
197 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
200 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix,
simd<std::uint8_t, 32, Arch>{}, k.to_bitset()); }
207 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
208 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
210 constexpr simd<std::uint8_t, 32, Arch> gf2p8affineinvqb_mask(
simd<std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<std::uint8_t, 32, Arch> a,
simd<std::uint64_t, 4, Arch> matrix)
noexcept {
211 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset()); }
218 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
219 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl) && Imm8 <= 255)
222 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix,
simd<std::uint8_t, 32, Arch>{}, k.to_bitset()); }
231 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f))
241 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) && Imm8 <= 255)
251 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) && Imm8 <= 255)
261 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
262 Arch.has(x86_feature::avx512bw))
264 constexpr simd<std::uint8_t, 64, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<std::uint8_t, 64, Arch> a,
simd<std::uint8_t, 64, Arch> b)
noexcept {
265 if consteval {
return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset()); }
272 template<isa<x86> Arch>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
273 Arch.has(x86_feature::avx512bw))
283 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
284 Arch.has(x86_feature::avx512bw) && Imm8 <= 255)
286 constexpr simd<std::uint8_t, 64, Arch> gf2p8affineqb_mask(
simd<std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<std::uint8_t, 64, Arch> a,
simd<std::uint64_t, 8, Arch> matrix)
noexcept {
287 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset()); }
294 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
295 Arch.has(x86_feature::avx512bw) && Imm8 <= 255)
298 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix,
simd<std::uint8_t, 64, Arch>{}, k.to_bitset()); }
305 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
306 Arch.has(x86_feature::avx512bw) && Imm8 <= 255)
308 constexpr simd<std::uint8_t, 64, Arch> gf2p8affineinvqb_mask(
simd<std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<std::uint8_t, 64, Arch> a,
simd<std::uint64_t, 8, Arch> matrix)
noexcept {
309 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset()); }
316 template<isa<x86> Arch,
unsigned Imm8>
requires(Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
317 Arch.has(x86_feature::avx512bw) && Imm8 <= 255)
320 if consteval {
return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix,
simd<std::uint8_t, 64, Arch>{}, k.to_bitset()); }
327 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni))) &&
328 requires {
sizeof(simd<std::uint8_t, 16, Arch>); })
334 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni))) && Imm8 <= 255 &&
335 requires {
sizeof(simd<std::uint8_t, 16, Arch>);
sizeof(simd<std::uint64_t, 2, Arch>); })
341 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni))) && Imm8 <= 255 &&
342 requires {
sizeof(simd<std::uint8_t, 16, Arch>);
sizeof(simd<std::uint64_t, 2, Arch>); })
348 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
349 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) &&
350 requires { sizeof(simd<std::uint8_t, 16, Arch>); })
351 native_nodiscard consteval simd<std::uint8_t, 16, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<std::uint8_t, 16, Arch> a,
simd<std::uint8_t, 16, Arch> b)
noexcept {
352 return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset());
356 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
357 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) &&
358 requires { sizeof(simd<std::uint8_t, 16, Arch>); })
364 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
365 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
366 requires { sizeof(simd<std::uint8_t, 16, Arch>); sizeof(simd<std::uint64_t, 2, Arch>); })
367 native_nodiscard consteval
simd<
std::uint8_t, 16, Arch>
gf2p8affineqb_mask(
simd<
std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<
std::uint8_t, 16, Arch> a,
simd<
std::uint64_t, 2, Arch> matrix) noexcept {
368 return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset());
372 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
373 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
374 requires { sizeof(simd<std::uint8_t, 16, Arch>); sizeof(simd<std::uint64_t, 2, Arch>); })
380 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
381 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
382 requires { sizeof(simd<std::uint8_t, 16, Arch>); sizeof(simd<std::uint64_t, 2, Arch>); })
383 native_nodiscard consteval
simd<
std::uint8_t, 16, Arch>
gf2p8affineinvqb_mask(
simd<
std::uint8_t, 16, Arch> src,
predicate<16, Arch> k,
simd<
std::uint8_t, 16, Arch> a,
simd<
std::uint64_t, 2, Arch> matrix) noexcept {
384 return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset());
388 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
389 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
390 requires { sizeof(simd<std::uint8_t, 16, Arch>); sizeof(simd<std::uint64_t, 2, Arch>); })
396 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx))) &&
397 requires { sizeof(simd<std::uint8_t, 32, Arch>); })
403 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx))) && Imm8 <= 255 &&
404 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
410 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx))) && Imm8 <= 255 &&
411 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
417 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
418 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) &&
419 requires { sizeof(simd<std::uint8_t, 32, Arch>); })
420 native_nodiscard consteval simd<std::uint8_t, 32, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<std::uint8_t, 32, Arch> a,
simd<std::uint8_t, 32, Arch> b)
noexcept {
421 return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset());
425 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
426 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) &&
427 requires { sizeof(simd<std::uint8_t, 32, Arch>); })
433 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
434 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
435 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
436 native_nodiscard consteval
simd<
std::uint8_t, 32, Arch>
gf2p8affineqb_mask(
simd<
std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<
std::uint8_t, 32, Arch> a,
simd<
std::uint64_t, 4, Arch> matrix) noexcept {
437 return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset());
441 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
442 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
443 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
449 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
450 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
451 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
452 native_nodiscard consteval
simd<
std::uint8_t, 32, Arch>
gf2p8affineinvqb_mask(
simd<
std::uint8_t, 32, Arch> src,
predicate<32, Arch> k,
simd<
std::uint8_t, 32, Arch> a,
simd<
std::uint64_t, 4, Arch> matrix) noexcept {
453 return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset());
457 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
458 Arch.has(x86_feature::avx512bw) && Arch.has(x86_feature::avx512vl))) && Imm8 <= 255 &&
459 requires { sizeof(simd<std::uint8_t, 32, Arch>); sizeof(simd<std::uint64_t, 4, Arch>); })
465 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f))) &&
466 requires { sizeof(simd<std::uint8_t, 64, Arch>); })
472 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f))) && Imm8 <= 255 &&
473 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
479 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f))) && Imm8 <= 255 &&
480 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
486 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
487 Arch.has(x86_feature::avx512bw))) &&
488 requires { sizeof(simd<std::uint8_t, 64, Arch>); })
489 native_nodiscard consteval simd<std::uint8_t, 64, Arch> gf2p8mulb_mask(
simd<std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<std::uint8_t, 64, Arch> a,
simd<std::uint8_t, 64, Arch> b)
noexcept {
490 return detail::x86_instruction_constant::field_multiply(a, b, src, k.to_bitset());
494 template<isa<x86> Arch>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
495 Arch.has(x86_feature::avx512bw))) &&
496 requires { sizeof(simd<std::uint8_t, 64, Arch>); })
502 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
503 Arch.has(x86_feature::avx512bw))) && Imm8 <= 255 &&
504 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
505 native_nodiscard consteval
simd<
std::uint8_t, 64, Arch>
gf2p8affineqb_mask(
simd<
std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<
std::uint8_t, 64, Arch> a,
simd<
std::uint64_t, 8, Arch> matrix) noexcept {
506 return detail::x86_instruction_constant::field_affine<Imm8, false>(a, matrix, src, k.to_bitset());
510 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
511 Arch.has(x86_feature::avx512bw))) && Imm8 <= 255 &&
512 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
518 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
519 Arch.has(x86_feature::avx512bw))) && Imm8 <= 255 &&
520 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
521 native_nodiscard consteval
simd<
std::uint8_t, 64, Arch>
gf2p8affineinvqb_mask(
simd<
std::uint8_t, 64, Arch> src,
predicate<64, Arch> k,
simd<
std::uint8_t, 64, Arch> a,
simd<
std::uint64_t, 8, Arch> matrix) noexcept {
522 return detail::x86_instruction_constant::field_affine<Imm8, true>(a, matrix, src, k.to_bitset());
526 template<isa<x86> Arch,
unsigned Imm8>
requires(!((Arch.has(x86_feature::gfni) && Arch.has(x86_feature::avx512f) &&
527 Arch.has(x86_feature::avx512bw))) && Imm8 <= 255 &&
528 requires { sizeof(simd<std::uint8_t, 64, Arch>); sizeof(simd<std::uint64_t, 8, Arch>); })
535 template<isa<x86> Arch,
class... Args>
538 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
541 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
544 template<isa<x86> Arch,
class... Args>
547 template<isa<x86> Arch,
class... Args>
550 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
553 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
556 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
559 template<isa<x86> Arch,
unsigned Imm8,
class... Args>
#define native_inline
inline [[always_inline]]
#define native_nodiscard
C++17 [[nodiscard]].
#define native_const
[[const]] is not const
#define native_target(x)
this indicates a required feature set for the current multiversioned function.
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineinvqb_maskz(predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Zero inactive bytes after gf2p8affineinvqb.
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineqb_mask(simd< std::uint8_t, 16, Arch > src, predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Merge inactive bytes from src after gf2p8affineqb.
constexpr simd< std::uint8_t, 16, Arch > gf2p8mulb_maskz(predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
Zero inactive bytes after gf2p8mulb.
constexpr simd< std::uint8_t, 16, Arch > gf2p8mulb_mask(simd< std::uint8_t, 16, Arch > src, predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
Merge inactive bytes from src after gf2p8mulb.
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineqb_maskz(predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Zero inactive bytes after gf2p8affineqb.
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineinvqb(simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Invert each field byte, apply its lane's binary matrix, and XOR Imm8.
constexpr simd< std::uint8_t, 16, Arch > gf2p8mulb(simd< std::uint8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
Multiply corresponding bytes in GF(2^8).
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineqb(simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Apply the binary matrix in each 64-bit lane and XOR Imm8.
constexpr simd< std::uint8_t, 16, Arch > gf2p8affineinvqb_mask(simd< std::uint8_t, 16, Arch > src, predicate< 16, Arch > k, simd< std::uint8_t, 16, Arch > a, simd< std::uint64_t, 2, Arch > matrix) noexcept
Merge inactive bytes from src after gf2p8affineinvqb.
Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its...
Standard-library adaptations documented here for SIMD value types.
Omitted architecture arguments use the native.simd provider's baseline.