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