17

SSEレジスタの4つのコンポーネントを追加して、単一のフロートを取得したいと思います。これが私が今それをする方法です:

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

これを直接達成するSSE命令はありますか?

4

3 に答える 3

4

SSE3 より前の CPU (_mm_hadd_ps をサポートしていない) でコードを動作させたい場合は、次のコードを使用できます。より多くの命令を使用しますが、ほとんどの CPU でより少ない microops にデコードされます。

 __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)));
于 2011-12-18T06:25:34.280 に答える
3

そのような関数については知りませんが、_mm_hadd_ps() を 2 回使用して実行できます。

于 2011-12-16T15:20:31.847 に答える