SSE2的一些常用指令集介紹

2021-07-10 11:54:32 字數 1173 閱讀 4414

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

__m128i被稱為128bits的整數,對其進行賦值時,可以呼叫__m128i_mm_set1_epi8或者__m128i_mm_set1_epi8

16等,前者就是把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

SSE2指令集系列之一

sse2與sse1使用相同暫存器,指令描述約定 mm指64位mmx暫存器 xmm指128xmm暫存器 m32 指32位記憶體變數 m128指128位記憶體變數 sse2主要是雙精度浮點運算指令 1.資料搬移指令 movapd xmm,xmm m128 movapd xmm m128,xmm 把源儲存...

SSE2指令集系列之二

本小結描述的是sse2整數運算指令。5.資料搬移指令 movdqa xmm,xmm m128 movdqa xmm m128,xmm 把源儲存器內容值送入目的暫存器,當有m128時,記憶體位址必須16位元組對齊.movdqu xmm,xmm m128 movdqu xmm m128,xmm 把源儲存...

SSE2指令集系列之一 浮點運算指令

sse2與sse1使用相同暫存器,指令描述約定 mm指64位mmx暫存器 xmm指128xmm暫存器 m32 指32位記憶體變數 m128指128位記憶體變數 本小結主要描述雙精度浮點運算指令 1.資料搬移指令 movapdxmm,xmm m128 movapdxmm m128,xmm 把源儲存器內...