Compare Operators

The operators described in this section compare the single precision floating-point values of A and B. Comparison between objects of any Fvec class return the same class being compared.

The following table lists the compare operators for the Fvec classes.

Compare Operators and Corresponding Intrinsics

Compare For: Operators Syntax
Equality cmpeq R = cmpeq(A, B)
Inequality cmpneq R = cmpneq(A, B)
Greater Than cmpgt R = cmpgt(A, B)
Greater Than or Equal To cmpge R = cmpge(A, B)
Not Greater Than cmpngt R = cmpngt(A, B)
Not Greater Than or Equal To cmpnge R = cmpnge(A, B)
Less Than cmplt R = cmplt(A, B)
Less Than or Equal To cmple R = cmple(A, B)
Not Less Than cmpnlt R = cmpnlt(A, B)
Not Less Than or Equal To cmpnle R = cmpnle(A, B)

Compare Operators

The mask is set to 0xffffffff for each floating-point value where the comparison is true and 0x00000000 where the comparison is false. The table below shows the return values for each class of the compare operators, which use the syntax described earlier in the Return Value Notation section.

Compare Operator Return Value Mapping

R A0 For Any Operators B If True If False F32vec4 F64vec2 F32vec1
R0:= (A1
!(A1
cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]
B1)
B1)
0xffffffff 0x0000000 X X X
R1:= (A1
!(A1
cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]
B2)
B2)
0xffffffff 0x0000000
 
X X N/A
R2:= (A1
!(A1
cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]
B3)
B3)
0xffffffff 0x0000000
 
X N/A N/A
R3:= A3 cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]
B3)
B3)
0xffffffff 0x0000000
 
X N/A N/A

The table below shows examples for arithmetic operators and intrinsics.

Compare Operations for Fvec Classes

Returns Example Syntax Usage Intrinsic
Compare for Equality
4 floats F32vec4 R = cmpeq(F32vec4 A); _mm_cmpeq_ps
2 doubles F64vec2 R = cmpeq(F64vec2 A); _mm_cmpeq_pd
1 float F32vec1 R = cmpeq(F32vec1 A); _mm_cmpeq_ss
Compare for Inequality
4 floats F32vec4 R = cmpneq(F32vec4 A); _mm_cmpneq_ps
2 doubles F64vec2 R = cmpneq(F64vec2 A); _mm_cmpneq_pd
1 float F32vec1 R = cmpneq(F32vec1 A); _mm_cmpneq_ss
Compare for Less Than
4 floats F32vec4 R = cmplt(F32vec4 A); _mm_cmplt_ps
2 doubles F64vec2 R = cmplt(F64vec2 A); _mm_cmplt_pd
1 float F32vec1 R = cmplt(F32vec1 A); _mm_cmplt_ss
Compare for Less Than or Equal
4 floats F32vec4 R = cmple(F32vec4 A); _mm_cmple_ps
2 doubles F64vec2 R = cmple(F64vec2 A); _mm_cmple_pd
1 float F32vec1 R = cmple(F32vec1 A); _mm_cmple_pd
Compare for Greater Than
4 floats F32vec4 R = cmpgt(F32vec4 A); _mm_cmpgt_ps
2 doubles F64vec2 R = cmpgt(F32vec42 A); _mm_cmpgt_pd
1 float F32vec1 R = cmpgt(F32vec1 A); _mm_cmpgt_ss
Compare for Greater Than or Equal To
4 floats F32vec4 R = cmpge(F32vec4 A); _mm_cmpge_ps
2 doubles F64vec2 R = cmpge(F64vec2 A); _mm_cmpge_pd
1 float F32vec1 R = cmpge(F32vec1 A); _mm_cmpge_ss
Compare for Not Less Than
4 floats F32vec4 R = cmpnlt(F32vec4 A); _mm_cmpnlt_ps
2 doubles F64vec2 R = cmpnlt(F64vec2 A); _mm_cmpnlt_pd
1 float F32vec1 R = cmpnlt(F32vec1 A); _mm_cmpnlt_ss
Compare for Not Less Than or Equal
4 floats F32vec4 R = cmpnle(F32vec4 A); _mm_cmpnle_ps
2 doubles F64vec2 R = cmpnle(F64vec2 A); _mm_cmpnle_pd
1 float F32vec1 R = cmpnle(F32vec1 A); _mm_cmpnle_ss
Compare for Not Greater Than
4 floats F32vec4 R = cmpngt(F32vec4 A); _mm_cmpngt_ps
2 doubles F64vec2 R = cmpngt(F64vec2 A); _mm_cmpngt_pd
1 float F32vec1 R = cmpngt(F32vec1 A); _mm_cmpngt_ss
Compare for Not Greater Than or Equal
4 floats F32vec4 R = cmpnge(F32vec4 A); _mm_cmpnge_ps
2 doubles F64vec2 R = cmpnge(F64vec2 A); _mm_cmpnge_pd
1 float F32vec1 R = cmpnge(F32vec1 A); _mm_cmpnge_ss