乗算演算子

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

乗算演算子の構文の使用例

明示的に B を Is16vec4 に変換します。

Is16vec4 A,C;

Iu32vec2 B;

C = A * C;

C = A * (Is16vec4)B;

共通の親データ型のうち最も近いデータ型 (I16vec4) を返します。

Is16vec4 A;

Iu16vec4 B;

I16vec4 C;

C = A + B;

mul_high 関数と mul_add 関数では、Is16vec4 データのみ使用できます。

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 N/A R = mul_high(A, B) _mm_mulhi_pi16
_mm_mulhi_epi16
mul_add N/A 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;