2

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

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

4

1 回答 1

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 绝对必须在低四字中,那么据我所知,您需要一个 shuffle,这在 pre-Penryn 上较慢(在 Penryn 上,DPPS 解决方案可用)。

于 2012-04-15T17:12:44.060 回答