インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

その他の組込み関数

インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) のその他の組込み関数のプロトタイプは、ヘッダーファイル xmmintrin.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 型のベクトルを返します。

これは、任意の値を返すユーティリティー組込み関数です。

_mm_shuffle_ps

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8);

マスク imm8 に基づいて、ab から 4 つの単精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「シャッフルを行うマクロ関数」を参照してください。

_mm_unpackhi_ps

__m128 _mm_unpackhi_ps(__m128 a, __m128 b);

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

R0

R1

R2

R3

a2

b2

a3

b3

_mm_unpacklo_ps

__m128 _mm_unpacklo_ps(__m128 a, __m128 b);

ab から下位 2 つの単精度浮動小数点値を選択し、インターリーブします。

R0

R1

R2

R3

a0

b0

a1

b1

_mm_move_ss

__m128 _mm_move_ss( __m128 a, __m128 b);

最下位ワードを、b の単精度浮動小数点値に設定します。上位 3 つの単精度浮動小数点値は a からそのまま渡されます。

R0

R1

R2

R3

b0

a1

a2

a3

_mm_movehl_ps

__m128 _mm_movehl_ps(__m128 a, __m128 b);

b の上位 2 つの単精度浮動小数点値を、結果の下位 2 つの単精度浮動小数点値に移動します。a の上位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。

R0

R1

R2

R3

b2

b3

a2

a3

_mm_movelh_ps

__m128 _mm_movelh_ps(__m128 a, __m128 b);

b の下位 2 つの単精度浮動小数点値を、結果の上位 2 つの単精度浮動小数点値に移動します。a の下位 2 つの単精度浮動小数点値は、そのまま結果に渡されます。

R0

R1

R2

R3

a0

a1

b0

b1

_mm_movemask_ps

int _mm_movemask_ps(__m128 a);

4 つの単精度浮動小数点値の最上位ビットを使用して、4 ビット・マスクを作成します。

R

sign(a3)<<3 | sign(a2)<<2 | sign(a1)<<1 | sign(a0)

_mm_undefined_ps

extern __m128 _mm_undefined_ps(void);

4 つの単精度浮動小数点要素のベクトルを返します。ベクトルの内容は、指定されていません。生成されたベクトルは、通常、すべてのオペランドを初期化する必要があり、特定の引数の内容が問題にならない別の組込み関数への引数として使用されます。この組込み関数は、immintrin.h ヘッダーファイルで宣言されています。通常、XMM レジスターの読み取りにマップされ、読み取り時にそのレジスターにある値を取得します。

例えば、このような組込み関数を xmm レジスターにあるパックド倍精度浮動小数点値の合計を計算するのに使用できます。

関連情報