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

組込み関数の詳細

すべての命令は、次のものを使用します。

レジスター

インテル® プロセッサーは、命令ごとに特別なレジスターセットを用意しています。

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

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

データ型

組込み関数は、新しい C データ型をオペランドとして使用します。これらのデータ型は、組込み関数に対するオペランドとして使用される新しいレジスターを表しています。

次の表に、各命令でサポートされる新しいデータ型を示します。組込み関数グループでデータ型を使用できる場合は ○ が、使用できない場合は X が表示されています。

データ型 -->

組込み関数グループ

__m64

__m128

__m128d

__m128i

__m256 __m256d __m256i
インテル® MMX® テクノロジーの組込み関数

X

X

X

X

X

X

インテル® SSE の組込み関数

X

X

X

X

X

インテル® SSE2 の組込み関数

X

X

X

インテル® SSE3 の組込み関数

X

X

X

AES + キャリーなし乗算

X

X

X

Half Float 型

X

X

X

インテル® AVX の組込み関数

__m64 データ型

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

__m128 データ型

__m128 データ型は、インテル® SSE 組込み関数に使用するインテル® SSE レジスターの内容を表します。

通常、__m128 データ型は 4 個の 32 ビット浮動小数点値、__m128d データ型は 2 個の 64 ビット浮動小数点値、__m128i データ型は 16 個の 8 ビット整数値、8 個の 16 ビット整数値、4 個の 32 ビット整数値、または 2 個の 64 ビット整数値を保持できます。

コンパイラーは、__m128d 型および _m128i 型のローカルデータとグローバルデータのアライメントを、スタック上の 16 バイト境界に合わせます。 integer 型、float 型、または double 型の配列のアライメントを合わせるには、__declspec(align) 文を使用します。

__m128i データへのアクセス

IA-32 およびインテル® 64 アーキテクチャー・ベースのシステムで 8 ビット・データにアクセスするには、次のように mm_extract 組込み関数を使用します。

#define _mm_extract_epi8(x, imm) \ 
((((imm) & 0x1) == 0) ?   \ 
_mm_extract_epi16((x), (imm) >> 1) & 0xff : \ 
_mm_extract_epi16(_mm_srli_epi16((x), 8), (imm) >> 1))

16 ビット・データにアクセスするには:

int _mm_extract_epi16(__m128i a, int imm)

32 ビット・データにアクセスするには:

#define _mm_extract_epi32(x, imm) \ 
_mm_cvtsi128_si32(_mm_srli_si128((x), 4 * (imm)))

64 ビット・データ (インテル® 64 アーキテクチャーのみ) にアクセスするには:

#define _mm_extract_epi64(x, imm) \ 
_mm_cvtsi128_si64(_mm_srli_si128((x), 8 * (imm)))

__m256 データ型

__m256 データ型は、拡張 SSE レジスター (インテル® AVX 組込み関数で使用される YMM レジスター) の内容を表します。

通常、__m256 データ型は 8 個の 32 ビット浮動小数点値、__m256d データ型は 4 個の 64 ビット倍精度浮動小数点値、__m256i データ型は 32 個の 8 ビット整数値、16 個の 16 ビット整数値、8 個の 32 ビット整数値、または 4 個の 64 ビット整数値を保持できます。 詳細は、「インテル® アドバンスト・ベクトル・エクステンション (インテル® AVX) 組込み関数の詳細」を参照してください。

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

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

関連情報