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

ストリーミング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に基づいて、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)