Gcc 关于mmintrin.h或emmintrin.h中未找到的SSE比较说明?
我发现使用这些函数调用大于、小于和等于的指令Gcc 关于mmintrin.h或emmintrin.h中未找到的SSE比较说明?,gcc,comparison,header-files,sse,intrinsics,Gcc,Comparison,Header Files,Sse,Intrinsics,我发现使用这些函数调用大于、小于和等于的指令 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_c
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作为我的编译器,所以如果有人以下面的指令作为示例,那就太好了
比较代码(上述xx部分):
对于整数,只有两个基本比较指令,
PCMPGTx
和PCMPEQx
。其他比较内部函数是从这些函数中派生出来的,例如,\u mm\u cmplt\u epi8(v0,v1)
就是\u mm\u cmpgt\u epi8(v1,v0)
-操作数切换时,它是相同的底层指令(PCMPGTB
)。可以根据这些指令构建所有其他比较内部函数,虽然大多数头都提供了lt
以及gt
作为一种方便,但在编码时,通常会留给程序员处理任何其他条件。但是小于或等于呢?那么,这意味着要在内联汇编中进行编码吗?le
只是gt
的逻辑否定-因此,您只需执行例如\u mm\u cmgpt\u epi8
然后反转结果(如果需要),例如使用\u mm\u xor\u si128
。但这不是两个操作而不是一个吗?这是两条指令,但只有在程序逻辑需要的情况下,才可以通过仔细编码来消除反转比较掩码的需要。
le - Less than or equal to.
ne - Not equal.
nlt - Not less than.
nle - Not less than or equal to.