加算演算子と減算演算子は、右辺の各オペランドの符号が揃っていない場合は、共通の親クラスのうち最も近い親クラスを返します。使用方法の例と例外をいくつか次のコードに示します。
共通の親データ型のうち最も近いデータ型 (I16vec4) を返します。
Is16vec4 A;
Iu16vec4 B;
I16vec4 C;
C = A + B;
左辺のオペランドのデータ型を返します。
Is16vec4 A;
Iu16vec4 B;
A += B;
B -= A;
明示的に B を Is16vec4 に変換します。
Is16vec4 A,C;
Iu32vec24 B;
C = A + C;
C = A + (Is16vec4)B;
操作 | 記号 | 構文 | 対応する組み込み関数 |
---|---|---|---|
加算 | + += |
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 |
減算 | - -= |
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 |
次の表は、右辺の各オペランドの符号が異なっている場合に、クラスを複数組み合わせたときの、加算と減算の戻り値を列挙したものです。この 2 つのオペランドは同じサイズでなければなりません。サイズが異なる場合は、型キャストを明示的に示す必要があります。
戻り値 | 使用できる演算子 | 右辺のオペランド | ||
---|---|---|---|---|
R | 加算 | 減算 |
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 |
次の表は、代入付きの加算演算子と減算演算子の各種オペランドについて、戻り値のデータ型を列挙したものです。戻り値のサイズと符号の有無は、左辺のオペランドによって決まります。右辺のオペランドは左辺のオペランドと同じサイズでなければなりません。サイズが異なる場合は、明示的な型キャストを行う必要があります。
戻り値 (R) | 左辺 (R) | 加算 | 減算 | 右辺 (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; |