ロード組み込み関数

ここでは、浮動小数点ロード操作用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組み込み関数について説明します。インテル® SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。

ロード組み込み関数と設定組み込み関数はよく似ており、いずれも __m128d 型のデータを初期化します。しかし、設定組み込み関数は、データを定数で初期化するための関数で、double 引数を使用します。ロード組み込み関数は、メモリーからデータをロードする命令を模倣するための関数で、double ポインター引数を使用します。

各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数の詳細で示します。 各組み込み関数の結果レジスターは R0R1 で示します。R0 および R1 はそれぞれ、結果レジスターの 1 つの部分を表します。

組み込み関数名

演算子

対応するインテル®
SSE2 命令

_mm_load_pd

2 つの倍精度浮動小数点値をロードする

MOVAPD

_mm_load1_pd

1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーする

MOVSD + Shuffling

_mm_loadr_pd

2 つの倍精度浮動小数点値を逆順でロードする

MOVAPD + Shuffling

_mm_loadu_pd

2 つの倍精度浮動小数点値をロードする

MOVUPD

_mm_load_sd

倍精度浮動小数点値をロードして、上位の倍精度浮動小数点値を 0 に設定する 

MOVSD

_mm_loadh_pd

結果の上位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードする

MOVHPD

_mm_loadl_pd

結果の下位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードする

MOVLPD

 

__m128d _mm_load_pd(double const*dp)

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

R0

R1

p[0]

p[1]

 

__m128d _mm_load1_pd(double const*dp)

1 つの倍精度浮動小数点値をロードして、その値を両方の要素にコピーします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。

R0

R1

*p

*p

 

__m128d _mm_loadr_pd(double const*dp)

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

R0

R1

p[1]

p[0]

 

__m128d _mm_loadu_pd(double const*dp)

2 つの倍精度浮動小数点値をロードします。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。

R0

R1

p[0]

p[1]

 

__m128d _mm_load_sd(double const*dp)

1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は 0 に設定されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。

R0

R1

*p

0.0

 

__m128d _mm_loadh_pd(__m128d a, double const*dp)

結果の上位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。下位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。

R0

R1

a0

*p

 

__m128d _mm_loadl_pd(__m128d a, double const*dp)

結果の下位の倍精度浮動小数点値として、1 つの倍精度浮動小数点値をロードします。上位の倍精度浮動小数点値は、a からそのまま渡されます。アドレス p は、16 バイトにアライメントが合っていなくてもかまいません。

R0

R1

*p

a1