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

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

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

void _mm_store_sd(double *dp, __m128d a)

(MOVSD を使用) a の下位の倍精度浮動小数点値をストアします。アドレス dp は、16 バイトにアライメントが合っていなくてもかまいません。
*dp := a0

void _mm_store1_pd(double *dp, __m128d a)

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

void _mm_store_pd(double *dp, __m128d a)

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

void _mm_storeu_pd(double *dp, __m128d a)

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

void _mm_storer_pd(double *dp, __m128d a)

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

void _mm_storeh_pd(double *dp, __m128d a)

(MOVHPD を使用) a の上位の倍精度浮動小数点値をストアします。
*dp := a1

void _mm_storel_pd(double *dp, __m128d a)

(MOVLPD を使用) a の下位の倍精度浮動小数点値をストアします。
*dp := a0