Botan 3.11.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
BOTAN_FN_ISA_AVX512 SIMD_16x32 rev_words () const noexcept
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~(), rev_words(), 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 314 of file simd_avx512.h.

314: 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 297 of file simd_avx512.h.

297 {
298 return SIMD_16x32::ternary_fn<0xca>(mask, a, b);
299 }
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 302 of file simd_avx512.h.

302 {
303 return SIMD_16x32::ternary_fn<0xe8>(x, y, z);
304 }

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 311 of file simd_avx512.h.

311{ return m_avx512; }

Referenced by rev_words(), ternary_fn(), and transpose().

◆ rev_words()

BOTAN_FN_ISA_AVX512 SIMD_16x32 Botan::SIMD_16x32::rev_words ( ) const
inlinenoexcept

Definition at line 195 of file simd_avx512.h.

195{ return SIMD_16x32(_mm512_shuffle_epi32(raw(), _MM_PERM_ABCD)); }
__m512i BOTAN_FN_ISA_AVX512 raw() const

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

◆ 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 r1 = this->rotr<2>();
90 const SIMD_16x32 r2 = this->rotr<13>();
91 const SIMD_16x32 r3 = this->rotr<22>();
92 return r1 ^ r2 ^ r3;
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 r1 = this->rotr<6>();
97 const SIMD_16x32 r2 = this->rotr<11>();
98 const SIMD_16x32 r3 = this->rotr<25>();
99 return r1 ^ r2 ^ r3;
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 198 of file simd_avx512.h.

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

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 211 of file simd_avx512.h.

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

References raw(), and SIMD_16x32().

◆ zero_registers()

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

Definition at line 306 of file simd_avx512.h.

306 {
307 // Unfortunately this only zeros zmm0-zmm15 and not zmm16-zmm32
308 _mm256_zeroall();
309 }

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