ここでは、浮動小数点ロード操作用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組み込み関数について説明します。インテル® SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
ロード組み込み関数と設定組み込み関数はよく似ており、いずれも __m128d 型のデータを初期化します。しかし、設定組み込み関数は、データを定数で初期化するための関数で、double 引数を使用します。ロード組み込み関数は、メモリーからデータをロードする命令を模倣するための関数で、double ポインター引数を使用します。
各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数の詳細で示します。 各組み込み関数の結果レジスターは R0 と R1 で示します。R0 および R1 はそれぞれ、結果レジスターの 1 つの部分を表します。
組み込み関数名 |
演算子 |
対応するインテル® |
---|---|---|
_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 |