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

命名と使用する構文

ほとんどの組込み関数名は、次の表記規則に従います。

_mm_<intrin_op>_<suffix>

次の表は、構文の各項目について説明したものです。

<intrin_op>

組込み関数の基本操作を示します。例えば、加算の場合は add、減算の場合は sub になります。

<suffix>

命令の操作対象となるデータの型を示します。各サフィックスの最初の 1 文字または 2 文字は、データがパックドデータ (p)、拡張パックドデータ (ep)、またはスカラーデータ (s) であることを示します。その他の文字は、次のデータ型を示します。

  • s 単精度浮動小数点値

  • d 倍精度浮動小数点値

  • i128 符号付き 128 ビット整数

  • i64 符号付き 64 ビット整数

  • u64 符号なし 64 ビット整数

  • i32 符号付き 32 ビット整数

  • u32 符号なし 32 ビット整数

  • i16 符号付き 16 ビット整数

  • u16 符号なし 16 ビット整数

  • i8 符号付き 8 ビット整数

  • u8 符号なし 8 ビット整数

変数名を付加した数字は、パックされたオブジェクトの要素を示します。例えば、r0r の最下位ワードです。一部の組込み関数は、2 つ以上の命令で実行するため、"複合組込み関数" と呼ばれます。

パックされた値は、右から左の順序で表現し、最下位の値がスカラー操作に使用されます。次の例について考えてみます。

double a[2] = {1.0, 2.0};
__m128d t = _mm_load_pd(a);

上の操作の結果は、次のそれぞれの操作と同じになります。

__m128d t = _mm_set_pd(2.0, 1.0);
__m128d t = _mm_setr_pd(1.0, 2.0);

つまり、値 t を保持する xmm レジスターは、次のようになります。

"スカラー" 要素は 1. 0 です。一部の組込み関数では、命令の性質上、引数として即値 (定数整数) を指定しなければなりません。