乗算演算子

乗算演算子では、I[s|u]16vec4またはI[s|u]16vec8のいずれかのクラスのデータ型しか演算に使用できません。 また、戻り値もそのいずれかのデータ型になります。 次に例を示します。

乗算演算子の構文の使用

/* Explicitly convert B to Is16vec4 */

Is16vec4 A, C;

Iu32vec2 B;

C = A * C;

C = A * (Is16vec4)B;

/* Return nearest common ancestor type, I16vec4 */

Is16vec4 A;

Iu16vec4 B;

I16vec4 C;

C = A + B;

/* The mul_high and mul_add functions take Is16vec4 data only */

Is16vec4 A,B,C,D;

C = mul_high(A,B);

D = mul_add(A,B);

対応する組込み関数と乗算演算子

操作 記号

 

構文の使用 組込み関数

乗算

*

*=

R = A * B
R *= A

_mm_mullo_pi16
_mm_mullo_epi16

 

 

mul_high

非対応

R = mul_high(A, B)

_mm_mulhi_pi16
_mm_mulhi_epi16

 

mul_add

非対応

R = mul_high(A, B)

_mm_madd_pi16
_mm_madd_epi16

次の表に示すように、この乗算演算子の戻り値は常に、共通する親データ型のうち最も近いデータ型になります。 2個のオペランドのサイズは16ビットでなければなりません。それ以外の場合は、型キャストを明示的に使用する必要があります。

乗算演算子の多重定義

R 乗算 A B

I16vec4 R

*

I[s|u]16vec4 A

I[s|u]16vec4 B

I16vec8 R

*

I[s|u]16vec8 A

I[s|u]16vec8 B

Is16vec4 R

mul_add

Is16vec4 A

Is16vec4 B

Is16vec8

mul_add

Is16vec8 A

Is16vec8 B

Is32vec2 R

mul_high

Is16vec4 A

Is16vec4 B

Is32vec4 R

mul_high

s16vec8 A

Is16vec8 B

次の表は、代入付き乗算演算子を用いた場合の戻り値のデータ型を列挙したものです。オペランドのサイズはすべて16ビットでなければなりません。オペランドのサイズが正しくない場合は、明示的な型キャストを使用する必要があります。

代入付き乗算

戻り値(R) 左辺(R) 乗算 右辺(A)

I[x]16vec8

I[x]16vec8

*=

I[s|u]16vec8 A;

I[x]16vec4

I[x]16vec4

*=

I[s|u]16vec4 A;