clang 20.0.0git
Macros
avxvnniint8intrin.h File Reference

Go to the source code of this file.

Macros

#define _mm_dpbssd_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbssd_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm_dpbssds_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbssds_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm_dpbsud_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbsud_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm_dpbsuds_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbsuds_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm_dpbuud_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbuud_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm_dpbuuds_epi32(__W, __A, __B)
 Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 
#define _mm256_dpbuuds_epi32(__W, __A, __B)
 corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.
 

Macro Definition Documentation

◆ _mm256_dpbssd_epi32

#define _mm256_dpbssd_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbssd256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

Multiply groups of 4 adjacent pairs of signed 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 __W, and store the packed 32-bit results in dst.

_mm256_dpbssd_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbssd_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit i...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 256-bit vector of [32 x char].
__BA 256-bit vector of [32 x char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:256] := 0

Definition at line 81 of file avxvnniint8intrin.h.

◆ _mm256_dpbssds_epi32

#define _mm256_dpbssds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbssds256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

Multiply groups of 4 adjacent pairs of signed 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 __W with signed saturation, and store the packed 32-bit results in dst.

_mm256_dpbssds_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbssds_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit i...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 256-bit vector of [32 x char].
__BA 256-bit vector of [32 x char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:256] := 0

Definition at line 151 of file avxvnniint8intrin.h.

◆ _mm256_dpbsud_epi32

#define _mm256_dpbsud_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbsud256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

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

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

_mm256_dpbsud_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbsud_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 256-bit vector of [32 x char].
__BA 256-bit vector of [32 x unsigned char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:256] := 0

Definition at line 219 of file avxvnniint8intrin.h.

◆ _mm256_dpbsuds_epi32

#define _mm256_dpbsuds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbsuds256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

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

Sum these 4 results with the corresponding 32-bit integer in __W with signed saturation, and store the packed 32-bit results in dst.

_mm256_dpbsuds_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbsuds_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 256-bit vector of [32 x char].
__BA 256-bit vector of [32 x unsigned char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:256] := 0

Definition at line 289 of file avxvnniint8intrin.h.

◆ _mm256_dpbuud_epi32

#define _mm256_dpbuud_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbuud256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

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

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

_mm256_dpbuud_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbuud_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-b...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 256-bit vector of [32 x unsigned char].
__BA 256-bit vector of [32 x unsigned char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:256] := 0

Definition at line 357 of file avxvnniint8intrin.h.

◆ _mm256_dpbuuds_epi32

#define _mm256_dpbuuds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m256i)__builtin_ia32_vpdpbuuds256((__v8si)(__W), (__v8si)(__A), \
(__v8si)(__B)))

corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

Sum these 4 results with the corresponding 32-bit integer in __W with signed saturation, and store the packed 32-bit results in dst.

_mm256_dpbuuds_epi32(__m256i __W, __m256i __A, __m256i __B);
#define _mm256_dpbuuds_epi32(__W, __A, __B)
corresponding unsigned 8-bit integers in __B, producing 4 intermediate signed 16-bit results.

This intrinsic corresponds to the VPDPBUUDS instruction.

Parameters
__AA 256-bit vector of [32 x unsigned char].
__BA 256-bit vector of [32 x unsigned char].
Returns
A 256-bit vector of [8 x int].
FOR j := 0 to 7
tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:256] := 0

Definition at line 426 of file avxvnniint8intrin.h.

◆ _mm_dpbssd_epi32

#define _mm_dpbssd_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbssd128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

Multiply groups of 4 adjacent pairs of signed 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 __W, and store the packed 32-bit results in dst.

_mm_dpbssd_epi32(__m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbssd_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit i...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 128-bit vector of [16 x char].
__BA 128-bit vector of [16 x char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:128] := 0

Definition at line 47 of file avxvnniint8intrin.h.

◆ _mm_dpbssds_epi32

#define _mm_dpbssds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbssds128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

Multiply groups of 4 adjacent pairs of signed 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 __W with signed saturation, and store the packed 32-bit results in dst.

_mm_dpbssds_epi32( __m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbssds_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding signed 8-bit i...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 128-bit vector of [16 x char].
__BA 128-bit vector of [16 x char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:128] := 0

Definition at line 116 of file avxvnniint8intrin.h.

◆ _mm_dpbsud_epi32

#define _mm_dpbsud_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbsud128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

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

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

_mm_dpbsud_epi32(__m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbsud_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 128-bit vector of [16 x char].
__BA 128-bit vector of [16 x unsigned char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:128] := 0

Definition at line 185 of file avxvnniint8intrin.h.

◆ _mm_dpbsuds_epi32

#define _mm_dpbsuds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbsuds128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

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

Sum these 4 results with the corresponding 32-bit integer in __W with signed saturation, and store the packed 32-bit results in dst.

_mm_dpbsuds_epi32( __m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbsuds_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of signed 8-bit integers in __A with corresponding unsigned 8-bit...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 128-bit vector of [16 x char].
__BA 128-bit vector of [16 x unsigned char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:128] := 0

Definition at line 254 of file avxvnniint8intrin.h.

◆ _mm_dpbuud_epi32

#define _mm_dpbuud_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbuud128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

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

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

_mm_dpbuud_epi32(__m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbuud_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-b...

This intrinsic corresponds to the VPDPBSSD instruction.

Parameters
__AA 128-bit vector of [16 x unsigned char].
__BA 128-bit vector of [16 x unsigned char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
ENDFOR
dst[MAX:128] := 0

Definition at line 323 of file avxvnniint8intrin.h.

◆ _mm_dpbuuds_epi32

#define _mm_dpbuuds_epi32 (   __W,
  __A,
  __B 
)
Value:
((__m128i)__builtin_ia32_vpdpbuuds128((__v4si)(__W), (__v4si)(__A), \
(__v4si)(__B)))

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

Sum these 4 results with the corresponding 32-bit integer in __W with signed saturation, and store the packed 32-bit results in dst.

_mm_dpbuuds_epi32( __m128i __W, __m128i __A, __m128i __B);
#define _mm_dpbuuds_epi32(__W, __A, __B)
Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in __A with corresponding unsigned 8-b...

This intrinsic corresponds to the VPDPBUUDS instruction.

Parameters
__AA 128-bit vector of [16 x unsigned char].
__BA 128-bit vector of [16 x unsigned char].
Returns
A 128-bit vector of [4 x int].
FOR j := 0 to 3
tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
ENDFOR
dst[MAX:128] := 0

Definition at line 392 of file avxvnniint8intrin.h.