インテル® C++ コンパイラー 18.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