条件付き選択演算子の場合は、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 | |||||||
---|---|---|---|---|---|---|---|---|---|
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; |