是否有方法检查__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,则会退出循环...谢谢hraold!
难道你不能使用'PCMPEQD'来进行比较而不提取吗? – dasblinkenlight 2012-04-16 14:14:01
XMM寄存器是否附有标志寄存器?如果是,则这些位之间必须有一个零标志。 – 2012-04-16 14:15:12
请参阅'PTEST'是否SSE4可用,否则它会花费更多的努力。 – harold 2012-04-16 14:20:36