2013-04-04 47 views
2

我想使用比較操作的結果添加到SSE變量。我剛剛意識到,使用_mm_cmplt_ps操作時,如果結果爲真則返回一個NAN因爲0xffffffff的無法表示這是對我沒有用的:嘗試在SSE編程中使用和掩碼添加__m128

__m128 va; 
__m128 vb; 
__m128 result =_mm_set1_ps(0.0f); 
vb = _mm_cmplt_ps(va,vb); 
result = _mm_add_ps(result,vb); // problem is that I would like to convert vb to 1.0's and 0.0's 
+0

你想,每個組件,結了1.0,如果VA小於VB? – fun4jimmy 2013-04-04 10:56:30

+0

@ fun4jimmy是的,這是我想要的。 – user1850254 2013-04-04 10:59:59

回答

7

你可以只應用比較掩碼到1.0值的向量,例如

__m128 va, vb; 
__m128 vcmp = _mm_cmplt_ps(va, vb); 
__m128 vresult = _mm_and_ps(_mm_set1_ps(1.0f), vcmp); 
+0

我希望結果是基於比較值的1.0和0.0的混合? – user1850254 2013-04-04 11:04:26

+0

temp是被屏蔽後的1.0s和0.0s的混合體,所以如果這就是你所需要的,那麼就省略最後的加法。我已經更新了上面的代碼來反映這一點。 – 2013-04-04 11:06:02