Oracle Developer Studio コンパイラは、SPARC64X や SPARC64X+ が持っている特殊な機能、つまり SIMD データおよび 10 進浮動小数点数をサポートするための組み込み型と組み込み関数を提供しています。
これらの組み込み関数を使用するソースファイルをコンパイルするには、-xarch=[sparcace|sparcaceplus] オプションおよび -m64 オプションを両方指定する必要があります。
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 型データを構築し、オブジェクトを返します。
これは __sparcace_set_m128d() の別名です。
この関数は、unsigned long long 型の数のペアから __m128i 型のデータを構築し、オブジェクトを返します。
これは __sparcace_set_m128i() の別名です。
この関数は、最初のパラメータとして渡された __m128d 型のデータから、倍精度浮動小数点数を抽出します。抽出される値は 2 番目のパラメータによって制御されます。2 番目のパラメータは整数である必要があり、0 または 1 の定数である必要があります。
この関数は、最初のパラメータとして渡された __m128i 型のデータから unsigned long long 型の数を抽出します。抽出される値は 2 番目のパラメータによって制御されます。2 番目のパラメータは整数である必要があり、0 または 1 の定数である必要があります。
これは __sparcace_extract_m128i() の別名です。
この関数は、パラメータとまったく同じビットパターンを持つ __m128i 型の値を返します。
これは __sparcace_cast_m128d_m128i() の別名です。
この関数は、パラメータとまったく同じビットパターンを持つ __m128d 型の値を返します。
これは __sparcace_cast_m128i_m128d() の別名です。
この関数は 2 倍精度除算を順次に実行し、最初のパラメータを 2 番目のパラメータで割った値の __m128d の結果を生成します。
これは __sparcace_fdivd_m128d() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータに対して右または左論理シフトを実行し、それらのフラグメントをマスクしてからそのビット単位の論理和をとって、__m128d の結果を生成します。シフト幅、マスク幅、およびマスクオフセットが 3 番目のパラメータとして指定されます。
この関数は、最初のパラメータと 2 番目のパラメータに対して右または左論理シフトを実行し、それらのフラグメントをマスクしてからそのビット単位の論理和をとって、__m128i の結果を生成します。シフト幅、マスク幅、およびマスクオフセットが 3 番目のパラメータとして指定されます。
この関数は、2 番目のパラメータの対応する浮動小数点数の MSB が 1 である場合、最初のパラメータの各倍精度浮動小数点数を 3 番目のパラメータが指し示す 16 バイトに整列されたアドレスに格納します。それ以外の場合は何もしません。
この関数は、2 番目のパラメータの対応する unsigned long long 型の数値の MSB が 1 である場合、最初のパラメータの各 unsigned long long 型の数値を 3 番目のパラメータが指し示す 16 バイトに整列されたアドレスに格納します。それ以外の場合は何もしません。
この関数は、反転された最初のパラメータと 2 番目のパラメータの間でビット単位の AND 演算を実行して、__m128d の結果を生成します。
この関数は、反転された最初のパラメータと 2 番目のパラメータの間でビット単位の AND 演算を実行して、__m128d の結果を生成します。
これは __sparcace_fandnot1_m128d() の別名です。
この関数は、反転された最初のパラメータと 2 番目のパラメータの間でビット単位の AND 演算を実行して、__m128i の結果を生成します。
これは __sparcace_fandnot1_m128i() の別名です。
これは __sparcace_fandnot1_m128i() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の AND 演算を実行して、a__m128d の結果を生成します。
これは __sparcace_fand_m128d() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の AND 演算を実行して、__m128i の結果を生成します。
これは __sparcace_fand_m128i() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の NAND 演算を実行して、__m128d の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の NAND 演算を実行して、a__m128i の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の NOR 演算を実行して、__m128d の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の NOR 演算を実行して、a__m128i の結果を生成します。
この関数は、最初のパラメータのビット単位の反転演算を実行して、__m128d の結果を生成します。
この関数は、最初のパラメータのビット単位の反転演算を実行して、__m128i の結果を生成します。
この関数は、ビットがすべて 1 である __m128d の結果を生成します。
この関数は、ビットがすべて 1 である __m128i の結果を生成します。
この関数は、反転された最初のパラメータと 2 番目のパラメータの間でビット単位の OR 演算を実行して、__m128d の結果を生成します。
この関数は、反転された最初のパラメータと 2 番目のパラメータの間でビット単位の OR 演算を実行して、__m128i の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の OR 演算を実行して、__m128d の結果を生成します。
これは __sparcace_for_m128d() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の OR 演算を実行して、a__m128i の結果を生成します。
これは __sparcace_for_m128i() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の XNOR 演算を実行して、a__m128d の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の XNOR 演算を実行して、__m128i の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の XOR 演算を実行して、__m128d の結果を生成します。
これは __sparcace_fxor_m128d() の別名です。
この関数は、最初のパラメータと 2 番目のパラメータの間でビット単位の XOR 演算を実行して、__m128i の結果を生成します。
これは __sparcace_fxor_m128i() の別名です。
この関数は、ビットがすべて 0 である __m128d の結果を生成します。
これは __sparcace_fzero_m128d() の別名です。
この関数は、ビットがすべて 0 である __m128i の結果を生成します。
これは __sparcace_fzero_m128i() の別名です。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータに等しい場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータに等しい場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータ以下である場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータより小さい場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータに等しくない場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータに等しくない場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータより大きい場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、最初のパラメータの各倍精度浮動小数点数を 2 番目のパラメータの対応する倍精度浮動小数点数と比較します。最初のパラメータが 2 番目のパラメータ以上である場合は、__m128d の結果の対応する倍精度浮動小数点数のすべてのビットが 1 に設定されます。順序付けされていない場合は、例外が発生します。
この関数は、3 番目のパラメータの MSB に関して、最初のパラメータの各倍精度浮動小数点数または 2 番目のパラメータの各倍精度浮動小数点数をコピーすることによって __m128d の結果を生成します。
この関数は、3 番目のパラメータの MSB に関して、最初のパラメータの各 unsigned long long 型の数値または 2 番目のパラメータの同様の数値をコピーすることによって __m128d の結果を生成します。
この関数は、パラメータの絶対値を持つ __m128d の結果を生成します。
この関数は、加算を実行して __m128d の結果を生成します。
これは __sparcace_faddd_m128d() の別名です。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の倍精度浮動小数点数のペアで (a * b + c) 演算を実行して、__m128d の結果を生成します。
これは __sparcace_fmaddd_m128d() の別名です。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の倍精度浮動小数点数のペアで (a * b - c) を実行して、__m128d の結果を生成します。
これは __sparcace_fmsubd_m128d() の別名です。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の倍精度浮動小数点数のペアで -(a * b - c) を実行して、__m128d の結果を生成します。
これは __sparcace_fnmsubd_m128d() の別名です。注意: これは __sparcace_fnmaddd_m128d() の別名ではありません。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の倍精度浮動小数点数のペアで -(a * b + c) を実行して、__m128d の結果を生成します。
これは __sparcace_fnmaddd_m128d() の別名です。注意: これは __sparcace_fnmsubd_m128() の別名ではありません。
この関数は、最初のパラメータの各倍精度浮動小数点数の最大値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128d の結果を生成します。
これは __sparcace_fmaxd_m128d() の別名です。
この関数は、最初のパラメータの各倍精度浮動小数点数の最小値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128d の結果を生成します。
これは __sparcace_fmind_m128d() の別名です。
この関数は、乗算を実行して __m128d の結果を生成します。
これは __sparcace_fmuld_m128d() の別名です。
この関数は、パラメータの値を否定します。
この関数は、減算を実行して __m128d の結果を生成します。
これは __sparcace_fsubd_m128d() の別名です。
この関数は、__m128i 型パラメータ内の unsigned long long 型の値のペアを __m128d 型の結果内の倍精度浮動小数点数のペアに変換します。
この関数は、__m128d 型の値内の倍精度浮動小数点数のペアを __m128i 型パラメータの型の結果内の unsigned long long のペアに変換します。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の unsigned long long 数値のペアで (a * b + c) 演算を実行し、結果のペアの下位 8 バイトを取って __m128d の結果を生成します。
この関数は、最初のパラメータ、2 番目のパラメータ、および 3 番目のパラメータ内の unsigned long long 数値のペアで (a * b + c) 演算を実行し、結果のペアの上位 8 バイトを取って __m128d の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータ内の倍精度浮動小数点数のペアで -(a - b) 演算を実行して、__m128d の結果を生成します。
この関数は、最初のパラメータと 2 番目のパラメータ内の倍精度浮動小数点数のペアで -(a * b) 演算を実行して、__m128d の結果を生成します。
この関数は、最初のパラメータの各 signed long long 型の数値の最大値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128i の結果を生成します。
この関数は、最初のパラメータの各 signed long long 型の数値の最小値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128i の結果を生成します。
この関数は、最初のパラメータの各 signed long long 型の数値の最小値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128i の結果を生成します。
この関数は、最初のパラメータの各 unsigned long long 型の数値の最小値、または 2 番目のパラメータの同様の数値をコピーすることによって __m128i の結果を生成します。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの unsigned long long 型の数値によって示されているシフト量で左に論理シフトすることによって __m128i の結果を生成します。
これは __sparcace_fpsll64x_m128i() の別名です。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの unsigned long long 型の数値によって示されているシフト量で右に論理シフトすることによって __m128i の結果を生成します。
これは __sparcace_fpsrl64x_m128i() の別名です。
この関数は、最初のパラメータの各 signed long long 型の数値を 2 番目のパラメータの unsigned long long 型の数値によって示されているシフト量で右に算術シフトすることによって __m128i の結果を生成します。
この関数は、最初のパラメータの各 signed long long 型の数値を 2 番目のパラメータの対応する signed long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータ以下である場合は、__m128i の結果の対応する signed long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 signed long long 型の数値を 2 番目のパラメータの対応する signed long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータより大きい場合は、__m128i の結果の対応する signed long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの対応する unsigned long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータ以下である場合は、__m128i の結果の対応する unsigned long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの対応する unsigned long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータに等しくない場合は、__m128i の結果の対応する unsigned long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの対応する unsigned long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータより大きい場合は、__m128i の結果の対応する unsigned long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 unsigned long long 型の数値を 2 番目のパラメータの対応する unsigned long long 型の数値と比較します。最初のパラメータが 2 番目のパラメータに等しい場合は、__m128i の結果の対応する unsigned long long 型の数値の MSB が 1 に設定されます。ビット 0 からビット 62 までは 0 に設定されます。
この関数は、最初のパラメータの各 unsigned long long 型の数値と 2 番目のパラメータの unsigned long long 型の数値を加算することによって __m128i の結果を生成します。
これは __sparcace_fpadd64_m128i() の別名です。
この関数は、最初のパラメータの各 unsigned long long 型の数値から 2 番目のパラメータの unsigned long long 型の数値を減算することによって __m128i の結果を生成します。
これは __sparcace_fpsub64_m128i() の別名です。
SPARC64X および SPARC64X+ は、10 進浮動小数点のデータ型および演算をサポートします。データフォーマットは、IEEE 754-2008 に定義されている 64 ビット DPD に準拠します。コンパイラは、データを処理するための型およびさまざまな関数を提供します。
10 進浮動小数点数を表すために、_Decimal64 組み込み型が dpd_conf.h 内で宣言されます。次の例に示す型を使用する前に、ヘッダーファイルをインクルードする必要があります。
#include <dpd_conf.h> int main(void) { _Decimal64 dd; ... return 0; }
_Decimal64 型
型修飾子 const または volatile、あるいはその両方で変更できます。
ストレージクラス指定子 auto、static、register、extern、および typedef あるいはこれらのいずれかで指定できます。
集合 array、struct、および union あるいはこれらのいずれかの要素とすることができます。
_Decimal64 型変数
関数の仮パラメータとなることができます。
関数呼び出しの実引数となることができます。
関数の戻り値となることができます。
代入演算子「=」の左辺または右辺となることができます。
アドレス演算子「&」のオペランドとなることができます。
sizeof 演算子のオペランドとなることができます。
typeof 演算子のオペランドとなることができます。
組み込み関数は、算術、比較、型の変換などのほかの操作に対して提供されます。
_Decimal64 用のリテラル構文はサポートされていません。型変換用の組み込み関数を代わりに使用できます。
_Decimal64 型のデータのメモリー境界整列は、64 ビットのバイナリ浮動小数点数と同じです。
-xarch=[sparcace|sparcaceplus] および -m64 が指定された場合、__DEC_FP_INTR マクロは 1 に定義されます。このマクロは、コンパイラが 10 進浮動小数点組み込み関数をサポートするかどうかを判別する場合に役立ちます。
dpd_conf.h がインクルードされたとき、IEEE 754-2008 で必要な DEC_EVAL_METHOD マクロは 1 に定義されます。
コンパイラは ISO/IEC TR 24732 に記載されている機能を完全にサポートするわけではないため、__STDC_DEC_FP__ マクロは定義されません。
IEEE 754-2008 で必要な #pragma FLOAT_CONST_DECIMAL_64 はサポートされません。
以下の一覧に示す組み込み関数は、dpd_conf.h で宣言されます。これらは _Decimal64 型の変数を操作する場合に便利です。
この関数は、addr によってアドレス指定されるメモリーに src を保管します。addr は 8 バイト境界に整列されている必要があり、そうでない場合は -xmemalign 設定に関係なく動作は未定義になります。
この関数は、addr によってアドレス指定されるメモリーから _Decimal64 型の値をロードし、これを返します。addr は 8 バイト境界に整列されている必要があり、そうでない場合は -xmemalign 設定に関係なく動作は未定義になります。
この関数は、src1 と src2 を加算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。
この関数は、src1 から src2 を減算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。
この関数は、src1 と src2 を乗算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。
この関数は、src1 を src2 で除算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。
この関数は、src の絶対値を計算して結果を返します。src から NaN のシグナルが生成される場合でも、浮動小数点例外はスローされません。
この関数は、src の符号を逆にして結果を返します。src から NaN のシグナルが生成される場合でも、浮動小数点例外はスローされません。
この関数は、src1 が src2 に等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src1 が src2 に等しくないときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src1 が src2 より大きいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src1 が src2 より大きいか等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src1 が src2 より小さいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src1 が src2 より小さいか等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。
この関数は、src 内の 64 ビット符号付き整数値を 10 進浮動小数点値に変換して結果を返します。
この関数は、src 内の 64 ビット符号なし整数値を 10 進浮動小数点値に変換して結果を返します。
この関数は、src 内の 2 進浮動小数点値を 10 進浮動小数点値に変換して結果を返します。
この関数は、丸め方向が「最近接偶数」に固定されている点を除き、「ISO/IEC TR 24732」で定義されている関数 strtod64() とまったく同様に動作します。
この関数は、src 内の 10 進浮動小数点値を 64 ビット符号付き整数値に変換して結果を返します。
この関数は、src 内の 10 進浮動小数点値を 64 ビット符号なし整数値に変換して結果を返します。
この関数は、src 内の 10 進浮動小数点値を 2 進浮動小数点値に変換して結果を返します。
この関数は、dec を buf でアドレス指定されているメモリーに %He 形式で出力します。精度は dec の係数と同じ長さです。出力文字列は、その文字列が n に等しいか、これより長い場合は (n-1) 番目の文字、それ以外の場合は文字列の最後を null 文字で終了します。この関数は、dec が正常に文字列に変換された場合は buf を、それ以外の場合は null ポインタを返します。
この関数は、dec を buf でアドレス指定されているメモリーに %Hf 形式で出力します。精度は dec の係数と同じ長さです。出力文字列は、その文字列が n に等しいか、これより長い場合は (n-1) 番目の文字、それ以外の場合は文字列の最後を null 文字で終了します。この関数は、dec が正常に文字列に変換された場合は buf を、それ以外の場合は null ポインタを返します。
この関数は、_Decimal64 の現在の丸めモードを取得します。この値は、次のように dpd_conf.h 内で定義されます。
最近接偶数に丸めます
ゼロの方向に丸めます
正の無限の方向に丸めます
負の無限の方向に丸めます
絶対値で四捨五入して最近接値へ丸めます
_Decimal64 の丸めモードの初期値は __DPD_ROUND_NEAREST です。-fround オプションは、_Decimal64 の丸めモードを変更しないことに注意してください。
この関数は、_Decimal64 の丸めモードを r に設定します。r は上記に示されているものである必要があります。成功時は 0、失敗時は非 0 を返します。