浮動小数点ベクトル組込み関数

次の浮動小数点ベクトル組込み関数は、HT テクノロジ インテル® Pentium® 4 プロセッサ (SSE3 対応) 用に設計されたものです。

単精度浮動小数点ベクトル組込み関数

extern __m128 _mm_addsub_ps(__m128 a, __m128 b);

奇数ベクトル要素を加え、偶数ベクトル要素を引きます。
r0 := a0 - b0;

r1 := a1 + b1;

r2 := a2 - b2;

r3 := a3 + b3;

extern __m128 _mm_hadd_ps(__m128 a, __m128 b);

隣接したベクトル要素を加えます。
r0 := a0 + a1;

r1 := a2 + a3;

r2 := b0 + b1;

r3 := b2 + b3;

extern __m128 _mm_hsub_ps(__m128 a, __m128 b);

隣接したベクトル要素を引きます。
r0 := a0 - a1;

r1 := a2 - a3;

r2 := b0 - b1;

r3 := b2 - b3;

extern __m128 _mm_movehdup_ps(__m128 a);

奇数ベクトル要素を偶数ベクトル要素へ複製します。
r0 := a1;

r1 := a1;

r2 := a3;

r3 := a3;

extern __m128 _mm_moveldup_ps(__m128 a);

偶数ベクトル要素を奇数ベクトル要素へ複製します。
r0 := a0;

r1 := a0;

r2 := a2;

r3 := a2;

倍精度浮動小数点ベクトル組込み関数

extern __m128d _mm_addsub_pd(__m128d a, __m128d b);

下位ベクトル要素を引き、上位ベクトル要素を加えます。
r0 := a0 - b0;

r1 := a1 + b1;

extern __m128d _mm_hadd_pd(__m128d a, __m128d b);

隣接したベクトル要素を加えます。
r0 := a0 + a1;

r1 := b0 + b1;

extern __m128d _mm_hsub_pd(__m128d a, __m128d b);

隣接したベクトル要素を引きます。
r0 := a0 - a1;

r1 := b0 - b1;

extern __m128d _mm_loaddup_pd(double const * dp);

double の値を上位と下位ベクトル要素へ複製します。
r0 := *dp;

r1 := *dp;

extern __m128d _mm_movedup_pd(__m128d a);

下位ベクトル要素を上位ベクトル要素へ複製します。
r0 := a0;
r1 := a0;