マクロ定義 | |
| #define | F_FPU_EM_MASK 0x003f |
| #define | F_FPU_EM_IM 0x0001 |
| #define | F_FPU_EM_DM 0x0002 |
| #define | F_FPU_EM_ZM 0x0004 |
| #define | F_FPU_EM_OM 0x0008 |
| #define | F_FPU_EM_UM 0x0010 |
| #define | F_FPU_EM_PM 0x0020 |
| #define | F_FPU_FZ_MASK 0x8000 |
| #define | F_FPU_FZ_SAVE 0x0000 |
| #define | F_FPU_FZ_FLUSH 0x8000 |
| #define | F_FPU_RC_MASK 0x0c00 |
| #define | F_FPU_RC_CHOP 0x0c00 |
| #define | F_FPU_RC_UP 0x0800 |
| #define | F_FPU_RC_DOWN 0x0400 |
| #define | F_FPU_RC_NEAR 0x0000 |
| #define | F_FPU_PC_MASK 0x0300 |
| #define | F_FPU_PC_24 0x0000 |
| #define | F_FPU_PC_53 0x0200 |
| #define | F_FPU_PC_64 0x0300 |
関数 | |
| INT FVALGAPI | fnFIE_get_control_x87 (UINT *val) |
| x87 FPUコントロールレジスタ値の取得 | |
| INT FVALGAPI | fnFIE_set_control_x87 (UINT set, UINT mask) |
| x87 FPUコントロールレジスタ値の設定 | |
| INT FVALGAPI | fnFIE_get_control_sse (UINT *val) |
| SSEコントロールレジスタ値の取得 | |
| INT FVALGAPI | fnFIE_set_control_sse (UINT set, UINT mask) |
| SSEコントロールレジスタ値の設定 | |
| #define F_FPU_EM_MASK 0x003f |
mask for exception mask flags
| #define F_FPU_EM_IM 0x0001 |
exception mask : invalid operand
| #define F_FPU_EM_DM 0x0002 |
exception mask : denormal
| #define F_FPU_EM_ZM 0x0004 |
exception mask : zero divide
| #define F_FPU_EM_OM 0x0008 |
exception mask : overflow
| #define F_FPU_EM_UM 0x0010 |
exception mask : underflow
| #define F_FPU_EM_PM 0x0020 |
exception mask : inexact (precision)
| #define F_FPU_FZ_MASK 0x8000 |
mask for denormal control flags
| #define F_FPU_FZ_SAVE 0x0000 |
denormal control flag : save state
| #define F_FPU_FZ_FLUSH 0x8000 |
denormal control flag : flush to zero
| #define F_FPU_RC_MASK 0x0c00 |
mask for rounding control flags
| #define F_FPU_RC_CHOP 0x0c00 |
rounding control flag : round toward zero
| #define F_FPU_RC_UP 0x0800 |
rounding control flag : round up
| #define F_FPU_RC_DOWN 0x0400 |
rounding control flag : round down
| #define F_FPU_RC_NEAR 0x0000 |
rounding control flag : rownd to nearest
| #define F_FPU_PC_MASK 0x0300 |
mask for precision control flags
| #define F_FPU_PC_24 0x0000 |
precision control flag : 24bit
| #define F_FPU_PC_53 0x0200 |
precision control flag : 53bit
| #define F_FPU_PC_64 0x0300 |
precision control flag : 64bit
| INT FVALGAPI fnFIE_get_control_x87 | ( | UINT * | val | ) |
x87 FPUコントロールレジスタ値の取得
x87 FPUコントロールレジスタの値を取得します。 取得される値のビット定義は次のようになります。
[ 0: 5] : EM : exception mask bit0: IM : Invalid Operation bit1: DM : Denormalized Operation bit2: ZM : Zero divide bit3: OM : Overflow bit4: UM : Underflow bit5: PM : Precision [ 7: 6] : reserved [ 9: 8] : PC : Precision Control 00: 24bit 01: reserved 10: 53bit 11: 64bit [11:10] : RC : Rounding Control 00: Round to Nearest 01: Round Down 10: Round Up 11: Round to Zero [15:12] : reserved
| [out] | val | レジスタ値 |
| F_ERR_NONE | 正常終了 | |
| F_ERR_UNSUPPORTED | サポートされていません | |
| F_ERR_INVALID_PARAM | パラメータエラー( val にNULLが渡された) |
| INT FVALGAPI fnFIE_set_control_x87 | ( | UINT | set, | |
| UINT | mask | |||
| ) |
x87 FPUコントロールレジスタ値の設定
x87 FPUコントロールレジスタの値を設定します。 レジスタの値は set にて指定された値のうち mask にて1であるビットの部分のみが更新され、 その他の部分は元の値が維持されます。 設定される値のビット定義は次のようになります。
[ 0: 5] : EM : exception mask bit0: IM : Invalid Operation bit1: DM : Denormalized Operation bit2: ZM : Zero divide bit3: OM : Overflow bit4: UM : Underflow bit5: PM : Precision [ 7: 6] : reserved [ 9: 8] : PC : Precision Control 00: 24bit 01: reserved 10: 53bit 11: 64bit [11:10] : RC : Rounding Control 00: Round to Nearest 01: Round Down 10: Round Up 11: Round to Zero [15:12] : reserved
設定がしやすいように各設定値に対応するマクロが次のように定義されています。
例外マスク設定 F_FPU_EM_MASK 0x003f mask for exception mask flags F_FPU_EM_IM 0x0001 exception mask : invalid operand F_FPU_EM_DM 0x0002 exception mask : denormal F_FPU_EM_ZM 0x0004 exception mask : zero divide F_FPU_EM_OM 0x0008 exception mask : overflow F_FPU_EM_UM 0x0010 exception mask : underflow F_FPU_EM_PM 0x0020 exception mask : inexact (precision)
丸め設定 F_FPU_RC_MASK 0x0c00 mask for rounding control flags F_FPU_RC_CHOP 0x0c00 rounding control flag : round toward zero F_FPU_RC_UP 0x0800 rounding control flag : round up F_FPU_RC_DOWN 0x0400 rounding control flag : round down F_FPU_RC_NEAR 0x0000 rounding control flag : rownd to nearest
精度設定 F_FPU_PC_MASK 0x0300 mask for precision control flags F_FPU_PC_24 0x0000 precision control flag : 24bit F_FPU_PC_53 0x0200 precision control flag : 53bit F_FPU_PC_64 0x0300 precision control flag : 64bit
| [in] | set | レジスタ値 次の値のbit-ORによる組み合わせで指定してください
|
| [in] | mask | 設定マスク 次のマスク値のbit-ORによる組み合わせで指定してください
|
| F_ERR_NONE | 正常終了 | |
| F_ERR_UNSUPPORTED | サポートされていません |
| INT FVALGAPI fnFIE_get_control_sse | ( | UINT * | val | ) |
SSEコントロールレジスタ値の取得
SSE FPUコントロールレジスタの値を取得します。 取得される値のビット定義は次のようになります。
[ 0: 5] : EM : exception mask bit0: IM : Invalid Operation bit1: DM : Denormalized Operation bit2: ZM : Zero divide bit3: OM : Overflow bit4: UM : Underflow bit5: PM : Precision [ 7: 6] : reserved [ 9: 8] : PC : Precision Control 00: 24bit 01: reserved 10: 53bit 11: 64bit [11:10] : RC : Rounding Control 00: Round to Nearest 01: Round Down 10: Round Up 11: Round to Zero [14:12] : reserved [15:15] : zero flush
| [out] | val | レジスタ値 |
| F_ERR_NONE | 正常終了 | |
| F_ERR_UNSUPPORTED | サポートされていません | |
| F_ERR_INVALID_PARAM | パラメータエラー( val にNULLが渡された) |
| INT FVALGAPI fnFIE_set_control_sse | ( | UINT | set, | |
| UINT | mask | |||
| ) |
SSEコントロールレジスタ値の設定
SSE コントロールレジスタの値を設定します。 レジスタの値は set にて指定された値のうち mask にて1であるビットの部分のみが更新され、 その他の部分は元の値が維持されます。 設定される値のビット定義は次のようになります。
[ 0: 5] : EM : exception mask bit0: IM : Invalid Operation bit1: DM : Denormalized Operation bit2: ZM : Zero divide bit3: OM : Overflow bit4: UM : Underflow bit5: PM : Precision [ 7: 6] : reserved [ 9: 8] : PC : Precision Control 00: 24bit 01: reserved 10: 53bit 11: 64bit [11:10] : RC : Rounding Control 00: Round to Nearest 01: Round Down 10: Round Up 11: Round to Zero [14:12] : reserved [15:15] : zero flush
設定がしやすいように各設定値に対応するマクロが次のように定義されています。
例外マスク設定 F_FPU_EM_MASK 0x003f mask for exception mask flags F_FPU_EM_IM 0x0001 exception mask : invalid operand F_FPU_EM_DM 0x0002 exception mask : denormal F_FPU_EM_ZM 0x0004 exception mask : zero divide F_FPU_EM_OM 0x0008 exception mask : overflow F_FPU_EM_UM 0x0010 exception mask : underflow F_FPU_EM_PM 0x0020 exception mask : inexact (precision)
丸め設定 F_FPU_RC_MASK 0x0c00 mask for rounding control flags F_FPU_RC_CHOP 0x0c00 rounding control flag : round toward zero F_FPU_RC_UP 0x0800 rounding control flag : round up F_FPU_RC_DOWN 0x0400 rounding control flag : round down F_FPU_RC_NEAR 0x0000 rounding control flag : rownd to nearest
デノーマル設定 F_FPU_FZ_MASK 0x8000 mask for denormal control flags F_FPU_FZ_SAVE 0x0000 denormal control flag : save state F_FPU_FZ_FLUSH 0x8000 denormal control flag : flush to zero
| [in] | set | レジスタ値 次の値のbit-ORによる組み合わせで指定してください
|
| [in] | mask | 設定マスク 次のマスク値のbit-ORによる組み合わせで指定してください
|
| F_ERR_NONE | 正常終了 | |
| F_ERR_UNSUPPORTED | サポートされていません |