組込み関数を使用するメリット

組込み関数を使用する大きなメリットは、従来のコーディング手法では使用できない重要な機能を利用できることです。組込み関数を使用すれば、アセンブリ言語の代わりに、C の関数呼び出しと変数の構文を使用してコーディングできます。ほとんどの MMX® テクノロジ、ストリーミングSIMD拡張命令およびストリーミングSIMD拡張命令2の組込み関数は、これらの命令を直接使用するCの関数に対応します。これによって、プログラマは、レジスタを管理する必要がなくなり、コンパイラは命令のスケジューリングを最適化できます。

MMX テクノロジ命令の組込み関数とストリーミングSIMD拡張命令の組込み関数では、次の新しい機能を使用します。

ストリーミングSIMD拡張命令2の組込み関数は、IA-32 についてのみ定義されており、Itanium® ベースのシステムについては定義されていません。ストリーミングSIMD拡張命令2は、128ビットデータ(2個の64ビット倍精度浮動小数点値)を操作します。Itanium アーキテクチャでは、ストリーミングSIMD拡張命令2をサポートしていないため、Itanium ベースのシステム上では、ストリーミングSIMD拡張命令2は実行できません。

新しいレジスタ

新しいプロセッサ・アーキテクチャには、新しいレジスタセットが追加されています。MMX 命令は、8個の64ビットレジスタ (mm0mm7) を使用します。これらのレジスタは、浮動小数点スタックレジスタに別名を付けて使用されます。

MMX テクノロジ・レジスタ

ストリーミングSIMD拡張命令レジスタ

ストリーミングSIMD拡張命令レジスタは、8個の128ビットレジスタ(xmm0xmm7)を使用します。

これらの新しいデータレジスタによって、データ要素の並列処理が可能になります。各レジスタが複数のデータ要素を保持できるため、プロセッサは複数のデータ要素を同時に処理できます。このような処理方法は、SIMD (Single Instruction, Multiple Data) 処理と呼ばれます。

新しい拡張命令セットのそれぞれの計算命令とデータ操作命令について、その命令を直接に実行する C 組込み関数を用意しています。これにより、プログラマは、レジスタの管理とアセンブリ言語のプログラミングを行う必要がなくなります。また、コンパイラは、命令のスケジューリングを最適化して、実行ファイルの処理速度を上げられます。

MMX テクノロジ・レジスタと XMM レジスタは、それぞれ MMX テクノロジの組込み関数とストリーミングSIMD拡張命令/ストリーミングSIMD拡張命令2の組込み関数を実行するために、IA-32 プラットフォーム上で使用されるSIMDレジスタです。Itanium ベースのプラットフォーム上では、MMX テクノロジの組込み関数とストリーミングSIMD拡張命令の組込み関数は、64ビット汎用レジスタと、80ビット浮動小数点レジスタの64ビットの仮数部を使用します。

新しいデータ型

組込み関数は、4つの新しい C データ型をオペランドとして使用します。 4つのデータ型は、組込み関数に対するオペランドとして使用される新しいレジスタを表しています。次の表に、プロセッサごとに、これらの新しいデータ型が使用可能かどうかを示します。

新しいデータ型への対応

新しいデータ型 MMX テクノロジ ストリーミングSIMD拡張命令 ストリーミングSIMD拡張命令2 Itanium プロセッサ
__m64 X X X X
__m128 N/A X X X
__m128d N/A N/A X X
__m128i N/A N/A X X

__m64 データ型

__m64データ型は、MMX テクノロジの組込み関数に使用される MMX テクノロジ・レジスタの内容を表します。__m64データ型は、8個の8ビット値、4個の16ビット値、2個の32ビット値、または1個の64ビット値を保持できます。

__m128 データ型

__m128データ型は、ストリーミングSIMD拡張命令の組込み関数に使用するストリーミングSIMD拡張命令レジスタの内容を表します。__m128データ型は、4つの32ビット浮動小数点値を保持できます。

__m128dデータ型は、2つの64ビット浮動小数点値を保持できます。

__m128iデータ型は、16個の8ビット整数値、8個の16ビット整数値、4個の32ビット整数値、または2個の64ビット整数値を保持できます。

コンパイラは、__m128型のローカルデータとグローバル・データのアライメントを、スタック上の16バイト境界に合わせます。integer型、float型、またはdouble型の配列のアライメントを合わせるには、declspec 文を使用します。

新しいデータ型を使用する際のガイドライン

これらの新しいデータ型は、基本的な ANSI C データ型ではありません。このため、次のような使用上の制限があります。