我正在使用内在函数来优化我的程序。但现在我想将 __m128 向量中的四个元素相加,以便将结果与浮点值进行比较。例如,假设我有这个 128 位向量:{a, bc, d}。如何将 a+b+c+d 与 e 进行比较,其中 e 的类型为 float ?
SSE2 或 SSE3 是否提供了一种简单的方法,或者您有任何可以帮助我的代码片段吗?谢谢 !
我能做到的最好的是:
; 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 绝对必须在低四字中,那么据我所知,您需要一个 shuffle,这在 pre-Penryn 上较慢(在 Penryn 上,DPPS 解决方案可用)。