这是我第一次接触SSE。我正在尝试基于 .double 数组创建两个 SSE 向量,然后相互相乘并将结果存储回其中一个数组。这是代码的重要部分:
.data
counts: .double 1.0,2.0,3.0,4.0
twos: .double 2.0,2.0,2.0,2.0
.text
movupd counts, %xmm7
movupd twos, %xmm6
mulpd %xmm6, %xmm7
movupd %xmm7, counts
但是,这些指令似乎只影响向量的前两个元素。
这是结果:2.0、4.0、3.0、4.0 虽然它应该是:2.0、4.0、6.0、8.0
有人能指出我做错了什么吗?
如果我可以将一个向量乘以一个标量,那当然会容易得多,但我在任何地方都找不到这样做的合适指令。
我正在通过使用以下代码对它们求和来检查这些值(解决这个问题后我的后续任务是什么):
mov $0, %rsi
addsd counts(%rsi), %xmm0
mov $8, %rsi
addsd counts(%rsi), %xmm0
mov $16, %rsi
addsd counts(%rsi), %xmm0
mov $24, %rsi
addsd counts(%rsi), %xmm0
提前感谢您的帮助!
最佳答案
xmm
寄存器只能保存两个 double 值,因此一次只能保存两个。如果您需要一次完成所有四个操作,请使用单个 float 或迁移到 AVX。
关于linux - .double 数组到 sse 向量和对它们的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748620/