ストリーミング SIMD 拡張命令の組込み関数のプロトタイプは、ヘッダファイル xmmintrin.h 内にあります。
組込み関数 の名前 |
操作 | 対応する 命令 |
---|---|---|
_mm_shuffle_ps | シャッフル | SHUFPS |
_mm_unpackhi_ps | 上位の値のアンパック | UNPCKHPS |
_mm_unpacklo_ps | 下位の値のアンパック | UNPCKLPS |
_mm_loadh_pi | 上位の値のロード | MOVHPS reg, mem |
_mm_storeh_pi | 上位の値のストア | MOVHPS mem, reg |
_mm_movehl_ps | 上位から下位への移動 | MOVHLPS |
_mm_movelh_ps | 下位から上位への移動 | MOVLHPS |
_mm_loadl_pi | 下位の値のロード | MOVLPS reg, mem |
_mm_storel_pi | 下位の値のストア | MOVLPS mem, reg |
_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 := a2
r1 := b2
r2 := a3
r3 := b3
__m128 _mm_unpacklo_ps(__m128 a, __m128 b)
a と b から下位 2 つの単精度浮動小数点値を選択し、インターリーブします。
r0 := a0
r1 := b0
r2 := a1
r3 := b1
__m128 _mm_loadh_pi(__m128, __m64 const *p)
アドレス p からロードされた 64 ビットのデータで、上位 2 つの単精度浮動小数点値を設定します。
r0 := a0
r1 := a1
r2 := *p0
r3 := *p1
void _mm_storeh_pi(__m64 *p, __m128 a)
a の上位 2 つの単精度浮動小数点値を、アドレス p にストアします。
*p0 := a2
*p1 := a3
__m128 _mm_movehl_ps(__m128 a, __m128 b)
b の上位 2 つの単精度浮動小数点値を、結果の下位 2 つの単精度浮動小数点値に移動します。a の上位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。
r3 := a3
r2 := a2
r1 := b3
r0 := b2
__m128 _mm_movelh_ps(__m128 a, __m128 b)
b の下位 2 つの単精度浮動小数点値を、結果の上位 2 つの単精度浮動小数点値に移動します。a の下位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。
r3 := b1
r2 := b0
r1 := a1
r0 := a0
__m128 _mm_loadl_pi(__m128 a, __m64 const *p)
アドレス p からロードされた 64 ビットのデータで、下位 2 つの単精度浮動小数点値を設定します。上位 2 つの値は、a からそのまま渡されます。
r0 := *p0
r1 := *p1
r2 := a2
r3 := a3
void _mm_storel_pi(__m64 *p, __m128 a)
a の下位 2 つの単精度浮動小数点値を、アドレス p にストアします。
*p0 := a0
*p1 := a1
int _mm_movemask_ps(__m128 a)
4 つの単精度浮動小数点値の最上位ビットを使用して、4 ビットマスクを作成します。
r := sign(a3)<<3 | sign(a2)<<2 | sign(a1)<<1 | sign(a0)