# Comparison Operators

The equality and inequality comparison operands can have mixed signedness, but they must be of the same size. The comparison operators for less-than and greater-than must be of the same sign and size.

Example of Syntax Usage for Comparison Operator

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);`

Inequality Comparison Symbols and Corresponding Intrinsics

Compare For: | Operators | Syntax | Intrinsic
--- | --- | --- | ---
Equality | cmpeq | `R = cmpeq(A, B)` | _mm_cmpeq_pi32 _mm_cmpeq_pi16 _mm_cmpeq_pi8
Inequality | cmpneq | `R = cmpneq(A, B)` | _mm_cmpeq_pi32 _mm_cmpeq_pi16 _mm_cmpeq_pi8 _mm_andnot_si64
Greater Than | cmpgt | `R = cmpgt(A, B)` | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8
Greater Than or Equal To | cmpge | `R = cmpge(A, B)` | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 _mm_andnot_si64
Less Than | cmplt | `R = cmplt(A, B)` | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8
Less Than or Equal To | cmple | `R = cmple(A, B)` | _mm_cmpgt_pi32 _mm_cmpgt_pi16 _mm_cmpgt_pi8 _mm_andnot_si64

Comparison operators have the restriction that the operands must be the size and sign as listed in the Compare Operator Overloading table.

Compare Operator Overloading

R | Comparison | 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

Parent topic: Integer Vector Classes