2013-07-06 5 views
2

보다 큼,보다 작거나 같음에 대한 명령어가 이러한 함수와 함께 호출됨을 발견했습니다.mmintrin.h 또는 emmintrin.h에서 SSE 비교 명령어를 찾을 수 없습니까?

emmintrin 

_mm_cmpeq_epi8 (__m128i __A, __m128i __B) 
_mm_cmplt_epi8 (__m128i __A, __m128i __B) 
_mm_cmpgt_epi8 (__m128i __A, __m128i __B) 

mmintrin 
_mm_cmpeq_pi8 (__m64 __m1, __m64 __m2) 
_m_pcmpeqb (__m64 __m1, __m64 __m2) 
_mm_cmpgt_pi8 (__m64 __m1, __m64 __m2) 
_m_pcmpgtb (__m64 __m1, __m64 __m2) 

하지만 이것들은 어떨까요? 그들은 어딘가에 SSE 내장 헤더에 있거나 인라인 어셈블러를 사용합니다. GCC를 제 컴파일러로 사용하기 때문에 다음과 같은 지시 사항이 좋은 예가 될 수 있습니다.

pcmpxxb - Compares 16 8bit integers.

코드 (위의 XX 부품) 비교 : 정수의 경우

le - Less than or equal to. 

ne - Not equal. 

nlt - Not less than. 

nle - Not less than or equal to. 

답변

1

두 개의 기본적인 비교 지침, PCMPGTxPCMPEQx있다. 다른 비교 intrinsics은 이들로부터 유도된다. _mm_cmplt_epi8(v0, v1)은 단지 _mm_cmpgt_epi8(v1, v0)입니다. 피연산자가 전환 된 동일한 기본 명령어 (PCMPGTB)입니다. 이 지침에서 다른 모든 비교 내장 함수를 빌드 할 수 있으며 대부분의 헤더는 ltgt을 편리하게 제공하지만 프로그래머가 코딩 할 때 일반적으로 다른 조건이 남아 있습니다.

+0

'작거나 같음'은 어떨까요? 그러면 인라인 어셈블리에서 코딩 될 것입니까? – pandoragami

+0

'le'은 단지'gt'의 논리적 부정입니다. '_mm_cmgpt_epi8' 그리고 결과를 반전시킵니다 (필요한 경우). '_mm_xor_si128'을 사용합니다. –

+0

단 하나가 아닌 두 가지 조작이 아닌가요? – pandoragami