ストリーミング SIMD 拡張命令 2 の浮動小数点ロード操作

次のロード操作組込み関数とそれに対応する命令は、ストリーミング SIMD 拡張命令 2 (SSE2) をサポートするプロセッサ上で有効です。

SSE2 の組込み関数のプロトタイプは、ヘッダファイル emmintrin.h 内にあります。

__m128d _mm_load_pd(double const*dp)

(MOVAPD を使用) 2 つの倍精度浮動小数点値をロードします。アドレス p は、16 バイトにアライメントが合っていなければなりません。
r0 := p[0]
r1 := p[1]

__m128d _mm_load1_pd(double const*dp)

(MOVSD とシャッフリングを使用) 1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
r0 := *p
r1 := *p

__m128d _mm_loadr_pd(double const*dp)

(MOVAPD とシャッフリングを使用) 2 つの倍精度浮動小数点値を逆順でロードします。アドレス p は、16 バイトにアライメントが合っていなければなりません。
r0 := p[1]
r1 := p[0]

__m128d _mm_loadu_pd(double const*dp)

(MOVUPD を使用) 2 つの倍精度浮動小数点値をロードします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
r0 := p[0]
r1 := p[1]

__m128d _mm_load_sd(double const*dp)

(MOVSD を使用) 1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は 0 に設定されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
r0 := *p
r1 := 0.0

__m128d _mm_loadh_pd(__m128d a, double const*dp)

(MOVHPD を使用) 結果の上位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。下位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
r0 := a0
r1 := *p

__m128d _mm_loadl_pd(__m128d a, double const*dp)

(MOVLPD を使用) 結果の下位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
r0 := *p
r1 := a1