如何测试__m128i
变量在SSE-2及更早版本的处理器上是否具有任何非零值?
答案 0 :(得分:12)
在SSE2中你可以这样做:
__m128i zero = _mm_setzero_si128();
if(_mm_movemask_epi8(_mm_cmpeq_epi32(x,zero)) == 0xFFFF)
{
//the code...
}
这将测试四个int与零然后为每个字节返回一个掩码,因此每个对应int
的位偏移将为0,4,8& 12,但如果设置了任何位,上面的测试将会捕获,如果你保留了掩码,你可以直接使用更精细的粒度部分。
答案 1 :(得分:4)