__m128i değişkenindeki tüm bit/bayt/sözcüklerin vb. Olup olmadığını kontrol etmenin bir yolu var mı?
Uygulamamda, __m128i değişkeninde paketlenmiş tüm tam sayıların sıfır olup olmadığını kontrol etmeliyim. Onları ayıklamak ve ayrı ayrı karşılaştırmak zorunda mıyım?
Düzenleme: Tüm sıfırlar için XMM kaydını kontrol edin
Şimdi ne yapıyorum geçerli:
Benim ihtiyacım idata her tek bir öğesine erişmek zorunda kalmadan tüm sıfırları olup olmadığını kontrol edin ve eğer olurlarsa döngü çıkmak için ise
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);
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
: ... Harold yorum dayanarak
bu çözüm
Bu, idatadaki her DW'nin tüm düşük bitlerinin 0 olması durumunda döngüden çıkar ... teşekkürler hraold!
"PCMPEQD" ifadesini çıkarma olmadan karşılaştırmak için kullanamaz mısınız? – dasblinkenlight
XMM kayıtlarında bunlara bağlı bir bayrak kaydı var mı? Eğer evet ise, bu bitler arasında sıfır bayrak bulunmalıdır. –
Bkz. "PTEST" SSE4 kullanılabilir, aksi halde biraz daha fazla çaba gerektirir. – harold