首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-02 
SSE中给xmm赋值的操作假如内存中有一DWORD为01 02 03 04,现需要将xmm0置为:00 00 00 0100 00 00 0200 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中

热点排行