テスト組み込み関数

これらのインテル® ストリーミング SIMD 拡張命令 (インテル® SSE4) 組み込み命令は、パックド整数の 128 ビット比較を行います。これらの組み込み関数のプロトタイプは、smmintrin.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