● 関数リファレンス
FLOATEX 型テーブルからタグワードを作成
unsigned int __stdcall floatex_gettag(FLOATEX_TBLPTR preg);
引数
引数名 | 意味 |
preg | FLOATEX 型テーブルの先頭アドレス |
戻り値
タグワードを返します。
説明
FLOATEX 型のテーブル preg を元に、タグワードを作成します。preg の指すテーブルは、8 要素以上の大きさが必要です。
この関数は、空を示す 11b をセットしません。空をセットする必要がある場合は、戻り値を操作してください(具体例はテストプログラム参照の事)。タグワードのフォーマットは floatex_get_stacktag と同じです。
内部処理でレジスタスタックを使用しますので、問題がある場合は FPU 環境の保護を行ってください。
この関数は、eax 以外の汎用レジスタの内容を変えません。また、EFLAGS の内容を保存します。
テスト.
#include <stdio.h>
#include "floatex.h"
void print_reg(void); /* 「低水準操作」の「FPU 環境の保護」参照の事 */
void __cdecl main(void)
{
REGSTACK rs = {0};
floatex_reset();
/* レジスタスタックのセット */
floatex_copy(rs.reg[0],fex_const_0);
floatex_copy(rs.reg[1],fex_const_1);
floatex_copy(rs.reg[2],fex_const_2);
floatex_copy(rs.reg[3],fex_const_3);
floatex_snan(0,rs.reg[4]); /* SNaN */
floatex_qnan(0,rs.reg[5]); /* QNaN */
floatex_copy(rs.reg[6],fex_const_hugeval); /* ∞ */
/* ST(7) は空 */
rs.tag = floatex_gettag(rs.reg); /* タグワードの作成 */
/*
複数のレジスタスタックを空にする場合は、EMPTY_TAG を OR 接合します。
例えば、ST(5)〜ST(7) を空にする場合は、
EMPTY_TAG(5) | EMPTY_TAG(6) | EMPTY_TAG(7)
*/
#define EMPTY_TAG(I) (3 << ((I) << 1))
rs.tag |= EMPTY_TAG(7); /* 空の設定 */
rs.stacktop = 0; /* スタックトップ */
floatex_set_regstack(&rs,0); /* レジスタスタックにセット */
print_reg();
floatex_ldstr_term();
floatex_reset();
}