このセクションでは、インテル(R) C++ コンパイラー内でストリーミング SIMD 拡張命令 (SSE) をサポートする、C++ 言語レベルの機能について説明します。これらの機能は、次の 2 種類に分類されます。
浮動小数点組み込み関数 -- 倍精度浮動小数点データ型 (__m128d) に対する、算術演算、論理演算、比較、変換、メモリー操作、初期化を行う組み込み関数について説明します。
整数組み込み関数 -- 拡張精度整数データ型 (__m128i) に対する、算術演算、論理演算、比較、変換、メモリー操作、初期化を行う組み込み関数について説明します。
浮動小数点移動操作の組み込み関数はありません。1 つのレジスターから別のレジストへデータを移動するには、A = B のように単に代入します。A と B は移動操作のソースで対象レジスターです。
SSE2 命令をサポートせず、MMX(R) テクノロジーをサポートするプロセッサーでは、sse2mmx.h エミュレーション・パックを使用して SSE2 命令をサポートすることができます。次のプロセッサーでは、sse2mmx.h ヘッダーファイルを使用することができます。
インテル(R) Itanium(R) プロセッサー
インテル(R) Pentium(R) III プロセッサー
インテル(R) Pentium(R) II プロセッサー
MMX(R) テクノロジー インテル(R) Pentium(R) プロセッサー
一部の組み込み関数は、2 つ以上の命令で実行するため、"複合組み込み関数" と呼ばれます。1 つの命令で実行する組み込み関数は "単一組み込み関数" と呼ばれます。
SSE2 の組み込み関数を使用してプログラムを作成する際は、SSE2 によって提供されるハードウェア機能をよく理解している必要があります。特に、次の 3 つの点に注意してください。
_mm_loadr_pd や _mm_cmpgt_sd などの一部の組み込み関数は、命令セットによって直接にはサポートされていません。これらの組み込み関数は、プログラミング上の便宜のために用意されたものであり、実行時にはコストがかかります。
__m128d オブジェクトとしてロードまたはストアされるデータは、通常は 16 バイトにアライメントが合っていなければなりません。
一部の組み込み関数は、命令の性質上、引数を即値で、すなわち定数整数 (リテラル) で指定する必要があります。
SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
IA-32 アーキテクチャー・ベースの組み込み関数に対して 1 つのヘッダーファイル ia32intrin.h を使用することもできます。