ここでは、整数ストア操作用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
各組込み関数の詳細には、戻り値を説明した表が含まれています。p は、結果へのアクセスを示します。
組込み関数名
|
演算子
|
対応するインテル® SSE2 命令
|
_mm_stream_si128
|
ストア
|
MOVNTDQ
|
_mm_stream_si32
|
ストア
|
MOVNTI
|
_mm_store_si128
|
ストア
|
MOVDQA
|
_mm_storeu_si128
|
ストア
|
MOVDQU
|
_mm_maskmoveu_si128
|
条件付きストア
|
MASKMOVDQU
|
_mm_storel_epi64
|
最下位のストア
|
MOVQ
|
void _mm_stream_si128(__m128i *p, __m128i a)
a のデータを、キャッシュを介さずに、アドレス p にストアします。
アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。
アドレス p は、16 バイトにアライメントが合っていなければなりません。
void _mm_stream_si32(int *p, int a)
a のデータを、キャッシュを介さずに、アドレス p にストアします。
アドレス p を含むキャッシュラインがすでにキャッシュ内にある場合、キャッシュは更新されます。
void _mm_store_si128(__m128i *p, __m128i b)
128 ビット値をストアします。アドレス p は、16 バイトにアライメントが合っていなければなりません。
void _mm_storeu_si128(__m128i *p, __m128i b)
128 ビット値をストアします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
void _mm_maskmoveu_si128(__m128i d, __m128i n, char *p)
d のバイト要素を、条件付きでアドレス p にストアします。
セレクター n の各バイトの最上位ビットによって、それに対応する d の各バイトがストアされるかどうかが決まります。
アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。
if (n0[7])
|
if (n1[7]
|
...
|
if (n15[7])
|
p[0] := d0
|
p[1] := d1
|
...
|
p[15] := d15
|
void _mm_storel_epi64(__m128i *p, __m128i a)
p で指定された値の下位 64 ビットをストアします。