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

テスト組込み関数

これらのインテル® ストリーミング SIMD 拡張命令 4 (インテル® 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

_mm_testz_si128

int _mm_testz_si128(__m128i s1, __m128i s2);

s1s2 の AND ビット演算の結果値がすべて 0 になる場合に '1' を返し、そうでない場合は '0' を返します。すなわち、次のようになります。

_mm_testz_si128 := ( (s1 & s2) == 0 ? 1 : 0 )

これは、命令 PTEST s1, s2 の結果で、ZF フラグが '1' かどうかをチェックします。例えば、s2 (マスク) のすべてのセットビットが s1 で 0 かどうかをチェックできます。

対応する命令: PTEST

_mm_testc_si128

int _mm_testc_si128(__m128i s1, __m128i s2);

NOT s1s2 の AND ビット演算の結果値がすべて 0 になる場合に '1' を返し、そうでない場合は '0' を返します。すなわち、次のようになります。

_mm_testc_si128 := ( (~s1 & s2) == 0 ? 1 : 0 )

これは、命令 PTEST s1, s2 の結果で、CF フラグが '1' かどうかをチェックします。例えば、s2 (マスク) のすべてのセットビットが s1 でもセットされているかどうかをチェックできます。

対応する命令: PTEST

_mm_testnzc_si128

int _mm_testnzc_si128(__m128i s1, __m128i s2);

s1s2 の AND ビット演算の結果値がすべて 0 にならず、NOT s1s2 の 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