2011-12-16 32 views
17

我想添加一個SSE寄存器的四個組件來獲得一個浮點數。這就是我要做的事現在:添加一個SSE寄存器的組件

float a[4]; 
_mm_storeu_ps(a, foo128); 
float x = a[0] + a[1] + a[2] + a[3]; 

是否有直接達到這樣的一個SSE指令?

+0

我懷疑存在,但如果這樣做,該指令將可能把結果的128位輸出寄存器的32位區域,而不是在一個32位的寄存器本身。 – 2011-12-16 15:21:23

回答

3

那麼,我不知道任何這樣的功能,但它可以使用_mm_hadd_ps()兩次完成。

4

如果您希望代碼在SSE3之前的CPU(不支持_mm_hadd_ps)上工作,則可以使用以下代碼。它使用更多指令,但在大多數CPU上解碼爲更少的微指令。

__m128 temp = _mm_add_ps(_mm_movehl_ps(foo128, foo128), foo128); 
float x; 
_mm_store_ss(&x, _mm_add_ss(temp, _mm_shuffle_ps(temp, 1)));