SPARC64X および SPARC64X+ によって提供される SIMD データは、double または unsigned long long の値のペアを保持することができます。コンパイラには、これらのデータを処理するためのいくつかの組み込み関数タイプおよび機能があります。
sparcace_types.h ヘッダーファイルで宣言されるプロトタイプは、SPARC64X および SPARC64X+ が提供する次の 2 つの SIMD データ型をサポートします。
倍精度の浮動小数点数のペア
符号付き/符号なし 64 ビット整数のペア
SIMD データ型
集約でなく基本型として処理され、内部構造はありません。データの一部を取得する組み込み関数を使用する必要があります。
型修飾子 const または volatile、あるいはその両方で変更できます。
ストレージクラス指定子 auto、static、register、extern、および typedef あるいはこれらのいずれかで指定できます。
集合 array、struct、および union あるいはこれらのいずれかの要素とすることができます。
SIMD データ型の変数
関数の仮パラメータとなることができます。
関数呼び出しの実引数となることができます。
関数の戻り値となることができます。
代入演算子「=」の左辺または右辺となることができます。
アドレス演算子「&」のオペランドとなることができます。
sizeof 演算子のオペランドとなることができます。
typeof 演算子のオペランドとなることができます。
SIMD データ型に対してリテラル構文はサポートされていません。正しい組み込み関数を使用して SIMD データ型を構築することができます。
最初の 8 つまでの SIMD 引数が浮動小数点レジスタ経由で渡されます。SIMD 引数の最初の半分は、%d0、%d4、%d8、...、%d28 に入ります。SIMD 引数の残り半分は、%d256、%d260、%d264、...、%d284 に入ります。9 つ以上の SIMD 引数がある場合、これらはスタック領域経由で渡されます。
SIMD 戻り値の最初の半分は、%d0 に表示されます。残りの半分は、%d256 に表示されます。
SIMD load(ldd,s)/store(std,s) でロードまたは保管するには、SIMD 型の値を 16 バイトに整列されたアドレスに保管する必要があります。
sparcace_types.h ヘッダーファイル内で宣言される組み込み関数は、次のようになります。
この関数は、倍精度浮動小数点数のペアから __m128d 型データを構築し、オブジェクトを返します。
この関数は、unsigned long long 型の数のペアから __m128i 型のデータを構築し、オブジェクトを返します。
この関数は、最初のパラメータとして渡された __m128d 型のデータから、倍精度浮動小数点数を抽出します。抽出される値は 2 番目のパラメータによって制御されます。2 番目のパラメータは整数である必要があり、0 または 1 の定数である必要があります。
この関数は、最初のパラメータとして渡された __m128i 型のデータから unsigned long long 型の数を抽出します。抽出される値は 2 番目のパラメータによって制御されます。2 番目のパラメータは整数である必要があり、0 または 1 の定数である必要があります。