乗算演算子では、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 |
_mm_mullo_pi16 |
|
|
mul_high |
非対応 |
R = mul_high(A, B) |
_mm_mulhi_pi16 | |
|
mul_add |
非対応 |
R = mul_high(A, B) |
_mm_madd_pi16 |
次の表に示すように、この乗算演算子の戻り値は常に、共通する親データ型のうち最も近いデータ型になります。 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; |