SSE2的一些常用指令集介紹

開門見山,前段時間學習OpenCV的FAST算法,中間有很多SSE2的指令集,深受其惑。下面我把學習過程中學到的一些指令集介紹給大家,希望能對大家有所幫助!

__m128i被稱爲128bits的整數,對其進行賦值時,可以調用__m128i_mm_set1_epi8或者__m128i_mm_set1_epi16等,前者就是把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

發佈了9 篇原創文章 · 獲贊 113 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章