添加SSE寄存器的组件

fre*_*low 17 c++ floating-point sse simd addition

我想添加一个SSE寄存器的四个组件来获得一个浮点数.这是我现在这样做的方式:

float a[4];
_mm_storeu_ps(a, foo128);
float x = a[0] + a[1] + a[2] + a[3];
Run Code Online (Sandbox Code Playgroud)

是否有直接实现此目的的SSE指令?

use*_*136 11

您可以使用HADDPS SSE3指令或其编译器内在_mm_hadd_ps,

例如,请参阅http://msdn.microsoft.com/en-us/library/yd9wecaa(v=vs.80).aspx

如果你有两个寄存器v1和v2:

v = _mm_hadd_ps(v1, v2);
v = _mm_hadd_ps(v, v);
Run Code Online (Sandbox Code Playgroud)

现在,v [0]包含v1组件的总和,v [1]包含v2组件的总和.