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

各種クラスのクイック・リファレンス

ここでは、さまざまな SIMD 演算を実行する演算子、これらの演算子を実行する対応組込み関数、そして、これらの演算子を実装するクラスを列挙した表を示します。 ここにリストされているクラスは、SIMD 演算用のインテル® C++ クラス・ライブラリーに属しています。

次の表では、

論理演算子:

演算子

対応する組込み関数

クラス

I128vec1,

I64vec2,

I32vec4,

I16vec8,

I8vec16

I64vec1,

I32vec2,

I16vec4,

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

算術演算: (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]

_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

算術演算: (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]

_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

シフト演算: (1)

演算子

対応する組込み関数

クラス

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

シフト演算: (2)

演算子

対応する組込み関数

クラス

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

比較演算: (1)

演算子

対応する組込み関数

クラス

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

cmpnlt

_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]

_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

cmpnlt

_mm_cmpnlt_[x]

pd

ps

ss

cmpnle

_mm_cmpnle_[x]

pd

ps

ss

* 組込み関数 _mm_andnot_[y]fvec クラスには適用されない点に注意してください。

条件付き選択演算: (1)

演算子

対応する組込み関数

クラス

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 クラスには適用されない点に注意してください。

条件付き選択演算: (2)

演算子

対応する組込み関数

クラス

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

* 組込み関数 _mm_andnot_[y]fvec クラスには適用されない点に注意してください。

パック演算とアンパック演算: (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