条件付き選択演算子の場合は、3番目と4番目のオペランドによって戻り値のデータ型が決まります。3番目と4番目のオペランドがサイズが同じで符号が異なる場合、戻り値は共通の親データ型のうち最も近いデータ型になります。
/* Return the nearest common ancestor data type if third and fourth operands are of the same size, but different signs */
I16vec4 R = select_neq(Is16vec4, Is16vec4, Is16vec4, Iu16vec4);
/* Conditional Select for Equality */
R0 := (A0 == B0) ? C0 : D0;
R1 := (A1 == B1) ? C1 : D1;
R2 := (A2 == B2) ? C2 : D2;
R3 := (A3 == B3) ? C3 : D3;
/* Conditional Select for Inequality */
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 |
|
より大きい or Equal To |
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 |
|
< or Equal To |
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 | I[s|u]16vec4 |
I8vec8 R |
|
I[s|u]8vec8 | 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 | Is16vec4 |
I8vec8 R |
|
Is8vec8 | Is8vec8 | Is8vec8 |
次の表は、任意の要素数に対するR0からR7までの戻り値の対応表です。戻り値の個数が3個以下のときも、これと同じ戻り値対応表を適用します。
戻り値 | オペランドA、B | オペランドC、D | |||||||
---|---|---|---|---|---|---|---|---|---|
A0 | 使用できる演算子 | B0 | |||||||
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; |