以下代码旨在将每个打包的单个浮点值除以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