Store Operations for Streaming SIMD Extensions 2

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

void _mm_store_si128 ( __m128i *p, __m128i a)

(uses MOVDQA)

Stores 128-bit value. Address p must be 16 byte aligned.

*p := a

 

void _mm_storeu_si128 ( __m128i *p, __m128i a)

(uses MOVDQU)

Stores 128-bit value. Address p need not be 16-byte aligned.

*p := a

 

void _mm_maskmoveu_si128( __m128i d, __m128i n, char *p)

(uses MASKMOVDQU)

Conditionally store byte elements of d to address p. The high bit of each byte in the selector n determines whether the corresponding byte in d will be stored. Address p need not be 16-byte aligned.

if (n0[7]) p[0] := d0

if (n1[7]) p[1] := d1

...

if (n15[7]) p[15] := d15

 

void _mm_storel_epi64(__m128i *p, __m128i a)

(uses MOVQ)

Stores the lower 64 bits of the value pointed to by p.

*p[63:0]:=a0