次のロード操作組み込み関数とそれに対応する命令は、ストリーミング SIMD 拡張命令 2 (SSE2) をサポートするプロセッサー上で有効です。
ロード組み込み関数と設定組み込み関数はよく似ており、いずれも __m128d 型のデータを初期化します。しかし、設定組み込み関数は、データを定数で初期化するための関数で、double 引数を使用します。ロード組み込み関数は、メモリーからデータをロードする命令を模倣するための関数で、double ポインター引数を使用します。
次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。
各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R0 および R1 は、結果が配置されるレジスターを表します。
SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
サンプルコード Double Complex では、これらの組み込み関数の使用方法を紹介しています。
組み込み関数名 | 操作 | 対応する SSE2 命令 |
---|---|---|
_mm_load_pd | 2 つの倍精度浮動小数点値をロードする | MOVAPD |
_mm_load1_pd | 1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーする | MOVSD + Shuffling |
_mm_loadr_pd | 2 つの倍精度浮動小数点値を逆順でロードする | MOVAPD + Shuffling |
_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 |