2012-11-06 58 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