SSE2的一些常用指令集介绍

来源:互联网 发布:linux anaconda怎么用 编辑:程序博客网 时间:2024/05/18 03:21

开门见山,前段时间学习OpenCV的FAST算法,中间有很多SSE2的指令集,深受其惑。下面我把学习过程中学到的一些指令集介绍给大家,希望能对大家有所帮助!

__m128i被称为128bits的整数,对其进行赋值时,可以调用__m128i_mm_set1_epi8或者__m128i_mm_set1_epi816等,前者就是把128bits设置为16个8bits的整数值,后一个例子就是把128bits设置成8个16bits的整数值。

_mm_loadu_si128表示:Loads 128-bit value;加载128位值。
_mm_max_epu8 (a,b)表示:比较a和b中对应的无符号的8bits的整数,取其较大值
,重复这个过程16次。即:r0=max(a0,b0),...,r15=max(a15,b15)
_mm_min_epi8(a,b)表示:大体意思同上,不同的是这次比较的是有符号的8bits的整数。
_mm_setzero_si128表示:将128bits的值都赋值为0.
_mm_subs_epu8(a,b)表示:
a和b中对应的8bits数相减,r0= UnsignedSaturate(a0-b0),...,r15= UnsignedSaturate(a15 - b15)
_mm_adds_epi8(a,b)表示:a和b中对应的8bits数相
,r0=SingedSaturate(a0+b0),...,r15=SingedSaturate(a15+b15).

_mm_unpackhi_epi64(a,b)表示:a和b的高64位交错,低64位舍去。
_mm_srli_si128(a,imm)表示:将a进行逻辑右移imm位,高位填充0。
_mm_cvtsi128_si32(a)表示:将a的低32位赋值给一个32bits的整数,返回值为r=a0;
_mm_xor_si128(a,b)表示:将a和b进行按位异或,即r=a^b。
_mm_or_si128(a,b)表示:将a和b进行或运算,即r=a|b。
_mm_and_si128(a,b)表示:将a和b进行与运算,即r=a&b。
_mm_cmpgt_epi8(a,b)表示:分别比较a的每个8bits整数是否大于b的对应位置的8bits整数,若大于,则返回0xffff,否则返回0x0。
即r0=(a0>b0)?0xff:0x0  r1=(a1>b1)?0xff:0x0...r15=(a15>b15)?0xff:0x0

2 0