Intel® C++ Compiler Classic Developer Guide and Reference

ID 767249
Date 12/16/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Intrinsics for Integer Bit Shift Operations

The prototypes for Intel® Advanced Vector Extensions 512 (Intel® AVX-512) intrinsics are located in the zmmintrin.h header file.

To use these intrinsics, include the immintrin.h file as follows:

#include <immintrin.h>


Intrinsic Name

Operation

Corresponding
Intel® AVX-512 Instruction

_mm512_sll_epi32, _mm512_mask_sll_epi32, _mm512_maskz_sll_epi32

_mm512_slli_epi32, _mm512_mask_slli_epi32, _mm512_maskz_slli_epi32

Logical left shift of int32 elements.

VPSLLD

_mm512_srl_epi32, _mm512_mask_srl_epi32, _mm512_maskz_srl_epi32

_mm512_srli_epi32, _mm512_mask_srli_epi32, _mm512_maskz_srli_epi32

Logical right shift of int32 elements.

VPSRLD

_mm512_sll_epi64, _mm512_mask_sll_epi64, _mm512_maskz_sll_epi64

_mm512_slli_epi64, _mm512_mask_slli_epi64, _mm512_maskz_slli_epi64

Logical left shift of int64 elements.

VPSLLQ

_mm512_srl_epi64, _mm512_mask_srl_epi64, _mm512_maskz_srl_epi64

_mm512_srli_epi64, _mm512_mask_srli_epi64, _mm512_maskz_srli_epi64

Logical right shift of int64 elements.

VPSRLQ

_mm512_sllv_epi32, _mm512_mask_sllv_epi32, _mm512_maskz_sllv_epi32

Variable logical left shift of int32 elements.

VPSLLVD

_mm512_srlv_epi32, _mm512_mask_srlv_epi32, _mm512_maskz_srlv_epi32

Variable logical right shift of int32 elements.

VPSRLVD

_mm512_sllv_epi64, _mm512_mask_sllv_epi64, _mm512_maskz_sllv_epi64

Variable logical bit shift left of int64 elements.

VPSLLVQ

_mm512_srlv_epi64, _mm512_mask_srlv_epi64, _mm512_maskz_srlv_epi64

Variable logical bit shift right of int64 elements.

VPSRLVQ

_mm512_sra_epi32, _mm512_mask_sra_epi32, _mm512_maskz_sra_epi32

_mm512_srai_epi32, _mm512_mask_srai_epi32, _mm512_maskz_srai_epi32

Arithmetic right shift of int32 elements.

VPSRAD

_mm512_srav_epi32, _mm512_mask_srav_epi32, _mm512_maskz_srav_epi32

Variable arithmetic right shift of int32 elements.

VPSRAVD

_mm512_srav_epi64, _mm512_mask_srav_epi64, _mm512_maskz_srav_epi64

Variable arithmetic bit shift right of int64 elements.

VPSRAVQ

_mm512_sra_epi64, _mm512_mask_sra_epi64, _mm512_maskz_sra_epi64

_mm512_srai_epi64, _mm512_mask_srai_epi64, _mm512_maskz_srai_epi64

Arithmetic right shift of int64 elements.

VPSRAQ


variable definition
k

writemask used as a selector

a

first source vector element

src

source element to use based on writemask result

count

specifies the number of bits for shift operation

imm

8-bit immediate integer specifies offset for destination


_mm512_sll_epi32

extern __m512i __cdecl _mm512_sll_epi32(__m512i a, __m128i count);

Shifts packed int32 elements in a left by count while shifting in zeros, and stores the result.



_mm512_mask_sll_epi32

