Botan 3.8.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)
 
 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
 

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 17 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() [3/6]

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

Definition at line 26 of file simd_avx512.h.

26{ m_avx512 = _mm512_setzero_si512(); }

References BOTAN_FORCE_INLINE.

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

◆ SIMD_16x32() [4/6]

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

Definition at line 29 of file simd_avx512.h.

29{ m_avx512 = _mm512_loadu_si512(reinterpret_cast<const __m512i*>(B)); }

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

47 {
48 m_avx512 = _mm512_set_epi32(BF, BE, BD, BC, BB, BA, B9, B8, B7, B6, B5, B4, B3, B2, B1, B0);
49 }

◆ SIMD_16x32() [6/6]

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

Definition at line 303 of file simd_avx512.h.

303: 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 162 of file simd_avx512.h.

162 {
163 return SIMD_16x32(_mm512_andnot_si512(m_avx512, other.m_avx512));
164 }
BOTAN_FN_ISA_AVX512 BOTAN_FORCE_INLINE SIMD_16x32()
Definition simd_avx512.h:26

References SIMD_16x32(), and SIMD_16x32().

◆ bswap()

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

Definition at line 172 of file simd_avx512.h.

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

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

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

◆ choose()

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

286 {
287 return SIMD_16x32::ternary_fn<0xca>(mask, a, b);
288 }
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()

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

Definition at line 60 of file simd_avx512.h.

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

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

◆ load_le()

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

Definition at line 55 of file simd_avx512.h.

55 {
56 return SIMD_16x32(_mm512_loadu_si512(reinterpret_cast<const __m512i*>(in)));
57 }

References SIMD_16x32(), and SIMD_16x32().

Referenced by load_be().

◆ majority()

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

291 {
292 return SIMD_16x32::ternary_fn<0xe8>(x, y, z);
293 }

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

123 {
124 SIMD_16x32 retval(*this);
125 retval &= other;
126 return retval;
127 }
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 145 of file simd_avx512.h.

145{ 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 95 of file simd_avx512.h.

95 {
96 SIMD_16x32 retval(*this);
97 retval += other;
98 return retval;
99 }

References SIMD_16x32().

◆ operator+=()

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

Definition at line 130 of file simd_avx512.h.

130{ 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 102 of file simd_avx512.h.

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

References SIMD_16x32().

◆ operator-=()

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

Definition at line 133 of file simd_avx512.h.

133{ 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 109 of file simd_avx512.h.

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

References SIMD_16x32().

◆ operator^=() [1/2]

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

Definition at line 136 of file simd_avx512.h.

136{ 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 139 of file simd_avx512.h.

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

References splat().

◆ operator|()

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

Definition at line 116 of file simd_avx512.h.

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

References SIMD_16x32().

◆ operator|=()

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

Definition at line 142 of file simd_avx512.h.

142{ 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 158 of file simd_avx512.h.

158{ 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 300 of file simd_avx512.h.

300{ 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 69 of file simd_avx512.h.

71 {
72 return SIMD_16x32(_mm512_rol_epi32(m_avx512, ROT));
73 }

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

76 {
77 return this->rotl<32 - ROT>();
78 }
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotl() const
Definition simd_avx512.h:69

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

148 {
149 return SIMD_16x32(_mm512_slli_epi32(m_avx512, SHIFT));
150 }

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

153 {
154 return SIMD_16x32(_mm512_srli_epi32(m_avx512, SHIFT));
155 }

References SIMD_16x32(), and SIMD_16x32().

◆ sigma0()

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

Definition at line 80 of file simd_avx512.h.

80 {
81 const SIMD_16x32 rot1 = this->rotr<2>();
82 const SIMD_16x32 rot2 = this->rotr<13>();
83 const SIMD_16x32 rot3 = this->rotr<22>();
84 return rot1 ^ rot2 ^ rot3;
85 }
BOTAN_FN_ISA_AVX512 SIMD_16x32 rotr() const
Definition simd_avx512.h:76

References rotr(), and SIMD_16x32().

◆ sigma1()

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

Definition at line 87 of file simd_avx512.h.

87 {
88 const SIMD_16x32 rot1 = this->rotr<6>();
89 const SIMD_16x32 rot2 = this->rotr<11>();
90 const SIMD_16x32 rot3 = this->rotr<25>();
91 return rot1 ^ rot2 ^ rot3;
92 }

References rotr(), and SIMD_16x32().

◆ splat()

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

Definition at line 52 of file simd_avx512.h.

52{ 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 66 of file simd_avx512.h.

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

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

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

Referenced by store_be().

◆ ternary_fn()

template<uint8_t TBL>
static 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 167 of file simd_avx512.h.

167 {
168 return _mm512_ternarylogic_epi32(a.raw(), b.raw(), c.raw(), TBL);
169 }

References raw(), and SIMD_16x32().

Referenced by choose(), and majority().

◆ transpose() [1/2]

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

187 {
188 const __m512i T0 = _mm512_unpacklo_epi32(B0.m_avx512, B1.m_avx512);
189 const __m512i T1 = _mm512_unpacklo_epi32(B2.m_avx512, B3.m_avx512);
190 const __m512i T2 = _mm512_unpackhi_epi32(B0.m_avx512, B1.m_avx512);
191 const __m512i T3 = _mm512_unpackhi_epi32(B2.m_avx512, B3.m_avx512);
192
193 B0.m_avx512 = _mm512_unpacklo_epi64(T0, T1);
194 B1.m_avx512 = _mm512_unpackhi_epi64(T0, T1);
195 B2.m_avx512 = _mm512_unpacklo_epi64(T2, T3);
196 B3.m_avx512 = _mm512_unpackhi_epi64(T2, T3);
197 }

References SIMD_16x32().

◆ transpose() [2/2]

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

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

References raw(), and SIMD_16x32().

◆ zero_registers()

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

Definition at line 295 of file simd_avx512.h.

295 {
296 // Unfortunately this only zeros zmm0-zmm15 and not zmm16-zmm32
297 _mm256_zeroall();
298 }

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