ここでは、さまざまな SIMD 演算を実行する演算子、これらの演算子を実行する対応組み込み関数、そして、これらの演算子を実装するクラスを列挙した表を示します。ここにリストされているクラスは、SIMD 演算用のインテル® C++ クラス・ライブラリーに属しています。
次の表では、
N/A は、演算子が特定のクラスには実装されないことを示します。例えば、論理演算子の表では Andnot 演算子は、F32vec4 クラスや F32vec1 クラスには実装されません。
クラス列以下の N/A 以外の項目は、当該演算子が特定のクラスに実装されることを表し、対応する組み込み関数のサフィックスを示します。例えば、算術演算 (1) の表では、対応する組み込み関数が _mm_add_[x] で、項目 epi16 は I16vec8 列にあります。つまり、これは I16vec8 クラスは加算演算子を実装し、対応する組み込み関数は _mm_add_epi16 であるということを意味します。
論理演算子:
|
演算子 |
対応する |
クラス |
||||
|---|---|---|---|---|---|---|
|
I128vec1, |
I64vec1, |
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 |
算術演算: (1)
|
演算子 |
対応する |
クラス |
|||
|---|---|---|---|---|---|
|
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] |
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] |
N/A |
N/A |
N/A |
N/A |
算術演算: (2)
|
演算子 |
対応する |
クラス |
|||||
|---|---|---|---|---|---|---|---|
|
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] |
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] |
N/A |
N/A |
N/A |
pd |
ps |
ss |
シフト演算: (1)
|
演算子 |
対応する |
クラス |
||||
|---|---|---|---|---|---|---|
|
I128vec1 |
I64vec2 |
I32vec4 |
I16vec8 |
I8vec16 |
||
|
>>、>>= |
_mm_srl_[x] |
N/A |
epi64 |
epi32 |
epi16 |
N/A |
|
<<、<<= |
_mm_sll_[x] |
N/A |
epi64 |
epi32 |
epi16 |
N/A |
シフト演算: (2)
|
演算子 |
対応する |
クラス |
|||
|---|---|---|---|---|---|
|
I64vec1 |
I32vec2 |
I16vec4 |
I8vec8 |
||
|
>>、>>= |
_mm_srl_[x] |
si64 |
pi32 |
pi16 |
N/A |
|
<<、<<= |
_mm_sll_[x] |
si64 |
pi32 |
pi16 |
N/A |
比較演算: (1)
|
演算子 |
対応する |
クラス |
|||||
|---|---|---|---|---|---|---|---|
|
I32vec4 |
I16vec8 |
I8vec16 |
I32vec2 |
I16vec4 |
I8vec8 |
||
|
cmpeq |
_mm_cmpeq_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
cmpneq |
_mm_cmpeq_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
cmpgt |
_mm_cmpgt_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
cmpge |
_mm_cmpge_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
cmplt |
_mm_cmplt_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
cmple |
_mm_cmple_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
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 クラスには適用されない点に注意してください。
比較演算: (2)
|
演算子 |
対応する |
クラス |
||
|---|---|---|---|---|
|
F64vec2 |
F32vec4 |
F32vec1 |
||
|
cmpeq |
_mm_cmpeq_[x] |
pd |
ps |
ss |
|
cmpneq |
_mm_cmpeq_[x] |
pd |
ps |
ss |
|
cmpgt |
_mm_cmpgt_[x] |
pd |
ps |
ss |
|
cmpge |
_mm_cmpge_[x] |
pd |
ps |
ss |
|
cmplt |
_mm_cmplt_[x] |
pd |
ps |
ss |
|
cmple |
_mm_cmple_[x] |
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 |
条件付き選択演算: (1)
|
演算子 |
対応する |
クラス |
|||||
|---|---|---|---|---|---|---|---|
|
I32vec4 |
I16vec8 |
I8vec16 |
I32vec2 |
I16vec4 |
I8vec8 |
||
|
select_eq |
_mm_cmpeq_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
select_neq |
_mm_cmpeq_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
select_gt |
_mm_cmpgt_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
select_ge |
_mm_cmpge_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
select_lt |
_mm_cmplt_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
select_le |
_mm_cmple_[x] |
epi32 |
epi16 |
epi8 |
pi32 |
pi16 |
pi8 |
|
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 クラスには適用されない点に注意してください。
条件付き選択演算: (2)
|
演算子 |
対応する |
クラス |
||
|---|---|---|---|---|
|
F64vec2 |
F32vec4 |
F32vec1 |
||
|
select_eq |
_mm_cmpeq_[x] |
pd |
ps |
ss |
|
select_neq |
_mm_cmpeq_[x] |
pd |
ps |
ss |
|
select_gt |
_mm_cmpgt_[x] |
pd |
ps |
ss |
|
select_ge |
_mm_cmpge_[x] |
pd |
ps |
ss |
|
select_lt |
_mm_cmplt_[x] |
pd |
ps |
ss |
|
select_le |
_mm_cmple_[x] |
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 |
パック演算とアンパック演算: (1)
|
演算子 |
対応する |
クラス |
||||
|---|---|---|---|---|---|---|
|
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 |
パック演算とアンパック演算: (2)
|
演算子 |
対応する |
クラス |
||||
|---|---|---|---|---|---|---|
|
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 |