如何在XMM中将单个浮点数从内存转移到四个浮点数?

时间:2016-12-11 22:57:56

标签: assembly x86 nasm sse

以下代码旨在将每个打包的单个浮点值除以4:

quarter dd 0.25
...

movups  xmm1, [quarter]
mulps   xmm0, xmm1

但是,它不会执行所需的操作,因为来自[quarter]的数据被视为16字节实体:

(gdb) p $xmm1
$2 = {v4_float = {0.25, 0.00200051093, 7.8472714e-44, 8.40779079e-45}

明显的解决方法是将quarter声明为四个元素数组,但是我很好奇,如果有一些优先传输或复制第一个元素的方法?例如:

movss   xmm1, [quarter]
; some magic kung-fu
mulps   xmm0, xmm1

修改

感谢下面的评论,我最终得到了shufps

movss   xmm1, [quarter]
shufps  xmm1, xmm1, 0     ; broadcast the least significant element
mulps   xmm0, xmm1

0 个答案:

没有答案