_m128向量的四个32位元素的总和

时间:2012-04-15 16:05:58

标签: sum simd sse2 sse3

我正在使用内在函数来优化我的程序。但是现在我想对__m128向量中的四个元素求和,以便将结果与浮点值进行比较。例如,假设我有这个128位向量:{a,b c,d}。如何将a + b + c + d与e进行比较,其中e的类型为float?

SSE2或SSE3是否提供了一种简单的方法,或者您是否有任何可以帮助我的代码片段?谢谢!

1 个答案:

答案 0 :(得分:1)

我能做到的最好的就是:

; assumes    xmm0 = [0, B, 0, A] or similar
mulps xmm0,xmm0   ; [0, B*B, 0, A*A]
xorps xmm1,xmm1
movhlps xmm1,xmm0 ; [0, 0, 0, B * B]
addps xmm0,xmm1   ; [0, 0, 0, A * A + B * B]

如果A和B绝对必须处于低四字形中,那么据我所知,你需要一个随机播放,这在Penryn之前速度较慢(并且在Penryn上可以使用DPPS解决方案)。