加算演算子と減算演算子

加算演算子と減算演算子は、右辺の各オペランドの符号が揃っていない場合は、共通の親クラスのうち最も近い親クラスを返します。使用例と例外をいくつか次のコードに示します。

加算演算子および減算演算子の構文の使用

/* 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;

加算演算子、減算演算子、およびそれらに対応する組込み関数

操作 記号 構文 対応する組込み関数

加算

+
+=

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;