乗算演算子では、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; |