是否有方法檢查__m128i變量中的所有位/字節/字等是否爲0?
在我的應用程序中,我必須檢查包含在__m128i變量中的所有整數是否爲零。我需要提取它們並分別進行比較嗎?
編輯: 檢查所有零的XMM寄存器
我現在正在做的是:
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);
我需要的是檢查是否IDATA是全零,而無需訪問每個元素,並退出循環,如果他們是...
基於哈羅德的評論是這樣的解決方案:
__m128i idata = _mm_setr_epi32(i,j,k,l);
do{
//some code
}while(!_mm_testz_si128(idata, idata));
如果idata中每個DW的低位都爲0,則會退出循環...謝謝hraold!
難道你不能使用'PCMPEQD'來進行比較而不提取嗎? – dasblinkenlight 2012-04-16 14:14:01
XMM寄存器是否附有標誌寄存器?如果是,則這些位之間必須有一個零標誌。 – 2012-04-16 14:15:12
請參閱'PTEST'是否SSE4可用,否則它會花費更多的努力。 – harold 2012-04-16 14:20:36