clang  14.0.0git
Macros | Functions
avxvnniintrin.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define __DEFAULT_FN_ATTRS256   __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"), __min_vector_width__(256)))
 
#define __DEFAULT_FN_ATTRS128   __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"), __min_vector_width__(128)))
 

Functions

static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpbusd_avx_epi32 (__m256i __S, __m256i __A, __m256i __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results. More...
 
static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpbusds_avx_epi32 (__m256i __S, __m256i __A, __m256i __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results. More...
 
static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpwssd_avx_epi32 (__m256i __S, __m256i __A, __m256i __B)
 Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results. More...
 
static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpwssds_avx_epi32 (__m256i __S, __m256i __A, __m256i __B)
 Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results. More...
 
static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpbusd_avx_epi32 (__m128i __S, __m128i __A, __m128i __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results. More...
 
static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpbusds_avx_epi32 (__m128i __S, __m128i __A, __m128i __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results. More...
 
static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpwssd_avx_epi32 (__m128i __S, __m128i __A, __m128i __B)
 Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results. More...
 
static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpwssds_avx_epi32 (__m128i __S, __m128i __A, __m128i __B)
 Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results. More...
 

Macro Definition Documentation

◆ __DEFAULT_FN_ATTRS128

#define __DEFAULT_FN_ATTRS128   __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"), __min_vector_width__(128)))

Definition at line 44 of file avxvnniintrin.h.

◆ __DEFAULT_FN_ATTRS256

#define __DEFAULT_FN_ATTRS256   __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"), __min_vector_width__(256)))

Definition at line 43 of file avxvnniintrin.h.

Function Documentation

◆ _mm256_dpbusd_avx_epi32()

static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpbusd_avx_epi32 ( __m256i  __S,
__m256i  __A,
__m256i  __B 
)
static

Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

Sum these 4 results with the corresponding 32-bit integer in __S, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPBUSD instructions.

\operation FOR j := 0 to 7 tmp1.word := Signed(ZeroExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])) tmp2.word := Signed(ZeroExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])) tmp3.word := Signed(ZeroExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])) tmp4.word := Signed(ZeroExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])) DST.dword[j] := __S.dword[j] + tmp1 + tmp2 + tmp3 + tmp4 ENDFOR DST[MAX:256] := 0 \endoperation

Definition at line 64 of file avxvnniintrin.h.

◆ _mm256_dpbusds_avx_epi32()

static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpbusds_avx_epi32 ( __m256i  __S,
__m256i  __A,
__m256i  __B 
)
static

Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

Sum these 4 results with the corresponding 32-bit integer in __S using signed saturation, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPBUSDS instructions.

\operation FOR j := 0 to 7 tmp1.word := Signed(ZeroExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])) tmp2.word := Signed(ZeroExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])) tmp3.word := Signed(ZeroExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])) tmp4.word := Signed(ZeroExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])) DST.dword[j] := Saturate32(__S.dword[j] + tmp1 + tmp2 + tmp3 + tmp4) ENDFOR DST[MAX:256] := 0 \endoperation

Definition at line 87 of file avxvnniintrin.h.

◆ _mm256_dpwssd_avx_epi32()

static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpwssd_avx_epi32 ( __m256i  __S,
__m256i  __A,
__m256i  __B 
)
static

Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results.

Sum these 2 results with the corresponding 32-bit integer in __S, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPWSSD instructions.

\operation FOR j := 0 to 7 tmp1.dword := SignExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j]) tmp2.dword := SignExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1]) DST.dword[j] := __S.dword[j] + tmp1 + tmp2 ENDFOR DST[MAX:256] := 0 \endoperation

Definition at line 108 of file avxvnniintrin.h.

◆ _mm256_dpwssds_avx_epi32()

static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_dpwssds_avx_epi32 ( __m256i  __S,
__m256i  __A,
__m256i  __B 
)
static

Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results.

Sum these 2 results with the corresponding 32-bit integer in __S using signed saturation, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPWSSDS instructions.

\operation FOR j := 0 to 7 tmp1.dword := SignExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j]) tmp2.dword := SignExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1]) DST.dword[j] := Saturate32(__S.dword[j] + tmp1 + tmp2) ENDFOR DST[MAX:256] := 0 \endoperation

Definition at line 129 of file avxvnniintrin.h.

◆ _mm_dpbusd_avx_epi32()

static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpbusd_avx_epi32 ( __m128i  __S,
__m128i  __A,
__m128i  __B 
)
static

Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

Sum these 4 results with the corresponding 32-bit integer in __S, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPBUSD instructions.

\operation FOR j := 0 to 3 tmp1.word := Signed(ZeroExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])) tmp2.word := Signed(ZeroExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])) tmp3.word := Signed(ZeroExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])) tmp4.word := Signed(ZeroExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])) DST.dword[j] := __S.dword[j] + tmp1 + tmp2 + tmp3 + tmp4 ENDFOR DST[MAX:128] := 0 \endoperation

Definition at line 152 of file avxvnniintrin.h.

◆ _mm_dpbusds_avx_epi32()

static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpbusds_avx_epi32 ( __m128i  __S,
__m128i  __A,
__m128i  __B 
)
static

Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

Sum these 4 results with the corresponding 32-bit integer in __S using signed saturation, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPBUSDS instructions.

\operation FOR j := 0 to 3 tmp1.word := Signed(ZeroExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])) tmp2.word := Signed(ZeroExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])) tmp3.word := Signed(ZeroExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])) tmp4.word := Signed(ZeroExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])) DST.dword[j] := Saturate32(__S.dword[j] + tmp1 + tmp2 + tmp3 + tmp4) ENDFOR DST[MAX:128] := 0 \endoperation

Definition at line 175 of file avxvnniintrin.h.

◆ _mm_dpwssd_avx_epi32()

static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpwssd_avx_epi32 ( __m128i  __S,
__m128i  __A,
__m128i  __B 
)
static

Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results.

Sum these 2 results with the corresponding 32-bit integer in __S, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPWSSD instructions.

\operation FOR j := 0 to 3 tmp1.dword := SignExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j]) tmp2.dword := SignExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1]) DST.dword[j] := __S.dword[j] + tmp1 + tmp2 ENDFOR DST[MAX:128] := 0 \endoperation

Definition at line 196 of file avxvnniintrin.h.

◆ _mm_dpwssds_avx_epi32()

static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_dpwssds_avx_epi32 ( __m128i  __S,
__m128i  __A,
__m128i  __B 
)
static

Multiply groups of 2 adjacent pairs of signed 16-bit integers in __A with corresponding 16-bit integers in __B, producing 2 intermediate signed 32-bit results.

Sum these 2 results with the corresponding 32-bit integer in __S using signed saturation, and store the packed 32-bit results in DST.

This intrinsic corresponds to the VPDPWSSDS instructions.

\operation FOR j := 0 to 3 tmp1.dword := SignExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j]) tmp2.dword := SignExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1]) DST.dword[j] := Saturate32(__S.dword[j] + tmp1 + tmp2) ENDFOR DST[MAX:128] := 0 \endoperation

Definition at line 217 of file avxvnniintrin.h.