インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス

ビット操作の組込み関数

インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 組込み関数のプロトタイプは、zmmintrin.h ヘッダーファイルで定義されていますが、これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。

#include <immintrin.h>


変数 定義
src

書き込みマスクの結果に応じて使用されるソース要素

k

セレクターとして使用される書き込みマスク

a

1 つ目のソースベクトルの要素


_mm_lzcnt_epi32

__m128i _mm_lzcnt_epi32(__m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、結果を返します。



_mm_mask_lzcnt_epi32

__m128i _mm_mask_lzcnt_epi32(__m128i src, __mmask8 k, __m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、書き込みマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm_maskz_lzcnt_epi32

__m128i _mm_maskz_lzcnt_epi32(__mmask8 k, __m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、ゼロマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm256_lzcnt_epi32

__m256i _mm256_lzcnt_epi32(__m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、結果を返します。



_mm256_mask_lzcnt_epi32

__m256i _mm256_mask_lzcnt_epi32(__m256i src, __mmask8 k, __m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、書き込みマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm256_maskz_lzcnt_epi32

__m256i _mm256_maskz_lzcnt_epi32(__mmask8 k, __m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntd

a の各パックド 32 ビット整数の先頭からのゼロ・ビットの数をカウントし、ゼロマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm_lzcnt_epi64

__m128i _mm_lzcnt_epi64(__m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、結果を返します。



_mm_mask_lzcnt_epi64

__m128i _mm_mask_lzcnt_epi64(__m128i src, __mmask8 k, __m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、書き込みマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm_maskz_lzcnt_epi64

__m128i _mm_maskz_lzcnt_epi64(__mmask8 k, __m128i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、ゼロマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm256_lzcnt_epi64

__m256i _mm256_lzcnt_epi64(__m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、結果を返します。



_mm256_mask_lzcnt_epi64

__m256i _mm256_mask_lzcnt_epi64(__m256i src, __mmask8 k, __m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、書き込みマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm256_maskz_lzcnt_epi64

__m256i _mm256_maskz_lzcnt_epi64(__mmask8 k, __m256i a)

CPUID フラグ: AVX512CD、AVX512VL

命令: vplzcntq

a の各パックド 64 ビット整数の先頭からのゼロ・ビットの数をカウントし、ゼロマスク k を使用して結果を返します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm_multishift_epi64_epi8

__m128i _mm_multishift_epi64_epi8(__m128i a, __m128i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、戻り値の対応する 64 ビット要素に格納します。



_mm_mask_multishift_epi64_epi8

__m128i _mm_mask_multishift_epi64_epi8(__m128i src, __mmask16 k, __m128i a, __m128i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、書き込みマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm_maskz_multishift_epi64_epi8

__m128i _mm_maskz_multishift_epi64_epi8(__mmask16 k, __m128i a, __m128i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、ゼロマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm256_multishift_epi64_epi8

__m256i _mm256_multishift_epi64_epi8(__m256i a, __m256i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、戻り値の対応する 64 ビット要素に格納します。



_mm256_mask_multishift_epi64_epi8

__m256i _mm256_mask_multishift_epi64_epi8(__m256i src, __mmask32 k, __m256i a, __m256i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、書き込みマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm256_maskz_multishift_epi64_epi8

__m256i _mm256_maskz_multishift_epi64_epi8(__mmask32 k, __m256i a, __m256i b) 

CPUID フラグ: AVX512VBMI、AVX512VL

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、ゼロマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。



_mm512_multishift_epi64_epi8

__m512i _mm512_multishift_epi64_epi8(__m512i a, __m512i b) 

CPUID フラグ: AVX512VBMI

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、戻り値の対応する 64 ビット要素に格納します。



_mm512_mask_multishift_epi64_epi8

__m512i _mm512_mask_multishift_epi64_epi8(__m512i src, __mmask64 k, __m512i a, __m512i b) 

CPUID フラグ: AVX512VBMI

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、書き込みマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は src の要素がコピーされます)。



_mm512_maskz_multishift_epi64_epi8

__m512i _mm512_maskz_multishift_epi64_epi8(__mmask64 k, __m512i a, __m512i b) 

CPUID フラグ: AVX512VBMI

命令: vpmultishiftqb

b の各 64 ビット要素について、a の対応する 64 ビット要素内にあるバイト粒度のシフト・コントロールを使用して 8 つのアライメントされていないバイトを選択し、ゼロマスク k を使用して戻り値の対応する 64 ビット要素に格納します (マスクの対応するビットが設定されていない場合は要素が 0 に設定されます)。