extern __m512i __cdecl _mm512_mask_sll_epi32(__m512i src, __mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a left by count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sll_epi32

extern __m512i __cdecl _mm512_maskz_sll_epi32(__mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a left by count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_slli_epi32

extern __m512i __cdecl _mm512_slli_epi32(__m512i a, unsigned int imm);

Shifts packed int32 elements in a left by imm while shifting in zeros, and stores the result.



_mm512_mask_slli_epi32

extern __m512i __cdecl _mm512_mask_slli_epi32(__m512i src, __mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a left by imm while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_slli_epi32

extern __m512i __cdecl _mm512_maskz_slli_epi32(__mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a left by imm while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_sll_epi64

extern __m512i __cdecl _mm512_sll_epi64(__m512i a, __m128i count);

Shifts packed int64 elements in a left by count while shifting in zeros, and stores the result.



_mm512_mask_sll_epi64

extern __m512i __cdecl _mm512_mask_sll_epi64(__m512i src, __mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a left by count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sll_epi64

extern __m512i __cdecl _mm512_maskz_sll_epi64(__mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a left by count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_slli_epi64

extern __m512i __cdecl _mm512_slli_epi64(__m512i a, unsigned int imm);

Shifts packed int64 elements in a left by imm while shifting in zeros, and stores the result.



_mm512_mask_slli_epi64

extern __m512i __cdecl _mm512_mask_slli_epi64(__m512i src, __mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a left by imm while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_slli_epi64

extern __m512i __cdecl _mm512_maskz_slli_epi64(__mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a left by imm while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_sllv_epi32

extern __m512i __cdecl _mm512_sllv_epi32(__m512i a, __m512i count);

Shifts packed int32 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result.



_mm512_mask_sllv_epi32

extern __m512i __cdecl _mm512_mask_sllv_epi32(__m512i src, __mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sllv_epi32

extern __m512i __cdecl _mm512_maskz_sllv_epi32(__mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_sllv_epi64

extern __m512i __cdecl _mm512_sllv_epi64(__m512i a, __m512i count);

Shifts packed int64 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result.



_mm512_mask_sllv_epi64

extern __m512i __cdecl _mm512_mask_sllv_epi64(__m512i src, __mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sllv_epi64

extern __m512i __cdecl _mm512_maskz_sllv_epi64(__mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a left by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_sra_epi32

extern __m512i __cdecl _mm512_sra_epi32(__m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in sign bits, and stores the result.



_mm512_mask_sra_epi32

extern __m512i __cdecl _mm512_mask_sra_epi32(__m512i src, __mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sra_epi32

extern __m512i __cdecl _mm512_maskz_sra_epi32(__mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_sra_epi64

extern __m512i __cdecl _mm512_sra_epi64(__m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in sign bits, and stores the result.



_mm512_mask_sra_epi64

extern __m512i __cdecl _mm512_mask_sra_epi64(__m512i src, __mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_sra_epi64

extern __m512i __cdecl _mm512_maskz_sra_epi64(__mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srai_epi32

extern __m512i __cdecl _mm512_srai_epi32(__m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in sign bits, and stores the result.



_mm512_mask_srai_epi32

extern __m512i __cdecl _mm512_mask_srai_epi32(__m512i src, __mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srai_epi32

extern __m512i __cdecl _mm512_maskz_srai_epi32(__mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srai_epi64

extern __m512i __cdecl _mm512_srai_epi64(__m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in sign bits, and stores the result.



_mm512_mask_srai_epi64

extern __m512i __cdecl _mm512_mask_srai_epi64(__m512i src, __mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srai_epi64

extern __m512i __cdecl _mm512_maskz_srai_epi64(__mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srav_epi32

extern __m512i __cdecl _mm512_srav_epi32(__m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result.



_mm512_mask_srav_epi32

extern __m512i __cdecl _mm512_mask_srav_epi32(__m512i src, __mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srav_epi32

extern __m512i __cdecl _mm512_maskz_srav_epi32(__mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srav_epi64

extern __m512i __cdecl _mm512_srav_epi64(__m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result.



_mm512_mask_srav_epi64

extern __m512i __cdecl _mm512_mask_srav_epi64(__m512i src, __mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srav_epi64

extern __m512i __cdecl _mm512_maskz_srav_epi64(__mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in sign bits, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srl_epi32

extern __m512i __cdecl _mm512_srl_epi32(__m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in zeros, and stores the result.



_mm512_mask_srl_epi32

extern __m512i __cdecl _mm512_mask_srl_epi32(__m512i src, __mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srl_epi32

extern __m512i __cdecl _mm512_maskz_srl_epi32(__mmask16 k, __m512i a, __m128i count);

Shifts packed int32 elements in a right by count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srli_epi32

extern __m512i __cdecl _mm512_srli_epi32(__m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in zeros, and stores the result.



_mm512_mask_srli_epi32

extern __m512i __cdecl _mm512_mask_srli_epi32(__m512i src, __mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srli_epi32

extern __m512i __cdecl _mm512_maskz_srli_epi32(__mmask16 k, __m512i a, unsigned int imm);

Shifts packed int32 elements in a right by imm while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srl_epi64

extern __m512i __cdecl _mm512_srl_epi64(__m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in zeros, and stores the result.



_mm512_mask_srl_epi64

extern __m512i __cdecl _mm512_mask_srl_epi64(__m512i src, __mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srl_epi64

extern __m512i __cdecl _mm512_maskz_srl_epi64(__mmask8 k, __m512i a, __m128i count);

Shifts packed int64 elements in a right by count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srli_epi64

extern __m512i __cdecl _mm512_srli_epi64(__m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in zeros, and stores the result.



_mm512_mask_srli_epi64

extern __m512i __cdecl _mm512_mask_srli_epi64(__m512i src, __mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srli_epi64

extern __m512i __cdecl _mm512_maskz_srli_epi64(__mmask8 k, __m512i a, unsigned int imm);

Shifts packed int64 elements in a right by imm while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srlv_epi32

extern __m512i __cdecl _mm512_srlv_epi32(__m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result.



_mm512_mask_srlv_epi32

extern __m512i __cdecl _mm512_mask_srlv_epi32(__m512i src, __mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srlv_epi32

extern __m512i __cdecl _mm512_maskz_srlv_epi32(__mmask16 k, __m512i a, __m512i count);

Shifts packed int32 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).



_mm512_srlv_epi64

extern __m512i __cdecl _mm512_srlv_epi64(__m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result.



_mm512_mask_srlv_epi64

extern __m512i __cdecl _mm512_mask_srlv_epi64(__m512i src, __mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using writemask k (elements are copied from src when the corresponding mask bit is not set).



_mm512_maskz_srlv_epi64

extern __m512i __cdecl _mm512_maskz_srlv_epi64(__mmask8 k, __m512i a, __m512i count);

Shifts packed int64 elements in a right by the amount specified by the corresponding element in count while shifting in zeros, and stores the result using zeromask k (elements are zeroed out when the corresponding mask bit is not set).