¿Hay alguna forma de comprobar si todos los bits/bytes/palabras, etc. en una variable __m128i son 0?
En mi aplicación, tengo que verificar si todos los enteros empaquetados en a en una variable __m128i son ceros. ¿Tendré que extraerlos y compararlos por separado?
Editar: Comprobar el registro XMM para todos los ceros
Lo que estoy haciendo ahora es:
int next = 0;
do{
//some code
next = idata.m128i_i32[0] + idata.m128i_i32[1] + idata.m128i_i32[2] + idata.m128i_i32[3];
}while(next > 0);
Lo que necesito es para comprobar si idata es todo ceros sin tener que acceder a cada elemento individual, y salga del bucle si están ...
Basado en el comentario de Harold esta es la solución:
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
Esto saldrá del bucle si todos los bits bajos de cada DW en idata son 0 ... gracias Hraold!
¿No puedes usar, por ejemplo, 'PCMPEQD' para comparar sin extracción? – dasblinkenlight
¿Los registros XMM tienen un registro de bandera adjunto? En caso afirmativo, debe haber un indicador de cero entre estos bits. –
Ver 'PTEST 'es SSE4 disponible, de lo contrario, requerirá un poco más de esfuerzo. – harold