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

条件付き選択演算子

条件付き選択演算子の場合は、第 3 および第 4 オペランドによって戻り値のデータ型が決まります。第 3 および第 4 オペランドのサイズが同じで符号が異なる場合、戻り値は共通の親データ型のうち最も近いデータ型になります。

条件付き選択演算子の構文の使用方法

第 3 および第 4 オペランドのサイズが同じで符号が異なる場合、戻り値は共通の親データ型のうち最も近いデータ型になります。

I16vec4 R = select_neq(Is16vec4, Is16vec4, Is16vec4, Iu16vec4);

「等しい」条件付き選択

R0 := (A0 == B0) ? C0 : D0;

R1 := (A1 == B1) ? C1 : D1;

R2 := (A2 == B2) ? C2 : D2;

R3 := (A3 == B3) ? C3 : D3;

「等しくない」条件付き選択

R0 := (A0 != B0) ? C0 : D0;

R1 := (A1 != B1) ? C1 : D1;

R2 := (A2 != B2) ? C2 : D2;

R3 := (A3 != B3) ? C3 : D3;

条件付き選択演算子と対応する組込み関数

条件付き選択の条件

演算

構文

対応する組込み関数

その他の組込み関数 (すべてに適用)

等しい

select_eq

R = select_eq(A, B, C, D)

_mm_cmpeq_pi32
_mm_cmpeq_pi16
_mm_cmpeq_pi8

_mm_and_si64
_mm_or_si64
_mm_andnot_si64

 

 

 

 

 

等しくない

select_neq

R = select_neq(A, B, C, D)

_mm_cmpeq_pi32
_mm_cmpeq_pi16
_mm_cmpeq_pi8

より大きい

select_gt

R = select_gt(A, B, C, D)

_mm_cmpgt_pi32
_mm_cmpgt_pi16
_mm_cmpgt_pi8

以上

select_ge

R = select_gt(A, B, C, D)

_mm_cmpge_pi32
_mm_cmpge_pi16
_mm_cmpge_pi8

より小さい

select_lt

R = select_lt(A, B, C, D)

_mm_cmplt_pi32
_mm_cmplt_pi16
_mm_cmplt_pi8

以下

select_le

R = select_le(A, B, C, D)

_mm_cmple_pi32
_mm_cmple_pi16
_mm_cmple_pi8

条件付き選択演算のオペランドはすべて同じサイズでなければなりません。戻り値のデータ型は、オペランド C および D に共通する親データ型の中でも最も近いデータ型になります。「>」および「<」という比較を用いて条件付き選択演算を行う場合は、第 1 および第 2 オペランドの符号は次の表に従わなければなりません。

条件付き選択演算子の多重定義

R

比較条件

A、B

C

D

I32vec2 R

select_eq
select_ne

I[s|u]32vec2

I[s|u]32vec2

I[s|u]32vec2

I16vec4 R

 

I[s|u]16vec4

I[s|u]16vec4

I8vec8 R

 

I[s|u]8vec8

I[s|u]8vec8

I32vec2 R

select_gt
select_ge
select_lt
select_le

Is32vec2

Is32vec2

Is32vec2

I16vec4 R

 

Is16vec4

Is16vec4

I8vec8 R

 

Is8vec8

Is8vec8

次の表は、任意の要素数に対する R0 から R7 までの戻り値の対応表です。戻り値が 4 つ未満のときも、これと同じ戻り値の対応表を適用します。

条件付き選択演算子の戻り値の対応表

戻り値

オペランド A

使用できる演算子

オペランド B

オペランド C、D

R0:=

A0

==

!=

>

>=

<

<=

B0

C0 : D0;

R1:=

A0

==

!=

>

>=

<

<=

B0

C1 : D1;

R2:=

A0

==

!=

>

>=

<

<=

B0

C2 : D2;

R3:=

A0

==

!=

>

>=

<

<=

B0

C3 : D3;

R4:=

A0

==

!=

>

>=

<

<=

B0

C4 : D4;

R5:=

A0

==

!=

>

>=

<

<=

B0

C5 : D5;

R6:=

A0

==

!=

>

>=

<

<=

B0

C6 : D6;

R7:=

A0

==

!=

>

>=

<

<=

B0

C7 : D7;