Oracle® Developer Studio 12.5: C ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

2.19 Intel MMX および拡張 x86 プラットフォーム組み込み関数のためのコンパイラサポート

mmintrin.h ヘッダーファイル内で宣言されたプロトタイプは Intel MMX 組み込み関数をサポートし、互換性のために提供されています。

表 6に示すように、特定のヘッダーファイルによって追加の拡張プラットフォーム組み込み関数のプロトタイプが提供されます。ほかのシステムヘッダーファイルのように、これらのヘッダーファイルをソースコードにインクルードします。つまり、#include <header> とします。ここで、header.h表 6に示されているファイルのいずれかです。これらのヘッダーファイルの内容を検査するためにその場所を見つけるには、C コンパイラでのコンパイル時に –H フラグを使用します。例:

% cat t.c
#include <xmmintrin.h>
% cc -H t.c -c
/opt/studio/lib/compilers/include/cc/xmmintrin.h
        /opt/studio/lib/compilers/include/cc/sys/xmmintrin.h
                /opt/studio/lib/compilers/include/cc/sys/mmintrin.h
                        /opt/studio/lib/compilers/include/cc/sys/sunmedia_types.h
%
表 6  MMX および拡張 x86 組み込み関数
x86 プラットフォーム
ヘッダーファイル
SSE
mmintrin.h
SSE2
xmmintrin.h
SSE3
pmmintrin.h
SSSE3
tmmintrin.h
SSE4A
ammintrin.h
SSE4.1
smmintrin.h
SSE4.2
nmmintrin.h
AES 暗号化および PCLMULQDQ
wmmintrin.h
AVX、CORE-AVX-I、AVX2
immintrin.h

各ヘッダーファイルは、表内でそれより前にあるプロトタイプをインクルードします。たとえば、SSE4.1 プラットフォーム上で、smmintrin.h をユーザープログラムにインクルードすることで、SSE4.1、SSSE3、SSE3、SSE2、SSE、および MMX プラットフォームをサポートする組み込み関数名を宣言します。この理由は、smmintrin.htmmintrin.h をインクルードし、これは pmmintrin.h をインクルードし、この関係が mmintrin.h まで続くためです。

ammintrin.h は AMD が発行したものであり、Intel 組み込み関数ヘッダーからは一切インクルードされないことに注意してください。ammintrin.hpmmintrin.h をインクルードするため、ammintrin.h をインクルードすれば、すべての AMD SSE4A だけでなく、Intel の SSE3、SSE2、SSE、および MMX 関数も宣言されます。

また、1 つの Oracle Developer Studio ヘッダーファイル sunmedia_intrin.h がすべての Intel ヘッダーファイルの宣言をインクルードしますが、AMD ヘッダーファイル ammintrin.h はインクルードされません。

ホストプラットフォーム (SSE3 など) に配備され、任意のスーパーセット組み込み関数 (AVX についてのものなど) を呼び出すコードは、Oracle Solaris プラットフォームにロードされず、Oracle Linux プラットフォーム上で未定義の動作または正しくない結果が発生し失敗することがあるので注意してください。これらのプラットフォーム固有の組み込み関数を呼び出すプログラムは、それらの関数をサポートするプラットフォームにのみ配備してください。

これらはシステムヘッダーファイルであり、次の例に示すようにプログラムに現れるようにしてください。

#include <nmmintrin.h>

これらの組み込み関数の詳細については、最新の Intel C++ コンパイラリファレンスガイドを参照してください。