__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);
注意,当所有位都为零时,这是真的 。