Addition and Subtraction Operators
The addition and subtraction operators return the
class of the nearest common ancestor when the right-side operands are of
different signs. The following code provides examples of usage and
miscellaneous exceptions.
Syntax Usage for
Addition and Subtraction Operators
Return nearest common ancestor type,
I16vec4
.
Is16vec4
A;
Iu16vec4
B;
I16vec4
C;
C = A +
B;
Returns type left-hand operand type.
Is16vec4
A;
Iu16vec4
B;
A +=
B;
B -=
A;
Explicitly convert
B
to
Is16vec4
.
Is16vec4
A,C;
Iu32vec24
B;
C = A +
C;
C = A +
(Is16vec4)B;
Addition and
Subtraction Operators with Corresponding Intrinsics
Operation
| Symbols
| Syntax
| Corresponding Intrinsics
|
---|---|---|---|
Addition
| + += | R =
A + B R += A | _mm_add_epi64 _mm_add_epi32 _mm_add_epi16 _mm_add_epi8 _mm_add_pi32 _mm_add_pi16 _mm_add_pi8 |
Subtraction
| - -= | R =
A - B R -= A | _mm_sub_epi64 _mm_sub_epi32 _mm_sub_epi16 _mm_sub_epi8 _mm_sub_pi32 _mm_sub_pi16 _mm_sub_pi8 |
The following table lists addition and subtraction
return values for combinations of classes when the right side operands are of
different signedness. The two operands must be the same size, otherwise you
must explicitly indicate the typecasting.
Addition and
Subtraction Operator Overloading
Return Value
| Available Operators
| Right Side Operands
| ||
---|---|---|---|---|
R
| Add
| Sub
| A
| B
|
I64vec2
R | + | - | I[s|u]64vec2 A | I[s|u]64vec2 B |
I32vec4
R | + | - | I[s|u]32vec4 A | I[s|u]32vec4 B |
I32vec2
R | + | - | I[s|u]32vec2 A | I[s|u]32vec2 B |
I16vec8
R | + | - | I[s|u]16vec8 A | I[s|u]16vec8 B |
I16vec4
R | + | - | I[s|u]16vec4 A | I[s|u]16vec4 B |
I8vec8
R | + | - | I[s|u]8vec8 A | I[s|u]8vec8 B |
I8vec16
R | + | - | I[s|u]8vec2 A | I[s|u]8vec16 B |
The following table shows the return data type values
for operands of the addition and subtraction operators with assignment. The
left side operand determines the size and signedness of the return value. The
right side operand must be the same size as the left operand; otherwise, you
must use an explicit typecast.
Addition and
Subtraction with Assignment
Return Value ( R )
| Left Side ( R )
| Add
| Sub
| Right Side (A)
|
---|---|---|---|---|
I[x]32vec4 | I[x]32vec2 R | += | -= | I[s|u]32vec4 A; |
I[x]32vec2 R | I[x]32vec2 R | += | -= | I[s|u]32vec2 A; |
I[x]16vec8 | I[x]16vec8 | += | -= | I[s|u]16vec8 A; |
I[x]16vec4 | I[x]16vec4 | += | -= | I[s|u]16vec4 A; |
I[x]8vec16 | I[x]8vec16 | += | -= | I[s|u]8vec16 A; |
I[x]8vec8 | I[x]8vec8 | += | -= | I[s|u]8vec8 A; |