論理演算子では、次の表に列挙した記号と組み込み関数を使用します。
ビット単位演算 | 演算子の記号 | 構文の使用方法 | 対応する組み込み関数 | ||
---|---|---|---|---|---|
標準 | 代入付き | 標準 | 代入付き | ||
AND | & | &= | R = A & B | R &= A | _mm_and_si64 _mm_and_si128 |
OR | | | |= | R = A | B | R |= A | _mm_and_si64 _mm_and_si128 |
XOR | ^ | ^= | R = A^B | R ^= A | _mm_and_si64 _mm_and_si128 |
ANDNOT | andnot | N/A | R = A andnot B | N/A | _mm_and_si64 _mm_and_si128 |
A と B を M64 に変換して、結果を Iu8vec8 に割り当てます。
I64vec1 A;
Is8vec8 B;
Iu8vec8 C;
C = A & B;
同じサイズと符号の演算子は、共通の親データ型のうち最も近いデータ型を返します。
I32vec2 R = Is32vec2 A ^ Iu32vec2 B;
A & B は M64 を返します。戻り値は Iu8vec8 にキャストします。
C = Iu8vec8(A&B) + C;
A と B が同じクラスの場合、戻り値はそれと同じ型になります。A と B とが別のクラスの場合、戻り値は、両者に共通する親データ型のうち最も近いデータ型になります。
クラスを複数組み合わせた場合に論理演算子の戻り値がどうなるかを次の表に示します。これは、A と B が別のクラスの場合に適用されるものです。
戻り値 (R) | AND | OR | XOR | NAND | オペランド A | オペランド B |
---|---|---|---|---|---|---|
I64vec1 R | & | | | ^ | andnot | I[s|u]64vec2 A | I[s|u]64vec2 B |
I64vec2 R | & | | | ^ | andnot | I[s|u]64vec2 A | I[s|u]64vec2 B |
I32vec2 R | & | | | ^ | andnot | I[s|u]32vec2 A | I[s|u]32vec2 B |
I32vec4 R | & | | | ^ | andnot | I[s|u]32vec4 A | I[s|u]32vec4 B |
I16vec4 R | & | | | ^ | andnot | I[s|u]16vec4 A | I[s|u]16vec4 B |
I16vec8 R | & | | | ^ | andnot | I[s|u]16vec8 A | I[s|u]16vec8 B |
I8vec8 R | & | | | ^ | andnot | I[s|u]8vec8 A | I[s|u]8vec8 B |
I8vec16 R | & | | | ^ | andnot | I[s|u]8vec16 A | I[s|u]8vec16 B |
代入付き論理演算子の場合は次表のように、戻り値 R は常に、事前に宣言した値 R と同じデータ型になります。
戻り値の型 | 左辺 (R) | AND | OR | XOR | 右辺 (任意の Ivec 型) |
---|---|---|---|---|---|
I128vec1 | I128vec1 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I64vec1 | I64vec1 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I64vec2 | I64vec2 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]32vec4 | I[x]32vec4 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]32vec2 | I[x]32vec2 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]16vec8 | I[x]16vec8 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]16vec4 | I[x]16vec4 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]8vec16 | I[x]8vec16 R | &= | |= | ^= | I[s|u][N]vec[N] A; |
I[x]8vec8 | I[x]8vec8 R | &= | |= | ^= | I[s|u][N]vec[N] A; |