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.