この付録には、SIMD 演算用のインテル(R) C++ クラス・ライブラリーのクラスごとに、クラス、機能、および対応する組み込み関数を列挙した表がいくつか記載されています。次の表は、C++ の各 SIMD クラスには実装されていないインテル C++ コンパイラー組み込み関数をすべてリストしたものです。
演算子 | 対応する 組み込み関数 |
I128vec1 I64vec2 I32vec4 I16vec8 I8vec16 |
I64vec I32vec I16vec I8vec8 |
F64vec2 | F32vec4 | F32vec1 |
---|---|---|---|---|---|---|
&, &= | _mm_and_[x] | si128 | si64 | pd | ps | ps |
|、|= | _mm_or_[x] | si128 | si64 | pd | ps | ps |
^、^= | _mm_xor_[x] | si128 | si64 | pd | ps | ps |
Andnot | _mm_andnot_[x] | si128 | si64 | pd | N/A | N/A |
演算子 | 対応する 組み込み関数 |
I64vec2 | I32vec4 | I16vec8 | I8vec16 |
---|---|---|---|---|---|
+、+= | _mm_add_[x] | epi64 | epi32 | epi16 | epi8 |
-、-= | _mm_sub_[x] | epi64 | epi32 | epi16 | epi8 |
*、*= | _mm_mullo_[x] | N/A | N/A | epi16 | N/A |
/、/= | _mm_div_[x] | N/A | N/A | N/A | N/A |
mul_high | _mm_mulhi_[x] | N/A | N/A | epi16 | N/A |
mul_add | _mm_madd_[x] | N/A | N/A | epi16 | N/A |
sqrt | _mm_sqrt_[x] | N/A | N/A | N/A | N/A |
rcp | _mm_rcp_[x] | N/A | N/A | N/A | N/A |
rcp_nr | _mm_rcp_[x] _mm_add_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | N/A |
rsqrt | _mm_rsqrt_[x] | N/A | N/A | N/A | N/A |
rsqrt_nr | _mm_rsqrt_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | N/A |
演算子 | 対応する 組み込み関数 |
I32vec2 | I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
---|---|---|---|---|---|---|---|
+、+= | _mm_add_[x] | pi32 | pi16 | pi8 | pd | ps | ss |
-、-= | _mm_sub_[x] | pi32 | pi16 | pi8 | pd | ps | ss |
*、*= | _mm_mullo_[x] | N/A | pi16 | N/A | pd | ps | ss |
/、/= | _mm_div_[x] | N/A | N/A | N/A | pd | ps | ss |
mul_high | _mm_mulhi_[x] | N/A | pi16 | N/A | N/A | N/A | N/A |
mul_add | _mm_madd_[x] | N/A | pi16 | N/A | N/A | N/A | N/A |
sqrt | _mm_sqrt_[x] | N/A | N/A | N/A | pd | ps | ss |
rcp | _mm_rcp_[x] | N/A | N/A | N/A | pd | ps | ss |
rcp_nr | _mm_rcp_[x] _mm_add_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | pd | ps | ss |
rsqrt | _mm_rsqrt_[x] | N/A | N/A | N/A | pd | ps | ss |
rsqrt_nr | _mm_rsqrt_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | pd | ps | ss |
演算子 | 対応する 組み込み関数 |
I128vec1 | I64vec2 | I32vec4 | I16vec8 | I8vec16 |
---|---|---|---|---|---|---|
>>、>>= | _mm_srl_[x] _mm_srli_[x] _mm_sra__[x] _mm_srai_[x] |
N/A N/A N/A N/A |
epi64 epi64 N/A N/A |
epi32 epi32 epi32 epi32 |
epi16 epi16 epi16 epi16 |
N/A N/A N/A N/A |
<<、<<= | _mm_sll_[x] _mm_slli_[x] |
N/A N/A |
epi64 epi64 |
epi32 epi32 |
epi16 epi16 |
N/A N/A |
演算子 | 対応する 組み込み関数 |
I64vec1 | I32vec2 | I16vec4 | I8vec8 |
---|---|---|---|---|---|
>>、>>= | _mm_srl_[x] _mm_srli_[x] _mm_sra__[x] _mm_srai_[x] |
si64 si64 N/A N/A |
pi32 pi32 pi32 pi32 |
pi16 pi16 pi16 pi16 |
N/A N/A N/A N/A |
<<、<<= | _mm_sll_[x] _mm_slli_[x] |
si64 si64 |
pi32 pi32 |
pi16 pi16 |
N/A N/A |
演算子 | 対応する 組み込み関数 |
I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 |
---|---|---|---|---|---|---|---|
cmpeq | _mm_cmpeq_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 |
cmpneq | _mm_cmpeq_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
cmpgt | _mm_cmpgt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 |
cmpge | _mm_cmpge_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
cmplt | _mm_cmplt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 |
cmple | _mm_cmple_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
cmpngt | _mm_cmpngt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 |
cmpnge | _mm_cmpnge_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
cmnpnlt | _mm_cmpnlt_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
cmpnle | _mm_cmpnle_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
* 組み込み関数 _mm_andnot_[y] は fvec クラスには適用されない点に注意してください。
演算子 | 対応する 組み込み関数 |
F64vec2 | F32vec4 | F32vec1 |
---|---|---|---|---|
cmpeq | _mm_cmpeq_[x] | pd | ps | ss |
cmpneq | _mm_cmpeq_[x] _mm_andnot_[y]* |
pd | ps | ss |
cmpgt | _mm_cmpgt_[x] | pd | ps | ss |
cmpge | _mm_cmpge_[x] _mm_andnot_[y]* |
pd | ps | ss |
cmplt | _mm_cmplt_[x] | pd | ps | ss |
cmple | _mm_cmple_[x] _mm_andnot_[y]* |
pd | ps | ss |
cmpngt | _mm_cmpngt_[x] | pd | ps | ss |
cmpnge | _mm_cmpnge_[x] | pd | ps | ss |
cmnpnlt | _mm_cmpnlt_[x] | pd | ps | ss |
cmpnle | _mm_cmpnle_[x] | pd | ps | ss |
演算子 | 対応する 組み込み関数 |
I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 |
---|---|---|---|---|---|---|---|
select_eq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_neq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_gt | _mm_cmpgt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_ge | _mm_cmpge_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_lt | _mm_cmplt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_le | _mm_cmple_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
select_ngt | _mm_cmpgt_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
select_nge | _mm_cmpge_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
select_nlt | _mm_cmplt_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
select_nle | _mm_cmple_[x] | N/A | N/A | N/A | N/A | N/A | N/A |
* 組み込み関数 _mm_andnot_[y] は fvec クラスには適用されない点に注意してください。
演算子 | 対応する 組み込み関数 |
F64vec2 | F32vec4 | F32vec1 |
---|---|---|---|---|
select_eq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_neq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_gt | _mm_cmpgt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_ge | _mm_cmpge_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_lt | _mm_cmplt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_le | _mm_cmple_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
pd | ps | ss |
select_ngt | _mm_cmpgt_[x] | pd | ps | ss |
select_nge | _mm_cmpge_[x] | pd | ps | ss |
select_nlt | _mm_cmplt_[x] | pd | ps | ss |
select_nle | _mm_cmple_[x] | pd | ps | ss |
演算子 | 対応する 組み込み関数 |
I64vec2 | I32vec4 | I16vec8 | I8vec16 | I32vec2 |
---|---|---|---|---|---|---|
unpack_high | _mm_unpackhi_[x] | epi64 | epi32 | epi16 | epi8 | pi32 |
unpack_low | _mm_unpacklo_[x] | epi64 | epi32 | epi16 | epi8 | pi32 |
pack_sat | _mm_packs_[x] | N/A | epi32 | epi16 | N/A | pi32 |
packu_sat | _mm_packus_[x] | N/A | N/A | epi16 | N/A | N/A |
sat_add | _mm_adds_[x] | N/A | N/A | epi16 | epi8 | N/A |
sat_sub | _mm_subs_[x] | N/A | N/A | epi16 | epi8 | N/A |
演算子 | 対応する 組み込み関数 |
I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
---|---|---|---|---|---|---|
unpack_high | _mm_unpackhi_[x] | pi16 | pi8 | pd | ps | N/A |
unpack_low | _mm_unpacklo_[x] | pi16 | pi8 | pd | ps | N/A |
pack_sat | _mm_packs_[x] | pi16 | N/A | N/A | N/A | N/A |
packu_sat | _mm_packus_[x] | pu16 | N/A | N/A | N/A | N/A |
sat_add | _mm_adds_[x] | pi16 | pi8 | pd | ps | ss |
sat_sub | _mm_subs_[x] | pi16 | pi8 | pi16 | pi8 | pd |
演算子 | 対応する 組み込み関数 |
---|---|
F64vec2ToInt | _mm_cvttsd_si32 |
F32vec4ToF64vec2 | _mm_cvtps_pd |
F64vec2ToF32vec4 | _mm_cvtpd_ps |
IntToF64vec2 | _mm_cvtsi32_sd |
F32vec4ToInt | _mm_cvtt_ss2si |
F32vec4ToIs32vec2 | _mm_cvttps_pi32 |
IntToF32vec4 | _mm_cvtsi32_ss |
Is32vec2ToF32vec4 | _mm_cvtpi32_ps |