● 関数リファレンス

FPU に例外を発生させる

    void __stdcall    floatex_raise_exception(int flags,int cflags);

引数

引数名意味
flags対象の例外フラグ
cflags条件コード C0 〜 C3

戻り値

無し

説明

FPU に浮動小数点例外を発生させます。

この関数は、汎用レジスタの内容を変えません。また、EFLAGS の内容を保存します。

テスト.

#include <stdio.h>
#include "floatex.h"

void    except_info(void)
{
    char               **pptbl;
    int                flags;
    FPU_STATUS_DW      sw;
    static char        *tbl[] = {
        "無効操作", "デノーマル", "ゼロ除算", "オーバーフロー",
        "アンダーフロー", "不正確結果", "スタックフォルト", 0
    };

    sw.dword = floatex_get_status();
    floatex_clear87();

    flags = sw.dword & FEX_STAT_EXCEPTION;
    pptbl = tbl;
    do{
        if (flags & 1)
            printf("%s ",*pptbl);
        pptbl++;
    }while((flags >>= 1) != 0);
    printf("\n");

    printf("C0:%d  C1:%d  C2:%d  C3:%d\n",
        sw.bits.C0,sw.bits.C1,sw.bits.C2,sw.bits.C3);
}

#include <excpt.h>

void __cdecl    main(void)
{
    floatex_clear87();
    floatex_loadcw(FEX_PC_64 | FEX_RC_NEAR);

    __try{

        floatex_raise_exception(FEX_STAT_IE,0);

    }
    __except(EXCEPTION_EXECUTE_HANDLER){

        except_info();

    }

    floatex_reset();
}