我对组装不是很陌生,尽管 ARM 信息中心通常对您有所帮助,但有时这些说明可能会使新手感到困惑。基本上,我需要做的是在一个四字寄存器中求和4个浮点值,并将结果存储在单个精度寄存器中。我认为VPADD指令可以满足我的需求,但我不太确定。
最佳答案
似乎您想要获得一定长度数组的总和,而不仅仅是四个浮点值。
在这种情况下,您的代码可以运行,但远未优化:
假设数组的长度是8的倍数,并且至少是16:
vldmia {q0-q1}, [pSrc]!
sub count, count, #8
loop:
pld [pSrc, #32]
vldmia {q3-q4}, [pSrc]!
subs count, count, #8
vadd.f32 q0, q0, q3
vadd.f32 q1, q1, q4
bgt loop
vadd.f32 q0, q0, q1
vpadd.f32 d0, d0, d1
vadd.f32 s0, s0, s1
我希望上面的其余代码可以自我解释。
您会注意到此版本比最初的版本快许多倍。
关于math - 使用NEON对ARM汇编中的四字向量中的所有元素求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6931217/