2

我发现这些函数调用了大于、小于和等于的指令。

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 - 比较 16 个 8 位整数。

比较代码(上面的 xx 部分):

le - Less than or equal to.

ne - Not equal.

nlt - Not less than.

nle - Not less than or equal to.
4

1 回答 1

1

对于整数,只有两个基本的比较指令PCMPGTxPCMPEQx。其他比较内在函数是从这些中派生的,例如_mm_cmplt_epi8(v0, v1)只是_mm_cmpgt_epi8(v1, v0)- 它是相同的基础指令 ( PCMPGTB),但操作数已切换。可以从这些指令构建所有其他比较内在函数,虽然大多数标头提供ltgt便利,但任何其他条件通常留给程序员在编码时处理。

于 2013-07-06T10:42:16.167 回答