「=」および「≠」の比較については、オペランドは符号が異なっていてもかまいませんが、サイズは同じでなければなりません。「<」および「>」の比較については、オペランドは符号もサイズも同じでなければなりません。
/* The nearest common ancestor is returned for compare for equal/not-equal operations */
Iu8vec8 A;
Is8vec8 B;
I8vec8 C;
C = cmpneq(A,B);
/* Type cast needed for different-sized elements for equal/not-equal comparisons */
Iu8vec8 A, C;
Is16vec4 B;
C = cmpeq(A,(Iu8vec8)B);
/* Type cast needed for sign or size differences for less-than and greater-than comparisons */
Iu16vec4 A;
Is16vec4 B, C;
C = cmpge((Is16vec4)A,B);
C = cmpgt(B,C);
比較の条件 | 演算子 | 構文 | 組込み関数 | |
---|---|---|---|---|
等しい | cmpeq | R = cmpeq(A, B) | _mm_cmpeq_pi32 _mm_cmpeq_pi16 _mm_cmpeq_pi8 |
|
等しくない | cmpneq | R = cmpneq(A, B) | _mm_cmpeq_pi32 _mm_cmpeq_pi16 _mm_cmpeq_pi8 |
_mm_andnot_si64 |
より大きい | cmpgt | R = cmpgt(A, B) | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 |
|
以上 |
cmpge | R = cmpge(A, B) | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 |
_mm_andnot_si64 |
より小さい | cmplt | R = cmplt(A, B) | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 |
|
以下 |
cmple | R = cmple(A, B) | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 |
_mm_andnot_si64 |
比較演算子のオペランドは、そのサイズも符号も、次の「比較演算子の多重定義」の表に従っていなければなりません。
R | 比較条件 | A | B |
---|---|---|---|
I32vec2 R | cmpeq cmpne |
I[s|u]32vec2 B | I[s|u]32vec2 B |
I16vec4 R |
|
I[s|u]16vec4 B | I[s|u]16vec4 B |
I8vec8 R |
|
I[s|u]8vec8 B | I[s|u]8vec8 B |
I32vec2 R | cmpgt cmpge cmplt cmple |
Is32vec2 B | Is32vec2 B |
I16vec4 R |
|
Is16vec4 B | Is16vec4 B |
I8vec8 R |
|
Is8vec8 B | Is8vec8 B |