如何测试a __m128i
变量在SSE-2和更早的处理器上有任何非零值?
如何测试a __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);
请注意,这是 真正 什么时候 所有位都为零。