是__m128i变量零

Is an __m128i variable zero?

本文关键字:变量 m128i      更新时间:2023-10-16

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

在SSE2中可以这样做:

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

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

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

const bool isAllZero = _mm_testz_si128(a,a);

注意当所有位都为零为true