インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ここでは、浮動小数点ロード操作用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
ロード組込み関数と設定組込み関数はよく似ており、いずれも __m128d 型のデータを初期化します。しかし、設定組込み関数は、データを定数で初期化するための関数で、double 引数を使用します。ロード組込み関数は、メモリーからデータをロードする命令を模倣するための関数で、double ポインター引数を使用します。
各組込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。各組込み関数の結果レジスターは R0 と R1 で示します。R0 および R1 はそれぞれ、結果レジスターの 1 つの部分を表します。
組込み関数名 |
演算 |
対応するインテル® SSE2 命令 |
---|---|---|
_mm_load_pd | 2 つの倍精度浮動小数点値をロードします。 |
MOVAPD |
_mm_load1_pd | 1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーします。 |
MOVSD + シャッフル |
_mm_loadr_pd | 2 つの倍精度浮動小数点値を逆順でロードします。 |
MOVAPD + シャッフル |
_mm_loadu_pd | 2 つの倍精度浮動小数点値をロードします。 |
MOVUPD |
_mm_load_sd | 倍精度浮動小数点値をロードして、上位の倍精度浮動小数点値を 0 に設定します。 |
MOVSD |
_mm_loadh_pd | 結果の上位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。 |
MOVHPD |
_mm_loadl_pd | 結果の下位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。 |
MOVLPD |
__m128d _mm_load_pd(double const*dp);
2 つの倍精度浮動小数点値をロードします。アドレス p は、16 バイトにアライメントが合っていなければなりません。
R0 |
R1 |
---|---|
p[0] |
p[1] |
__m128d _mm_load1_pd(double const*dp);
1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
R0 |
R1 |
---|---|
*p |
*p |
__m128d _mm_loadr_pd(double const*dp);
2 つの倍精度浮動小数点値を逆順でロードします。アドレス p は、16 バイトにアライメントが合っていなければなりません。
R0 |
R1 |
---|---|
p[1] |
p[0] |
__m128d _mm_loadu_pd(double const*dp);
2 つの倍精度浮動小数点値をロードします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
R0 |
R1 |
---|---|
p[0] |
p[1] |
__m128d _mm_load_sd(double const*dp);
1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は 0 に設定されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
R0 |
R1 |
---|---|
*p |
0.0 |
__m128d _mm_loadh_pd(__m128d a, double const*dp);
結果の上位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。下位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
R0 |
R1 |
---|---|
a0 |
*p |
__m128d _mm_loadl_pd(__m128d a, double const*dp);
結果の下位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
R0 |
R1 |
---|---|
*p |
a1 |