インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
乗算演算子では、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 |
_mm_mullo_pi16 |
mul_high |
N/A |
R = mul_high(A, B) |
_mm_mulhi_pi16 |
mul_add |
N/A |
R = mul_high(A, B) |
_mm_madd_pi16 |
次の表に示すように、この乗算演算子の戻り値は常に、共通する親データ型のうち最も近いデータ型になります。2 つのオペランドのサイズは 16 ビットでなければなりません。それ以外の場合は、型キャストを明示的に使用する必要があります。
乗算演算子の多重定義
R |
Mul |
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) |
Mul |
右辺 (A) |
---|---|---|---|
I[x]16vec8 |
I[x]16vec8 |
*= |
I[s|u]16vec8 A; |
I[x]16vec4 |
I[x]16vec4 |
*= |
I[s|u]16vec4 A; |