2012-11-06 3 views
3

SSE 내장 함수를 사용하여 if 문에 해당하는 내용을 작성하려고합니다.SSE 비교 내장 함수 - 비교에서 1 또는 0을 얻는 방법?

내가 비교에게 < B를 할 __m128 _mm_cmplt_ps(__m128 a, __m128 b)을 사용하고, 그 비교는 각각 참 또는 거짓이라면이 0xffffffff 또는 0x0 반환합니다. 이 값을 1과 0으로 변환하고 싶습니다. 이렇게하려면 논리적 "and"__m128 _mm_and_ps(__m128 c , __m128 d)을 구현하는 것이 맞습니까? 은 변환 결과이고 d은 예 : 0xffffffff입니까?

감사합니다.

+0

본질적으로 절대 값이 있습니까? (그리고 아니오, d는 1이되어야합니다.) 31에 의한 논리적 인 오른쪽 이동도 가능합니다. –

+1

'0'과'1'로 무엇을 할 계획입니까? – Mysticial

+0

의견을 보내 주셔서 감사합니다. – Pippo

답변

14

1 또는 0을 얻고 다른 숫자를 곱하면됩니다. 이것과 동일

c = (a < b) * d; 

: 즉, 본질적으로이있다

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

이것은 또한 이동 조건으로 알려져있다.

원하는 경우 0 또는 1이 필요하지 않습니다. 당신이 번식 할 숫자와 직접 비교하면됩니다. 비교가 모든 0 년대 또는 모든 1 년대 중 하나를 반환하기 때문에

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

이 작동합니다. 따라서 결과를 ANDing하면 0이되거나 완전히 유지됩니다.

이렇게 의도적으로 설계되었습니다. 곱셈을 할 필요가 없습니다.

+0

Wondeful 대답. 고맙습니다! – Pippo

관련 문제