ほとんどの組込み関数名は、次の表記規則に従います:
_mm_<intrin_op>_<suffix>
<intrin_op> | 組込み関数の基本操作を示します。例えば、加算の場合は add、減算の場合は sub になります。 |
<suffix> | 命令の操作対象となるデータの型を示します。各サフィックスの最初の 1 文字または 2 文字は、データがパックドデータ (p)、拡張パックドデータ (ep)、またはスカラデータ (s) であることを示します。その他の文字は、次のとおりデータ型を示します:
|
変数名を付加した数字は、パックされたオブジェクトの要素を示します。例えば、r0 は r の最下位ワードです。一部の組込み関数は、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 です。一部の組込み関数では、命令の性質上、引数として即値 (定数整数リテラル) を指定しなければなりません。
コードの中で組込み関数を使用するには、次の構文の行を挿入します:
data_type intrinsic_name (parameters)
各項の意味は次のとおりです。
data_type | 戻りデータ型。void、int、__m64、__m128、__m128d、__m128i、__int64 のうちのいずれかです。すべてのインテル® アーキテクチャでサポートする組込み関数は、組込み関数の構文の定義に従って、その他のデータ型を返す場合があります。 |
intrinsic_name | この名前は、実際の命令をインライン展開する代わりに C++ コード内で使用できる関数として機能します。 |
parameters | 各組込み関数が要求するパラメータを表します。 |