ストリーミング SIMD 拡張命令を使用するその他の組込み関数

ストリーミング SIMD 拡張命令 (SSE) の組込み関数のプロトタイプは、ヘッダファイル 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 に基づいて、ab から 4 つの単精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「ストリーミング SIMD 拡張命令を使用してシャッフルを行うマクロ関数」を参照してください。

__m128 _mm_unpackhi_ps(__m128 a, __m128 b)

ab から上位 2 つの単精度浮動小数点値を選択し、インターリーブ (交互に配置) します。
r0 := a2

r1 := b2

r2 := a3

r3 := b3

__m128 _mm_unpacklo_ps(__m128 a, __m128 b)

ab から下位 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)