7#ifndef BOTAN_SIMD_AVX2_GFNI_H_
8#define BOTAN_SIMD_AVX2_GFNI_H_
10#include <botan/internal/simd_avx2.h>
12#include <botan/internal/isa_extn.h>
25 if(c ==
' ' || c ==
'\n') {
28 if(c !=
'0' && c !=
'1') {
29 throw std::runtime_error(
"gfni_matrix: invalid bit value");
33 row |= 0x80 >> (7 - bit_cnt % 8);
37 if(bit_cnt % 8 == 0) {
45 throw std::runtime_error(
"gfni_matrix: invalid bit count");
51template <u
int64_t A, u
int8_t B>
53 return SIMD_8x32(_mm256_gf2p8affine_epi64_epi8(x.
raw(), _mm256_set1_epi64x(A), B));
56template <u
int64_t A, u
int8_t B>
58 return SIMD_8x32(_mm256_gf2p8affineinv_epi64_epi8(x.
raw(), _mm256_set1_epi64x(A), B));
__m256i BOTAN_FN_ISA_AVX2 raw() const noexcept
#define BOTAN_FORCE_INLINE
consteval uint64_t gfni_matrix(std::string_view s)
BOTAN_FORCE_INLINE BOTAN_FN_ISA_AVX2_GFNI SIMD_8x32 gf2p8affineinv(const SIMD_8x32 &x)
BOTAN_FORCE_INLINE BOTAN_FN_ISA_AVX2_GFNI SIMD_8x32 gf2p8mul(const SIMD_8x32 &a, const SIMD_8x32 &b)
BOTAN_FORCE_INLINE BOTAN_FN_ISA_AVX2_GFNI SIMD_8x32 gf2p8affine(const SIMD_8x32 &x)