我正在使用内在函数来优化我的程序。但是现在我想对__m128向量中的四个元素求和,以便将结果与浮点值进行比较。例如,假设我有这个128位向量:{a,b c,d}。如何将a + b + c + d与e进行比较,其中e的类型为float?
SSE2或SSE3是否提供了一种简单的方法,或者您是否有任何可以帮助我的代码片段?谢谢!
答案 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解决方案)。