ストリーミング SIMD 拡張命令のロード操作

ストリーミング SIMD 拡張命令 (SSE) の組み込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。

次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。

各組み込み関数演算の結果はレジスターに配置されます。ここでは、このレジスターを組み込み関数ごとに R0 から R3 までを使用して示します。結果レジスターの 4 つの 32 ビット部分を、R0、R1、R2、および R3 とそれぞれ表します。

組み込み関数名 操作 対応する SSE
命令
_mm_loadh_pi 上位の値のロード MOVHPS reg, mem
_mm_loadl_pi 下位の値のロード MOVLPS reg, mem
_mm_load_ss 最下位の値をロードして、上位 3 つの値をクリアする MOVSS
_mm_load1_ps 1 つの値を 4 ワードすべてにロードする MOVSS + Shuffling
_mm_load_ps 4 つの値をロードする (アドレスのアライメントが合っていなければなりません) MOVAPS
_mm_loadu_ps 4 つの値をロードする (アドレスのアライメントが合っている必要はありません) MOVUPS
_mm_loadr_ps 4 つの値を逆順でロードする MOVAPS + Shuffling

 

__m128 _mm_loadh_pi(__m128 a, __m64 const *p)

アドレス p からロードされた 64 ビットのデータで、上位 2 つの単精度浮動小数点値を設定します。

R0 R1 R2 R3
a0 a1 *p0 *p1

 

__m128 _mm_loadl_pi(__m128 a, __m64 const *p)

アドレス p からロードされた 64 ビットのデータで、下位 2 つの単精度浮動小数点値を設定します。上位 2 つの値は、a からそのまま渡されます。

R0 R1 R2 R3
*p0 *p1 a2 a3

 

__m128 _mm_load_ss(float * p )

単精度浮動小数点値を最下位ワードにロードし、上位 3 ワードをクリアします。

R0 R1 R2 R3
*p 0.0 0.0 0.0

 

__m128 _mm_load1_ps(float * p )

1 つの単精度浮動小数点値をロードして、その値を 4 ワードすべてにコピーします。

R0 R1 R2 R3
*p *p *p *p

 

__m128 _mm_load_ps(float * p )

4 つの単精度浮動小数点値をロードします。アドレスは 16 バイトにアライメントが合っていなければなりません。

R0 R1 R2 R3
p[0] p[1] p[2] p[3]

 

__m128 _mm_loadu_ps(float * p)

4 つの単精度浮動小数点値をロードします。アドレスは 16 バイトにアライメントが合っている必要はありません。

R0 R1 R2 R3
p[0] p[1] p[2] p[3]

 

__m128 _mm_loadr_ps(float * p)

4 つの単精度浮動小数点値を逆順でロードします。アドレスは 16 バイトにアライメントが合っていなければなりません。

R0 R1 R2 R3
p[3] p[2] p[1] p[0]