インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) のその他の組込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.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 |
_mm_undefined_ps |
要素が未定義の __m128 型のベクトルを返します。 |
これは、任意の値を返すユーティリティー組込み関数です。 |
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8);
マスク imm8 に基づいて、a と b から 4 つの単精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「シャッフルを行うマクロ関数」を参照してください。
__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) |
extern __m128 _mm_undefined_ps(void);
4 つの単精度浮動小数点要素のベクトルを返します。ベクトルの内容は、指定されていません。生成されたベクトルは、通常、すべてのオペランドを初期化する必要があり、特定の引数の内容が問題にならない別の組込み関数への引数として使用されます。この組込み関数は、immintrin.h ヘッダーファイルで宣言されています。通常、XMM レジスターの読み取りにマップされ、読み取り時にそのレジスターにある値を取得します。
例えば、このような組込み関数を xmm レジスターにあるパックド倍精度浮動小数点値の合計を計算するのに使用できます。