SSEレジスタの4つのコンポーネントを追加して、単一のフロートを取得したいと思います。これが私が今それをする方法です:
float a[4];
_mm_storeu_ps(a, foo128);
float x = a[0] + a[1] + a[2] + a[3];
これを直接達成するSSE命令はありますか?
SSEレジスタの4つのコンポーネントを追加して、単一のフロートを取得したいと思います。これが私が今それをする方法です:
float a[4];
_mm_storeu_ps(a, foo128);
float x = a[0] + a[1] + a[2] + a[3];
これを直接達成するSSE命令はありますか?
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)));
そのような関数については知りませんが、_mm_hadd_ps() を 2 回使用して実行できます。