__m128i変数のすべてのビット/バイト/ワードなどが0かどうかを確認する方法はありますか?
私のアプリでは、__m128i変数にパックされているすべての整数がゼロであるかどうかをチェックする必要があります。私はそれらを抽出し、それぞれを別々に比較する必要がありますか?
編集: すべてのゼロについてXMMレジスタを確認してください
私が今やっている何がある:
int next = 0;
do{
//some code
next = idata.m128i_i32[0] + idata.m128i_i32[1] + idata.m128i_i32[2] + idata.m128i_i32[3];
}while(next > 0);
私が必要とする彼らは何をしている場合Idataが、個々の要素にアクセスすることなく、すべてゼロであるかどうかをチェックし、ループを終了することがあります
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
:...
ハロルドさんのコメントに基づいて、これが解決策です
idataの各DWのすべての下位ビットが0の場合、これはループを終了します... thanks hraold!
抽出せずに比較するのに 'PCMPEQD'を使用することはできませんか? – dasblinkenlight
XMMレジスタにフラグレジスタが付いていますか?もしそうであれば、これらのビットの中にゼロフラグがなければならない。 –
'PTEST'が利用可能なSSE4を参照してください。それ以外の場合は少し努力します。 – harold