インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

ロード組込み関数

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

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

組込み関数名

演算

対応するインテル® 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

_mm_loadh_pi

__m128 _mm_loadh_pi(__m128 a, __m64 const *p);

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

R0

R1

R2

R3

a0

a1

*p0

*p1

_mm_loadl_pi

__m128 _mm_loadl_pi(__m128 a, __m64 const *p);

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

R0

R1

R2

R3

a0

a1

*p0

*p1

R0

R1

R2

R3

*p0

*p1

a2

a3

_mm_load_ss

__m128 _mm_load_ss(float * p);

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

R0

R1

R2

R3

*p

0.0

0.0

0.0

_mm_load1_ps

__m128 _mm_load1_ps(float * p);

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

R0

R1

R2

R3

*p

*p

*p

*p

_mm_load_ps

__m128 _mm_load_ps(float * p);

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

R0

R1

R2

R3

p[0]

p[1]

p[2]

p[3]

_mm_loadu_ps

__m128 _mm_loadu_ps(float * p);

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

R0

R1

R2

R3

p[0]

p[1]

p[2]

p[3]

_mm_loadr_ps

__m128 _mm_loadr_ps(float * p);

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

R0

R1

R2

R3

p[3]

p[2]

p[1]

p[0]