SSE指令集系列之二

2022-03-24 01:41:42 字數 1455 閱讀 3049

4. 資料重排指令集

unpckhps xmm,xmm/m128

源儲存器與目的暫存器高64位按雙字交錯排列,結果送入目的暫存器,記憶體變數必須對齊記憶體16位元組.

高64位 | 低64位

目的暫存器:    a0 | a1 | a2 | a3

源儲存器:     b0 | b1 | b2 | b3

目的暫存器結果:  b0 | a0 | b1 | a1

例:當  xmm0 = 0x 0c517e000  44290000 46b6d000 3c4985f0

xmm1 = 0x 045e51000 4240cccd  4a59e540  3a77b9e0,

當執行 unpckhps xmm0,xmm1

則 xmm0 = 0x 045e51000 c517e000 4240cccd 44290000

unpcklps xmm,xmm/m128

源儲存器與目的暫存器低64位按雙字交錯排列,結果送入目的暫存器,記憶體變數必須對齊記憶體16位元組.

高64位 | 低64位

目的暫存器:    a0 | a1  | a2 | a3

源儲存器:       b0 | b1 | b2 | b3

目的暫存器結果:  b2 | a2 | b3 | a3

例:當xmm0 = 0x 0c517e000 44290000 46b6d000 3c4985f0

xmm1 = 0x 045e51000 4240cccd  4a59e540 3a77b9e0,

執行 unpcklps xmm0,xmm1

則 xmm0 = 0x 04a59e540 46b6d000 3a77b9e0 3c4985f0

5. 單精度浮點數與整數相互轉換指令

cvtpi2ps xmm,mm/m64

源儲存器64位兩個32位有符號(補碼)整數轉為兩個單精度浮點數,放入目的暫存器低64中,高64位不變.

源暫存器是'mm',不是'xmm'

cvtsi2ss xmm,r32/m32

源儲存器1個32位有符號(補碼)整數轉為1個單精度浮點數,放入目的暫存器低32中,高96位不變.

cvtps2pi mm,xmm/m64

把源儲存器低64位兩個32位單精度浮點數轉為兩個32位有符號整數,放入目的暫存器.

cvtss2si r32,xmm/m32

把源儲存器低32位1個單精度浮點數轉為1個32位有符號整數,放入目的暫存器.

SSE2指令集系列之二

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

SSE指令集入門

intel公司的單指令多資料流式擴充套件 sse,streaming simd extensions 技術能夠有效增強cpu浮點運算的能力。visual studio net 2003提供了對sse指令集的程式設計支援,從而允許使用者在c 中不用編寫彙編 就可直接使用sse指令的功能。msdn中有關...

SSE3指令集系列

1.資料載入儲存指令 lddquxmm,m128 從非對齊的記憶體位址中載入128位數到xmm暫存器,此條指令比sse2的非對齊載入指令movdqu要快。movddup xmm,xmm m64 載入64bit資料到xmm暫存器的低64位,同時複製到其高64位。movshdup xmm,xmm m12...