2012-11-06 88 views
3

我想寫與上證所內部函數if語句的等價物。SSE比較本體 - 如何從比較中獲得1或0?

我使用__m128 _mm_cmplt_ps(__m128 a, __m128 b)做比較a < b,如果比較結果分別爲true或false,則返回0xffffffff0x0。我想這些值轉換爲1和0。爲了做到這一點,是不是正確的實現邏輯「和」 __m128 _mm_and_ps(__m128 c , __m128 d),其中c是轉換的結果,d是,例如,0xffffffff

感謝您的關注。

+0

是否有一個絕對值內在? (並且不,d必須是1)邏輯右移31也可以。 –

+1

你打算用'0'和'1'做什麼? – Mysticial

+0

感謝您的意見。 – Pippo

回答

14

你比較獲得10,然後由另一個數乘以。這基本上是這樣的:

c = (a < b) * d; 

這是與此相同:

c = 0; 
if (a < b) 
    c = d; 

這也被稱爲有條件的舉動。

如果這就是你想要的,那麼你不需要01。只是將比較的結果直接與您將乘以的數字進行比較。

__m128 c = _mm_cmplt_ps(a,b); 
c = _mm_and_ps(c,d); 

這工作,因爲比較返回要麼全部0的或全部1的。因此,將它們與結果進行邏輯或將其歸零或完全保留。

這是故意這樣設計的。不需要乘法。

+0

Wondeful答案。謝謝! – Pippo