__m128i变量是零吗?

如何测试__m128i变量在SSE-2和更早版本的处理器上是否具有任何非零值?

在SSE2中,您可以:

 __m128i zero = _mm_setzero_si128(); if(_mm_movemask_epi8(_mm_cmpeq_epi32(x,zero)) == 0xFFFF) { //the code... } 

这将测试四个int与零然后为每个字节返回一个掩码,因此每个对应int位偏移将是0,4,8和12,但上面的测试将捕获是否设置了任何位,然后如果你如果需要,可以直接保留可以使用更细粒度部件的面罩。

为了完整起见,使用SSE4可以使用_mm_testz_si128 。

 const bool isAllZero = _mm_testz_si128(a,a); 

注意,当所有位都为零时,这是真的