Czy istnieje sposób sprawdzenia, czy wszystkie bity/bajty/słowa itp. W zmiennej __m128i mają wartość 0?
W mojej aplikacji muszę sprawdzić, czy wszystkie liczby całkowite spakowane w zmiennej __m128i są zerami. Czy będę musiał je wyodrębnić i porównać osobno?
Edit: Sprawdź rejestr XMM dla wszystkich zer
Co robię teraz to:
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);
Co potrzebne jest, aby sprawdzić, czy iData to wszystkie zera bez konieczności dostępu do każdego pojedynczego elementu, a wyjście z pętli, jeśli są one ...
podstawie komentarzu Harolda jest to rozwiązanie:
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
Spowoduje to wyjście z pętli, jeśli wszystkie małe bity każdego DW w idata wynoszą 0 ... dzięki hraold!
Nie możesz użyć, powiedzmy, 'PCMPEQD' do porównania bez ekstrakcji? – dasblinkenlight
Czy do rejestrów XMM jest dołączony rejestr flag? Jeśli tak, pomiędzy tymi bitami musi znajdować się flaga zero. –
Zobacz "PTEST" jest dostępne w SSE4, w przeciwnym razie wymaga nieco więcej wysiłku. – harold