CPU/FPU制御
[低レベル処理関数]


マクロ定義

#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
	

注意:
IA32/x64 CPUで無い場合、本関数は F_ERR_UNSUPPORTED エラーを返します。
引数:
[out] val レジスタ値
戻り値:
F_ERR_NONE 正常終了
F_ERR_UNSUPPORTED サポートされていません
F_ERR_INVALID_PARAM パラメータエラー( val にNULLが渡された)
参照:
fnFIE_set_control_x87() fnFIE_get_control_sse()

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
	

注意:
IA32/x64 CPUで無い場合、本関数は F_ERR_UNSUPPORTED エラーを返します。
引数:
[in] set レジスタ値
次の値のbit-ORによる組み合わせで指定してください
  • F_FPU_EM_IM
  • F_FPU_EM_DM
  • F_FPU_EM_ZM
  • F_FPU_EM_OM
  • F_FPU_EM_UM
  • F_FPU_EM_PM
  • F_FPU_RC_CHOP
  • F_FPU_RC_UP
  • F_FPU_RC_DOWN
  • F_FPU_RC_NEAR
  • F_FPU_PC_24
  • F_FPU_PC_53
  • F_FPU_PC_64
[in] mask 設定マスク
次のマスク値のbit-ORによる組み合わせで指定してください
  • F_FPU_EM_MASK
  • F_FPU_RC_MASK
  • F_FPU_PC_MASK
戻り値:
F_ERR_NONE 正常終了
F_ERR_UNSUPPORTED サポートされていません
参照:
fnFIE_get_control_x87() fnFIE_set_control_sse()

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
	

注意:
本関数での指定値は x87 のビット指定値とビット位置が同じになるように 仕様を定めています。そのため、最終的に設定されるMXCSRレジスタの ビット定義とは位置が異なっている事に注意してください。
SSEが塔載されていないCPUの場合または、IA32/x64 CPUで無い場合、 本関数は F_ERR_UNSUPPORTED エラーを返します。

引数:
[out] val レジスタ値
戻り値:
F_ERR_NONE 正常終了
F_ERR_UNSUPPORTED サポートされていません
F_ERR_INVALID_PARAM パラメータエラー( val にNULLが渡された)
参照:
fnFIE_get_control_x87() fnFIE_set_control_x87()

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
	

注意:
本関数での指定値は x87 のビット指定値とビット位置が同じになるように 仕様を定めています。そのため、最終的に設定されるMXCSRレジスタの ビット定義とは位置が異なっている事に注意してください。
SSEが塔載されていないCPUの場合または、IA32/x64 CPUで無い場合、 本関数は F_ERR_UNSUPPORTED エラーを返します。

引数:
[in] set レジスタ値
次の値のbit-ORによる組み合わせで指定してください
  • F_FPU_EM_IM
  • F_FPU_EM_DM
  • F_FPU_EM_ZM
  • F_FPU_EM_OM
  • F_FPU_EM_UM
  • F_FPU_EM_PM
  • F_FPU_FZ_SAVE
  • F_FPU_FZ_FLUSH
  • F_FPU_RC_CHOP
  • F_FPU_RC_UP
  • F_FPU_RC_DOWN
  • F_FPU_RC_NEAR
[in] mask 設定マスク
次のマスク値のbit-ORによる組み合わせで指定してください
  • F_FPU_EM_MASK
  • F_FPU_RC_MASK
  • F_FPU_FZ_MASK
戻り値:
F_ERR_NONE 正常終了
F_ERR_UNSUPPORTED サポートされていません
参照:
fnFIE_get_control_sse() fnFIE_set_control_x87()


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2