インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
ロード操作用のインテル® ストリーミング SIMD 拡張命令 (インテル® SSE) の組込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.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 |
__m128 _mm_loadh_pi(__m128 a, __m64 const *p);
アドレス p からロードされた 64 ビットのデータで、上位 2 つの単精度浮動小数点値を設定します。下位 2 つの値は、a からそのまま渡されます。
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 |
---|---|---|---|
a0 |
a1 |
*p0 |
*p1 |
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] |