● 関数リファレンス

FLOATEX 型テーブルからタグワードを作成

    unsigned int __stdcall    floatex_gettag(FLOATEX_TBLPTR preg);

引数

引数名意味
pregFLOATEX 型テーブルの先頭アドレス

戻り値

タグワードを返します。

説明

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();
}