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

ロード組込み関数

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

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

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

組込み関数名

演算

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

_mm_load_pd

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

MOVAPD

_mm_load1_pd

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

MOVSD + シャッフル

_mm_loadr_pd

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

MOVAPD + シャッフル

_mm_loadu_pd

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

MOVUPD

_mm_load_sd

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

MOVSD

_mm_loadh_pd

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

MOVHPD

_mm_loadl_pd

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

MOVLPD

_mm_load_pd

__m128d _mm_load_pd(double const*dp);

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

R0

R1

p[0]

p[1]

_mm_load1_pd

__m128d _mm_load1_pd(double const*dp);

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

R0

R1

*p

*p

_mm_loadr_pd

__m128d _mm_loadr_pd(double const*dp);

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

R0

R1

p[1]

p[0]

_mm_loadu_pd

__m128d _mm_loadu_pd(double const*dp);

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

R0

R1

p[0]

p[1]

_mm_load_sd

__m128d _mm_load_sd(double const*dp);

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

R0

R1

*p

0.0

_mm_loadh_pd

__m128d _mm_loadh_pd(__m128d a, double const*dp);

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

R0

R1

a0

*p

_mm_loadl_pd

__m128d _mm_loadl_pd(__m128d a, double const*dp);

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

R0

R1

*p

a1