Botan 3.9.0
Crypto and TLS for C&
Botan::SIMD_16x32 Class Referencefinal

#include <simd_avx512.h>

Public Member Functions

BOTAN_FN_ISA_AVX512 SIMD_16x32 andc (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 SIMD_16x32 bswap () const
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator& (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 void operator&= (const SIMD_16x32 &other)
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator+ (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 void operator+= (const SIMD_16x32 &other)
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator- (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 void operator-= (const SIMD_16x32 &other)
SIMD_16x32operator= (const SIMD_16x32 &other)=default
SIMD_16x32operator= (SIMD_16x32 &&other)=default
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator^ (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 void operator^= (const SIMD_16x32 &other)
BOTAN_FN_ISA_AVX512 void operator^= (uint32_t other)
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator| (const SIMD_16x32 &other) const
BOTAN_FN_ISA_AVX512 void operator|= (const SIMD_16x32 &other)
BOTAN_FN_ISA_AVX512 SIMD_16x32 operator~ () const
__m512i BOTAN_FN_ISA_AVX512 raw () const
template<size_t ROT>
requires (ROT > 0 && ROT < 32)
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotl () const
template<size_t ROT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotr () const
template<int SHIFT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 shl () const
template<int SHIFT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 shr () const
SIMD_16x32 BOTAN_FN_ISA_AVX512 sigma0 () const
SIMD_16x32 BOTAN_FN_ISA_AVX512 sigma1 () const
BOTAN_FN_ISA_AVX512 BOTAN_FORCE_INLINE SIMD_16x32 ()
BOTAN_FN_ISA_AVX512 SIMD_16x32 (__m512i x) noexcept
 SIMD_16x32 (const SIMD_16x32 &other)=default
BOTAN_FN_ISA_AVX512 SIMD_16x32 (const uint32_t B[16])
 SIMD_16x32 (SIMD_16x32 &&other)=default
BOTAN_FN_ISA_AVX512 SIMD_16x32 (uint32_t B0, uint32_t B1, uint32_t B2, uint32_t B3, uint32_t B4, uint32_t B5, uint32_t B6, uint32_t B7, uint32_t B8, uint32_t B9, uint32_t BA, uint32_t BB, uint32_t BC, uint32_t BD, uint32_t BE, uint32_t BF)
BOTAN_FN_ISA_AVX512 void store_be (uint8_t out[]) const
BOTAN_FN_ISA_AVX512 void store_le (uint8_t out[]) const
 ~SIMD_16x32 ()=default

Static Public Member Functions

static BOTAN_FN_ISA_AVX512 SIMD_16x32 choose (const SIMD_16x32 &mask, const SIMD_16x32 &a, const SIMD_16x32 &b)
static BOTAN_FN_ISA_AVX512 SIMD_16x32 load_be (const uint8_t *in)
static BOTAN_FN_ISA_AVX512 SIMD_16x32 load_le (const uint8_t *in)
static BOTAN_FN_ISA_AVX512 SIMD_16x32 majority (const SIMD_16x32 &x, const SIMD_16x32 &y, const SIMD_16x32 &z)
static BOTAN_FN_ISA_AVX512 SIMD_16x32 splat (uint32_t B)
template<uint8_t TBL>
static BOTAN_FN_ISA_AVX512 SIMD_16x32 ternary_fn (const SIMD_16x32 &a, const SIMD_16x32 &b, const SIMD_16x32 &c)
static BOTAN_FN_ISA_AVX512 void transpose (SIMD_16x32 &B0, SIMD_16x32 &B1, SIMD_16x32 &B2, SIMD_16x32 &B3)
static BOTAN_FN_ISA_AVX512 void transpose (SIMD_16x32 &B0, SIMD_16x32 &B1, SIMD_16x32 &B2, SIMD_16x32 &B3, SIMD_16x32 &B4, SIMD_16x32 &B5, SIMD_16x32 &B6, SIMD_16x32 &B7, SIMD_16x32 &B8, SIMD_16x32 &B9, SIMD_16x32 &BA, SIMD_16x32 &BB, SIMD_16x32 &BC, SIMD_16x32 &BD, SIMD_16x32 &BE, SIMD_16x32 &BF)
static BOTAN_FN_ISA_AVX512 void zero_registers ()

Detailed Description

Definition at line 19 of file simd_avx512.h.

Constructor & Destructor Documentation

◆ SIMD_16x32() [1/6]

◆ SIMD_16x32() [2/6]

Botan::SIMD_16x32::SIMD_16x32 ( SIMD_16x32 && other)
default

References SIMD_16x32().

◆ ~SIMD_16x32()

Botan::SIMD_16x32::~SIMD_16x32 ( )
default

◆ SIMD_16x32() [3/6]

BOTAN_FN_ISA_AVX512 BOTAN_FORCE_INLINE Botan::SIMD_16x32::SIMD_16x32 ( )
inline

Definition at line 30 of file simd_avx512.h.

30: m_avx512(_mm512_setzero_si512()) {}

References BOTAN_FORCE_INLINE.

Referenced by andc(), bswap(), load_le(), operator~(), rotl(), shl(), shr(), splat(), and ternary_fn().

◆ SIMD_16x32() [4/6]

BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::SIMD_16x32 ( const uint32_t B[16])
inlineexplicit

Definition at line 33 of file simd_avx512.h.

33 {
34 // NOLINTNEXTLINE(*-prefer-member-initializer)
35 m_avx512 = _mm512_loadu_si512(reinterpret_cast<const __m512i*>(B));
36 }

◆ SIMD_16x32() [5/6]

BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::SIMD_16x32 ( uint32_t B0,
uint32_t B1,
uint32_t B2,
uint32_t B3,
uint32_t B4,
uint32_t B5,
uint32_t B6,
uint32_t B7,
uint32_t B8,
uint32_t B9,
uint32_t BA,
uint32_t BB,
uint32_t BC,
uint32_t BD,
uint32_t BE,
uint32_t BF )
inlineexplicit

Definition at line 39 of file simd_avx512.h.

54 {
55 // NOLINTNEXTLINE(*-prefer-member-initializer)
56 m_avx512 = _mm512_set_epi32(BF, BE, BD, BC, BB, BA, B9, B8, B7, B6, B5, B4, B3, B2, B1, B0);
57 }

◆ SIMD_16x32() [6/6]

BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::SIMD_16x32 ( __m512i x)
inlineexplicitnoexcept

Definition at line 311 of file simd_avx512.h.

311: m_avx512(x) {}

Member Function Documentation

◆ andc()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::andc ( const SIMD_16x32 & other) const
inline

Definition at line 170 of file simd_avx512.h.

170 {
171 return SIMD_16x32(_mm512_andnot_si512(m_avx512, other.m_avx512));
172 }
BOTAN_FN_ISA_AVX512 BOTAN_FORCE_INLINE SIMD_16x32()
Definition simd_avx512.h:30

References SIMD_16x32(), and SIMD_16x32().

◆ bswap()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::bswap ( ) const
inline

Definition at line 180 of file simd_avx512.h.

180 {
181 const uint8_t BSWAP_MASK[64] = {
182 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12, 19, 18, 17, 16, 23, 22,
183 21, 20, 27, 26, 25, 24, 31, 30, 29, 28, 35, 34, 33, 32, 39, 38, 37, 36, 43, 42, 41, 40,
184 47, 46, 45, 44, 51, 50, 49, 48, 55, 54, 53, 52, 59, 58, 57, 56, 63, 62, 61, 60,
185 };
186
187 const __m512i bswap = _mm512_loadu_si512(reinterpret_cast<const __m512i*>(BSWAP_MASK));
188
189 const __m512i output = _mm512_shuffle_epi8(m_avx512, bswap);
190
191 return SIMD_16x32(output);
192 }
BOTAN_FN_ISA_AVX512 SIMD_16x32 bswap() const

References bswap(), SIMD_16x32(), and SIMD_16x32().

Referenced by bswap(), load_be(), and store_be().

◆ choose()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::choose ( const SIMD_16x32 & mask,
const SIMD_16x32 & a,
const SIMD_16x32 & b )
inlinestatic

Definition at line 294 of file simd_avx512.h.

294 {
295 return SIMD_16x32::ternary_fn<0xca>(mask, a, b);
296 }
static BOTAN_FN_ISA_AVX512 SIMD_16x32 ternary_fn(const SIMD_16x32 &a, const SIMD_16x32 &b, const SIMD_16x32 &c)

References SIMD_16x32(), and ternary_fn().

◆ load_be()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::load_be ( const uint8_t * in)
inlinestatic

Definition at line 68 of file simd_avx512.h.

68{ return load_le(in).bswap(); }
static BOTAN_FN_ISA_AVX512 SIMD_16x32 load_le(const uint8_t *in)
Definition simd_avx512.h:63

References bswap(), load_le(), and SIMD_16x32().

◆ load_le()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::load_le ( const uint8_t * in)
inlinestatic

Definition at line 63 of file simd_avx512.h.

63 {
64 return SIMD_16x32(_mm512_loadu_si512(reinterpret_cast<const __m512i*>(in)));
65 }

References SIMD_16x32(), and SIMD_16x32().

Referenced by load_be().

◆ majority()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::majority ( const SIMD_16x32 & x,
const SIMD_16x32 & y,
const SIMD_16x32 & z )
inlinestatic

Definition at line 299 of file simd_avx512.h.

299 {
300 return SIMD_16x32::ternary_fn<0xe8>(x, y, z);
301 }

References SIMD_16x32(), and ternary_fn().

◆ operator&()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator& ( const SIMD_16x32 & other) const
inline

Definition at line 131 of file simd_avx512.h.

131 {
132 SIMD_16x32 retval(*this);
133 retval &= other;
134 return retval;
135 }
SIMD_16x32(const SIMD_16x32 &other)=default

References SIMD_16x32().

◆ operator&=()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator&= ( const SIMD_16x32 & other)
inline

Definition at line 153 of file simd_avx512.h.

153{ m_avx512 = _mm512_and_si512(m_avx512, other.m_avx512); }

References SIMD_16x32().

◆ operator+()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator+ ( const SIMD_16x32 & other) const
inline

Definition at line 103 of file simd_avx512.h.

103 {
104 SIMD_16x32 retval(*this);
105 retval += other;
106 return retval;
107 }

References SIMD_16x32().

◆ operator+=()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator+= ( const SIMD_16x32 & other)
inline

Definition at line 138 of file simd_avx512.h.

138{ m_avx512 = _mm512_add_epi32(m_avx512, other.m_avx512); }

References SIMD_16x32().

◆ operator-()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator- ( const SIMD_16x32 & other) const
inline

Definition at line 110 of file simd_avx512.h.

110 {
111 SIMD_16x32 retval(*this);
112 retval -= other;
113 return retval;
114 }

References SIMD_16x32().

◆ operator-=()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator-= ( const SIMD_16x32 & other)
inline

Definition at line 141 of file simd_avx512.h.

141{ m_avx512 = _mm512_sub_epi32(m_avx512, other.m_avx512); }

References SIMD_16x32().

◆ operator=() [1/2]

SIMD_16x32 & Botan::SIMD_16x32::operator= ( const SIMD_16x32 & other)
default

References SIMD_16x32().

◆ operator=() [2/2]

SIMD_16x32 & Botan::SIMD_16x32::operator= ( SIMD_16x32 && other)
default

References SIMD_16x32().

◆ operator^()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator^ ( const SIMD_16x32 & other) const
inline

Definition at line 117 of file simd_avx512.h.

117 {
118 SIMD_16x32 retval(*this);
119 retval ^= other;
120 return retval;
121 }

References SIMD_16x32().

◆ operator^=() [1/2]

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator^= ( const SIMD_16x32 & other)
inline

Definition at line 144 of file simd_avx512.h.

144{ m_avx512 = _mm512_xor_si512(m_avx512, other.m_avx512); }

References SIMD_16x32().

◆ operator^=() [2/2]

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator^= ( uint32_t other)
inline

Definition at line 147 of file simd_avx512.h.

147{ *this ^= SIMD_16x32::splat(other); }
static BOTAN_FN_ISA_AVX512 SIMD_16x32 splat(uint32_t B)
Definition simd_avx512.h:60

References splat().

◆ operator|()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator| ( const SIMD_16x32 & other) const
inline

Definition at line 124 of file simd_avx512.h.

124 {
125 SIMD_16x32 retval(*this);
126 retval |= other;
127 return retval;
128 }

References SIMD_16x32().

◆ operator|=()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::operator|= ( const SIMD_16x32 & other)
inline

Definition at line 150 of file simd_avx512.h.

150{ m_avx512 = _mm512_or_si512(m_avx512, other.m_avx512); }

References SIMD_16x32().

◆ operator~()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::operator~ ( ) const
inline

Definition at line 166 of file simd_avx512.h.

166{ return SIMD_16x32(_mm512_xor_si512(m_avx512, _mm512_set1_epi32(0xFFFFFFFF))); }

References SIMD_16x32(), and SIMD_16x32().

◆ raw()

__m512i BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::raw ( ) const
inline

Definition at line 308 of file simd_avx512.h.

308{ return m_avx512; }

Referenced by ternary_fn(), and transpose().

◆ rotl()

template<size_t ROT>
requires (ROT > 0 && ROT < 32)
BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::rotl ( ) const
inline

Definition at line 77 of file simd_avx512.h.

79 {
80 return SIMD_16x32(_mm512_rol_epi32(m_avx512, ROT));
81 }

References SIMD_16x32(), and SIMD_16x32().

Referenced by Botan::rotl(), and rotr().

◆ rotr()

template<size_t ROT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::rotr ( ) const
inline

Definition at line 84 of file simd_avx512.h.

84 {
85 return this->rotl<32 - ROT>();
86 }
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotl() const
Definition simd_avx512.h:77

References rotl(), and SIMD_16x32().

Referenced by Botan::rotr(), sigma0(), and sigma1().

◆ shl()

template<int SHIFT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::shl ( ) const
inline

Definition at line 156 of file simd_avx512.h.

156 {
157 return SIMD_16x32(_mm512_slli_epi32(m_avx512, SHIFT));
158 }

References SIMD_16x32(), and SIMD_16x32().

Referenced by Botan::shl().

◆ shr()

template<int SHIFT>
BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::shr ( ) const
inline

Definition at line 161 of file simd_avx512.h.

161 {
162 return SIMD_16x32(_mm512_srli_epi32(m_avx512, SHIFT));
163 }

References SIMD_16x32(), and SIMD_16x32().

◆ sigma0()

SIMD_16x32 BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::sigma0 ( ) const
inline

Definition at line 88 of file simd_avx512.h.

88 {
89 const SIMD_16x32 rot1 = this->rotr<2>();
90 const SIMD_16x32 rot2 = this->rotr<13>();
91 const SIMD_16x32 rot3 = this->rotr<22>();
92 return rot1 ^ rot2 ^ rot3;
93 }
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotr() const
Definition simd_avx512.h:84

References rotr(), and SIMD_16x32().

◆ sigma1()

SIMD_16x32 BOTAN_FN_ISA_AVX512 Botan::SIMD_16x32::sigma1 ( ) const
inline

Definition at line 95 of file simd_avx512.h.

95 {
96 const SIMD_16x32 rot1 = this->rotr<6>();
97 const SIMD_16x32 rot2 = this->rotr<11>();
98 const SIMD_16x32 rot3 = this->rotr<25>();
99 return rot1 ^ rot2 ^ rot3;
100 }

References rotr(), and SIMD_16x32().

◆ splat()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::splat ( uint32_t B)
inlinestatic

Definition at line 60 of file simd_avx512.h.

60{ return SIMD_16x32(_mm512_set1_epi32(B)); }

References SIMD_16x32(), and SIMD_16x32().

Referenced by operator^=().

◆ store_be()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::store_be ( uint8_t out[]) const
inline

Definition at line 74 of file simd_avx512.h.

74{ bswap().store_le(out); }
BOTAN_FN_ISA_AVX512 void store_le(uint8_t out[]) const
Definition simd_avx512.h:71

References bswap(), and store_le().

◆ store_le()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::store_le ( uint8_t out[]) const
inline

Definition at line 71 of file simd_avx512.h.

71{ _mm512_storeu_si512(reinterpret_cast<__m512i*>(out), m_avx512); }

Referenced by store_be().

◆ ternary_fn()

template<uint8_t TBL>
BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::ternary_fn ( const SIMD_16x32 & a,
const SIMD_16x32 & b,
const SIMD_16x32 & c )
inlinestatic

Definition at line 175 of file simd_avx512.h.

175 {
176 return SIMD_16x32(_mm512_ternarylogic_epi32(a.raw(), b.raw(), c.raw(), TBL));
177 }

References raw(), SIMD_16x32(), and SIMD_16x32().

Referenced by choose(), and majority().

◆ transpose() [1/2]

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::transpose ( SIMD_16x32 & B0,
SIMD_16x32 & B1,
SIMD_16x32 & B2,
SIMD_16x32 & B3 )
inlinestatic

Definition at line 195 of file simd_avx512.h.

195 {
196 const __m512i T0 = _mm512_unpacklo_epi32(B0.m_avx512, B1.m_avx512);
197 const __m512i T1 = _mm512_unpacklo_epi32(B2.m_avx512, B3.m_avx512);
198 const __m512i T2 = _mm512_unpackhi_epi32(B0.m_avx512, B1.m_avx512);
199 const __m512i T3 = _mm512_unpackhi_epi32(B2.m_avx512, B3.m_avx512);
200
201 B0.m_avx512 = _mm512_unpacklo_epi64(T0, T1);
202 B1.m_avx512 = _mm512_unpackhi_epi64(T0, T1);
203 B2.m_avx512 = _mm512_unpacklo_epi64(T2, T3);
204 B3.m_avx512 = _mm512_unpackhi_epi64(T2, T3);
205 }

References SIMD_16x32().

◆ transpose() [2/2]

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::transpose ( SIMD_16x32 & B0,
SIMD_16x32 & B1,
SIMD_16x32 & B2,
SIMD_16x32 & B3,
SIMD_16x32 & B4,
SIMD_16x32 & B5,
SIMD_16x32 & B6,
SIMD_16x32 & B7,
SIMD_16x32 & B8,
SIMD_16x32 & B9,
SIMD_16x32 & BA,
SIMD_16x32 & BB,
SIMD_16x32 & BC,
SIMD_16x32 & BD,
SIMD_16x32 & BE,
SIMD_16x32 & BF )
inlinestatic

Definition at line 208 of file simd_avx512.h.

223 {
224 auto t0 = _mm512_unpacklo_epi32(B0.raw(), B1.raw());
225 auto t1 = _mm512_unpackhi_epi32(B0.raw(), B1.raw());
226 auto t2 = _mm512_unpacklo_epi32(B2.raw(), B3.raw());
227 auto t3 = _mm512_unpackhi_epi32(B2.raw(), B3.raw());
228 auto t4 = _mm512_unpacklo_epi32(B4.raw(), B5.raw());
229 auto t5 = _mm512_unpackhi_epi32(B4.raw(), B5.raw());
230 auto t6 = _mm512_unpacklo_epi32(B6.raw(), B7.raw());
231 auto t7 = _mm512_unpackhi_epi32(B6.raw(), B7.raw());
232 auto t8 = _mm512_unpacklo_epi32(B8.raw(), B9.raw());
233 auto t9 = _mm512_unpackhi_epi32(B8.raw(), B9.raw());
234 auto ta = _mm512_unpacklo_epi32(BA.raw(), BB.raw());
235 auto tb = _mm512_unpackhi_epi32(BA.raw(), BB.raw());
236 auto tc = _mm512_unpacklo_epi32(BC.raw(), BD.raw());
237 auto td = _mm512_unpackhi_epi32(BC.raw(), BD.raw());
238 auto te = _mm512_unpacklo_epi32(BE.raw(), BF.raw());
239 auto tf = _mm512_unpackhi_epi32(BE.raw(), BF.raw());
240
241 auto r0 = _mm512_unpacklo_epi64(t0, t2);
242 auto r1 = _mm512_unpackhi_epi64(t0, t2);
243 auto r2 = _mm512_unpacklo_epi64(t1, t3);
244 auto r3 = _mm512_unpackhi_epi64(t1, t3);
245 auto r4 = _mm512_unpacklo_epi64(t4, t6);
246 auto r5 = _mm512_unpackhi_epi64(t4, t6);
247 auto r6 = _mm512_unpacklo_epi64(t5, t7);
248 auto r7 = _mm512_unpackhi_epi64(t5, t7);
249 auto r8 = _mm512_unpacklo_epi64(t8, ta);
250 auto r9 = _mm512_unpackhi_epi64(t8, ta);
251 auto ra = _mm512_unpacklo_epi64(t9, tb);
252 auto rb = _mm512_unpackhi_epi64(t9, tb);
253 auto rc = _mm512_unpacklo_epi64(tc, te);
254 auto rd = _mm512_unpackhi_epi64(tc, te);
255 auto re = _mm512_unpacklo_epi64(td, tf);
256 auto rf = _mm512_unpackhi_epi64(td, tf);
257
258 t0 = _mm512_shuffle_i32x4(r0, r4, 0x88);
259 t1 = _mm512_shuffle_i32x4(r1, r5, 0x88);
260 t2 = _mm512_shuffle_i32x4(r2, r6, 0x88);
261 t3 = _mm512_shuffle_i32x4(r3, r7, 0x88);
262 t4 = _mm512_shuffle_i32x4(r0, r4, 0xdd);
263 t5 = _mm512_shuffle_i32x4(r1, r5, 0xdd);
264 t6 = _mm512_shuffle_i32x4(r2, r6, 0xdd);
265 t7 = _mm512_shuffle_i32x4(r3, r7, 0xdd);
266 t8 = _mm512_shuffle_i32x4(r8, rc, 0x88);
267 t9 = _mm512_shuffle_i32x4(r9, rd, 0x88);
268 ta = _mm512_shuffle_i32x4(ra, re, 0x88);
269 tb = _mm512_shuffle_i32x4(rb, rf, 0x88);
270 tc = _mm512_shuffle_i32x4(r8, rc, 0xdd);
271 td = _mm512_shuffle_i32x4(r9, rd, 0xdd);
272 te = _mm512_shuffle_i32x4(ra, re, 0xdd);
273 tf = _mm512_shuffle_i32x4(rb, rf, 0xdd);
274
275 B0.m_avx512 = _mm512_shuffle_i32x4(t0, t8, 0x88);
276 B1.m_avx512 = _mm512_shuffle_i32x4(t1, t9, 0x88);
277 B2.m_avx512 = _mm512_shuffle_i32x4(t2, ta, 0x88);
278 B3.m_avx512 = _mm512_shuffle_i32x4(t3, tb, 0x88);
279 B4.m_avx512 = _mm512_shuffle_i32x4(t4, tc, 0x88);
280 B5.m_avx512 = _mm512_shuffle_i32x4(t5, td, 0x88);
281 B6.m_avx512 = _mm512_shuffle_i32x4(t6, te, 0x88);
282 B7.m_avx512 = _mm512_shuffle_i32x4(t7, tf, 0x88);
283 B8.m_avx512 = _mm512_shuffle_i32x4(t0, t8, 0xdd);
284 B9.m_avx512 = _mm512_shuffle_i32x4(t1, t9, 0xdd);
285 BA.m_avx512 = _mm512_shuffle_i32x4(t2, ta, 0xdd);
286 BB.m_avx512 = _mm512_shuffle_i32x4(t3, tb, 0xdd);
287 BC.m_avx512 = _mm512_shuffle_i32x4(t4, tc, 0xdd);
288 BD.m_avx512 = _mm512_shuffle_i32x4(t5, td, 0xdd);
289 BE.m_avx512 = _mm512_shuffle_i32x4(t6, te, 0xdd);
290 BF.m_avx512 = _mm512_shuffle_i32x4(t7, tf, 0xdd);
291 }

References raw(), and SIMD_16x32().

◆ zero_registers()

BOTAN_FN_ISA_AVX512 void Botan::SIMD_16x32::zero_registers ( )
inlinestatic

Definition at line 303 of file simd_avx512.h.

303 {
304 // Unfortunately this only zeros zmm0-zmm15 and not zmm16-zmm32
305 _mm256_zeroall();
306 }

The documentation for this class was generated from the following file: