Pip*_*ppo 3 c comparison if-statement sse intrinsics
我试图用SSE内在函数编写if语句的等价物.
我__m128 _mm_cmplt_ps(__m128 a, __m128 b)用来做比较a <b,这会返回0xffffffff或者0x0如果比较分别为true或false.我想将这些值转换为1和0.为了做到这一点,实现逻辑"和"是正确的,转换的结果__m128 _mm_and_ps(__m128 c , __m128 d)在哪里,例如,?cd0xffffffff
感谢您的关注.
Mys*_*ial 16
你比较得到a 1或a 0,然后再乘以另一个数字.基本上就是这样:
c = (a < b) * d;
Run Code Online (Sandbox Code Playgroud)
这与此相同:
c = 0;
if (a < b)
c = d;
Run Code Online (Sandbox Code Playgroud)
这也称为条件移动.
如果这是你想要的,那么你不需要0或者1.只是和比较的结果直接与您将乘以的数字.
__m128 c = _mm_cmplt_ps(a,b);
c = _mm_and_ps(c,d);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为比较返回全部0或全部1.因此,对结果进行AND运算将使其归零,或者将其完全保留.
它是故意设计的.不需要乘法.