是否有更快的方法將兩個x86 32位寄存器存儲在一個128位xmm寄存器中?將兩個x86 32位寄存器存儲到128位xmm寄存器中
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
所以,如果EAX是0×12345678和EDX是0×87654321的結果在XMM0必須0x8765432112345678。
謝謝
是否有更快的方法將兩個x86 32位寄存器存儲在一個128位xmm寄存器中?將兩個x86 32位寄存器存儲到128位xmm寄存器中
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
所以,如果EAX是0×12345678和EDX是0×87654321的結果在XMM0必須0x8765432112345678。
謝謝
對於SSE 4.1,您可以使用movd xmm0, eax
/pinsrd xmm0, edx, 1
並按照2條說明操作。
對於較舊的CPU,可以使用2×movd
,然後punpckldq
共3個指令:
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
謝謝。但這是自2007年以來相對較新的擴展集,速度和代碼大小几乎相同。 – 2010-02-09 19:45:43
確定 - 現在已經爲SSE2/SSE3添加了3個指令序列。 – 2010-02-09 21:04:24
超級...這就是我需要的!謝謝。 – 2010-02-09 21:47:13
我不太瞭解MMX,但也許你想要PACKSSDW指令。
的PACKSSDW指令取入源操作數和兩個 雙字 兩個雙字在 目的地操作數,並通過轉換飽和這些 四個符號字。 指令將這四個字 打包在一起並將結果存儲在目標MMX寄存器的 中。
(從http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html)
編輯:我剛剛意識到這些是SSE寄存器。好吧。
編輯:我現在要閉嘴了。
我喜歡xmm寄存器,而不是mmx(64位),因爲它們在使用後不需要'emms'指令。 – 2010-02-09 19:50:20
是的,也許更好的專用寄存器.. – 2010-02-10 01:39:25
+1閉嘴現在:-) – hirschhornsalz 2011-12-14 16:44:56
哇!這是一個很酷的彙編程序...最後我看到的是32位...不知道你可以買一個128位的PC ...:P :) – t0mm13b 2010-02-09 19:07:36
流式SIMD擴展(SSE)是對x86架構的SIMD指令集擴展,由英特爾設計並於1999年推出。 – 2010-02-09 19:22:45
直到SSE指令集版本允許爲止? – PhiS 2010-02-09 21:11:08