Is an __m128i variable zero?

In SSE2 you can do:

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

this will test four int's vs zero then return a mask for each byte, so your bit-offsets of each corresponding int would be at 0, 4, 8 & 12, but the above test will catch if any bit is set, then if you preserve the mask you can work with the finer grained parts directly if need be.


For the sake of completeness, with SSE4 one can use _mm_testz_si128.

const bool isAllZero = _mm_testz_si128(a,a);

Note that this is true when all bits are zero.

Tags:

C++

C

Sse

Intel

Simd