ストリーミング SIMD 拡張命令 (SSE) の組み込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。
各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R、R0、R1、R2、R3 は、結果が配置されるレジスターを表します。
次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。
組み込み関数名 | 操作 | 対応する SSE 命令 |
---|---|---|
_mm_shuffle_ps | シャッフル | SHUFPS |
_mm_unpackhi_ps | 上位の値のアンパック | UNPCKHPS |
_mm_unpacklo_ps | 下位の値のアンパック | UNPCKLPS |
_mm_move_ss | 最下位ワードを設定し、上位 3 つの値はそのまま渡す | MOVSS |
_mm_movehl_ps | 上位から下位への移動 | MOVHLPS |
_mm_movelh_ps | 下位から上位への移動 | MOVLHPS |
_mm_movemask_ps | 4 ビット・マスクの作成 | MOVMSKPS |
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)
マスク imm8 に基づいて、a と b から 4 つの単精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「ストリーミング SIMD 拡張命令を使用してシャッフルを行うマクロ関数」を参照してください。
__m128 _mm_unpackhi_ps(__m128 a, __m128 b)
a と b から上位 2 つの単精度浮動小数点値を選択し、インターリーブ (交互に配置) します。
R0 | R1 | R2 | R3 |
---|---|---|---|
a2 | b2 | a3 | b3 |
__m128 _mm_unpacklo_ps(__m128 a, __m128 b)
a と b から下位 2 つの単精度浮動小数点値を選択し、インターリーブします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 | b0 | a1 | b1 |
__m128 _mm_move_ss( __m128 a, __m128 b)
最下位ワードを、b の単精度浮動小数点値に設定します。上位 3 つの単精度浮動小数点値は a からそのまま渡されます。
R0 | R1 | R2 | R3 |
---|---|---|---|
b0 | a1 | a2 | a3 |
__m128 _mm_movehl_ps(__m128 a, __m128 b)
b の上位 2 つの単精度浮動小数点値を、結果の下位 2 つの単精度浮動小数点値に移動します。a の上位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。
R0 | R1 | R2 | R3 |
---|---|---|---|
b2 | b3 | a2 | a3 |
__m128 _mm_movelh_ps(__m128 a, __m128 b)
b の下位 2 つの単精度浮動小数点値を、結果の上位 2 つの単精度浮動小数点値に移動します。a の下位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 | a1 | b0 | b1 |
int _mm_movemask_ps(__m128 a)
4 つの単精度浮動小数点値の最上位ビットを使用して、4 ビット・マスクを作成します。
R |
---|
sign(a3)<<3 | sign(a2)<<2 | sign(a1)<<1 | sign(a0) |