インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
これらのインテル® ストリーミング SIMD 拡張命令 4 (インテル® SSE4) 組込み命令は、パックド整数の 128 ビット比較を行います。これらの組込み関数のプロトタイプは、smmintrin.h ファイル内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
組込み関数名 |
演算 |
対応するインテル® SSE4 命令 |
---|---|---|
_mm_testz_si128 |
128 ビット値の指定ビットの 0 をすべて確認する | PTEST |
_mm_testc_si128 |
128 ビット値の指定ビットの 1 をすべて確認する | PTEST |
_mm_testnzc_si128 |
128 ビット値の指定ビットの少なくとも 1 つの '0' と '1' を確認する | PTEST |
int _mm_testz_si128(__m128i s1, __m128i s2);
s1 と s2 の AND ビット演算の結果値がすべて 0 になる場合に '1' を返し、そうでない場合は '0' を返します。すなわち、次のようになります。
_mm_testz_si128 := ( (s1 & s2) == 0 ? 1 : 0 )
これは、命令 PTEST s1, s2 の結果で、ZF フラグが '1' かどうかをチェックします。例えば、s2 (マスク) のすべてのセットビットが s1 で 0 かどうかをチェックできます。
対応する命令: PTEST
int _mm_testc_si128(__m128i s1, __m128i s2);
NOT s1 と s2 の AND ビット演算の結果値がすべて 0 になる場合に '1' を返し、そうでない場合は '0' を返します。すなわち、次のようになります。
_mm_testc_si128 := ( (~s1 & s2) == 0 ? 1 : 0 )
これは、命令 PTEST s1, s2 の結果で、CF フラグが '1' かどうかをチェックします。例えば、s2 (マスク) のすべてのセットビットが s1 でもセットされているかどうかをチェックできます。
対応する命令: PTEST
int _mm_testnzc_si128(__m128i s1, __m128i s2);
s1 と s2 の AND ビット演算の結果値がすべて 0 にならず、NOT s1 と s2 の AND ビット演算の結果値がすべて 0 にならない場合は '1' を返し、そうでない場合は '0' を返します。すなわち、次のようになります。
_mm_testnzc_si128 := ( ( (s1 & s2) != 0 && (~s1 & s2) != 0 ) ? 1 : 0 )
これは、命令 PTEST s1, s2 の結果で、CF フラグと ZF フラグの両方が '1' ではないかどうかをチェックします。例えば、s2 (マスク) のセットビットとして指定されている位置の s1 で、結果が 0 と 1 の両方を持つことをチェックできます。
対応する命令: PTEST