Floating-point Store Operations for Streaming SIMD Extensions 2

The following store operation intrinsics and their respective instructions are functional in the Streaming SIMD Extensions 2 (SSE2).

The prototypes for SSE2 intrinsics are in the emmintrin.h header file.

void _mm_store_sd(double *dp, __m128d a)

(uses MOVSD) Stores the lower DP FP value of a. The address dp need not be 16-byte aligned.
*dp := a0

void _mm_store1_pd(double *dp, __m128d a)

(uses MOVAPD + shuffling) Stores the lower DP FP value of a twice. The address dp must be 16-byte aligned.
dp[0] := a0
dp[1] := a0

void _mm_store_pd(double *dp, __m128d a)

(uses MOVAPD) Stores two DP FP values. The address dp must be 16-byte aligned.
dp[0] := a0
dp[1] := a1

void _mm_storeu_pd(double *dp, __m128d a)

(uses MOVUPD) Stores two DP FP values. The address dp need not be 16-byte aligned.
dp[0] := a0
dp[1] := a1

void _mm_storer_pd(double *dp, __m128d a)

(uses MOVAPD + shuffling) Stores two DP FP values in reverse order. The address dp must be 16-byte aligned.
dp[0] := a1
dp[1] := a0

void _mm_storeh_pd(double *dp, __m128d a)

(uses MOVHPD) Stores the upper DP FP value of a.
*dp := a1

void _mm_storel_pd(double *dp, __m128d a)

(uses MOVLPD) Stores the lower DP FP value of a.
*dp := a0