Có cách nào để kiểm tra xem tất cả bit/byte/từ, vv trong biến __m128i là 0 không?
Trong ứng dụng của tôi, tôi phải kiểm tra xem tất cả các số nguyên được đóng gói trong một biến __m128i là số không. Tôi sẽ phải trích xuất chúng và so sánh riêng biệt?
Edit: Kiểm tra đăng ký XMM cho tất cả các số không
Những gì tôi đang làm bây giờ là:
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);
Những gì tôi cần là để kiểm tra xem idata là tất cả zero mà không cần phải truy cập vào từng yếu tố cá nhân, và bỏ vòng lặp nếu họ ...
Dựa trên nhận xét của Harold đây là giải pháp:
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
Điều này sẽ thoát khỏi vòng lặp nếu tất cả các bit thấp của mỗi DW trong idata là 0 ... cảm ơn hraold!
Bạn không thể sử dụng 'PCMPEQD' để so sánh mà không cần trích xuất? – dasblinkenlight
Sổ đăng ký XMM có đăng ký cờ gắn với chúng không? Nếu có, phải có một lá cờ bằng không trong số các bit này. –
Xem 'PTEST' là SSE4 có sẵn, nếu không sẽ tốn nhiều công sức hơn. – harold