ストリーミング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)