当前位置: 代码迷 >> 汇编语言 >> SSE中给xmm赋值的操作解决方法
  详细解决方案

SSE中给xmm赋值的操作解决方法

热度:3859   发布时间:2013-02-26 00:00:00.0
SSE中给xmm赋值的操作
假如内存中有一DWORD为01 02 03 04,
现需要将xmm0置为:
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04

也就是说,将每个Byte转为Int32,请问SSE中有这样的指令么?
谢谢~

------解决方案--------------------------------------------------------
data1 dd 01020304h
; ...
movd xmm0, dword ptr [data1] ; data1就是dword变量
pxor xmm1,xmm1
punpcklbw xmm0,xmm1
punpcklwd xmm0,xmm1 ; 结果在xmm0中

或者用pshufb指令(SSE3)也可以,但是需要定义一个16字节的mask,用指令生成mask太慢
data1 dd 01020304h
mask1 db 00h, 80h, 80h, 80h, 01h, 80h, 80h, 80h, 02h, 80h, 80h, 80h, 03h, 80h 80h, 80h
; ...
movd xmm0, dword ptr [data1]
movdqu xmm1,[mask1]
pushfb xmm0,xmm1 ; 结果在xmm0中
  相关解决方案