本章では、各クラスとそれに関連した処理について説明するときに特殊な用語と構文を用いています。以下で、その説明をします。
クラス名は、データ型、符号の有無、ビット・サイズ、要素数を表現したものです。一般的な形式で表すと次のようになります。
<type><signedness><bits>vec<elements>
{ F | I } { s | u } { 64 | 32 | 16 | 8 } vec { 8 | 4 | 2 | 1 }
各アイテムの意味は次のとおりです。
type |
浮動小数点 ( F ) または整数 ( I ) を示します。 |
signedness |
符号付き ( s ) または符号なし ( u ) を示します。Ivec クラスの場合は、このフィールドが空のままだと中間クラスを表します。符号なしの Fvec クラスはないため、Fvec クラスの場合、このフィールドは空です。 |
bits |
要素あたりのビット数です。 |
elements |
要素の個数です。 |
本書では、各クラスと演算についてその機能と特性を定義するときに次の用語を用いています。
最も近い共通の親クラス: サイズの同じ 2 種類のクラスの中間クラスまたは親クラスです。例えば、Iu8vec8 と Is8vec8 の「最も近い共通の親クラス」は I8vec8 です。同様に、Iu8vec8 と I16vec4 の「最も近い共通の親クラス」は M64 です。
キャスト: クラスのデータ型を変更します。データ型の異なる複数のオペランドを使用して演算を行う場合は、その戻り値を同じ 1 種類のデータ型にする必要があります。したがって、1 種類以上のデータ型を同じ種類の規定のデータ型に変換する必要があります。この変換処理のことを "型キャスト" と言います。型キャストは自動的に行われる場合もありますが、特殊な構文を使用して明示的に行う必要もあります。
演算子の多重定義: 何らかのクラスのデータ型をユーザーが 1 つ定義し、その 1 つのデータ型に対して複数の演算子を利用できる機能です。いったん変数を宣言すれば、加算、減算、乗算はもとより、複数の演算を連続して実行できます。どのクラスファミリーも、規定の範囲の演算子が利用できますが、ヘッダーファイルに定義されている、型キャストと演算子の多重定義に関する規則および制約に従う必要があります。本書では、型キャストや演算子の多重定義などの規則に次の表記を使用しています。
クラス名の表記法
クラス名 |
説明 |
---|---|
I[s|u][N]vec[N] |
I128vec1 以外および I64vec1 以外の任意の値 |
I64vec1 |
__m64 データ型 |
I[s|u]64vec2 |
2 つの 64 ビット値 (符号付き、または符号なし) |
I[s|u]32vec4 |
4 つの 32 ビット値 (符号付き、または符号なし) |
I[s|u]8vec16 |
8 つの 16 ビット値 (符号付き、または符号なし) |
I[s|u]16vec8 |
16 の 8 ビット値 (符号付き、または符号なし) |
I[s|u]32vec2 |
2 つの 32 ビット値 (符号付き、または符号なし) |
I[s|u]16vec4 |
4 つの 16 ビット値 (符号付き、または符号なし) |
I[s|u]8vec8 |
8 つの 8 ビット値 (符号付き、または符号なし) |