これらのインテル® ストリーミング SIMD 拡張命令 (インテル® SSE4) 組み込み命令は、パックド整数の 128 ビット比較を行います。これらの組み込み関数のプロトタイプは、smmintrin.h ファイル内にあります。
組み込み関数名 |
演算子 |
対応する |
---|---|---|
_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