home *** CD-ROM | disk | FTP | other *** search
- /***
- *fpieee.h - Definitions for floating point IEEE exception handling
- *
- * Copyright (c) 1991-1997, Microsoft Corporation. All rights reserved.
- *
- *Purpose:
- * This file contains constant and type definitions for handling
- * floating point exceptions [ANSI/IEEE std. 754]
- *
- * [Public]
- *
- ****/
-
- #if _MSC_VER > 1000
- #pragma once
- #endif
-
- #ifndef _INC_FPIEEE
- #define _INC_FPIEEE
-
- #if !defined(_WIN32) && !defined(_MAC)
- #error ERROR: Only Mac or Win32 targets supported!
- #endif
-
-
- #ifndef __assembler /* MIPS ONLY: Protect from assembler */
-
- #ifdef _MSC_VER
- /*
- * Currently, all MS C compilers for Win32 platforms default to 8 byte
- * alignment.
- */
- #pragma pack(push,8)
- #endif /* _MSC_VER */
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- /* Define _CRTIMP */
-
- #ifndef _CRTIMP
- #ifdef _DLL
- #define _CRTIMP __declspec(dllimport)
- #else /* ndef _DLL */
- #define _CRTIMP
- #endif /* _DLL */
- #endif /* _CRTIMP */
-
-
- /* Define __cdecl for non-Microsoft compilers */
-
- #if ( !defined(_MSC_VER) && !defined(__cdecl) )
- #define __cdecl
- #endif
-
- /* Define _CRTAPI1 (for compatibility with the NT SDK) */
-
- #ifndef _CRTAPI1
- #if _MSC_VER >= 800 && _M_IX86 >= 300
- #define _CRTAPI1 __cdecl
- #else
- #define _CRTAPI1
- #endif
- #endif
-
- /*
- * Define floating point IEEE compare result values.
- */
-
- typedef enum {
- _FpCompareEqual,
- _FpCompareGreater,
- _FpCompareLess,
- _FpCompareUnordered
- } _FPIEEE_COMPARE_RESULT;
-
- /*
- * Define floating point format and result precision values.
- */
-
- typedef enum {
- _FpFormatFp32,
- _FpFormatFp64,
- _FpFormatFp80,
- _FpFormatFp128,
- _FpFormatI16,
- _FpFormatI32,
- _FpFormatI64,
- _FpFormatU16,
- _FpFormatU32,
- _FpFormatU64,
- _FpFormatBcd80,
- _FpFormatCompare,
- _FpFormatString
- } _FPIEEE_FORMAT;
-
- /*
- * Define operation code values.
- */
-
- typedef enum {
- _FpCodeUnspecified,
- _FpCodeAdd,
- _FpCodeSubtract,
- _FpCodeMultiply,
- _FpCodeDivide,
- _FpCodeSquareRoot,
- _FpCodeRemainder,
- _FpCodeCompare,
- _FpCodeConvert,
- _FpCodeRound,
- _FpCodeTruncate,
- _FpCodeFloor,
- _FpCodeCeil,
- _FpCodeAcos,
- _FpCodeAsin,
- _FpCodeAtan,
- _FpCodeAtan2,
- _FpCodeCabs,
- _FpCodeCos,
- _FpCodeCosh,
- _FpCodeExp,
- _FpCodeFabs,
- _FpCodeFmod,
- _FpCodeFrexp,
- _FpCodeHypot,
- _FpCodeLdexp,
- _FpCodeLog,
- _FpCodeLog10,
- _FpCodeModf,
- _FpCodePow,
- _FpCodeSin,
- _FpCodeSinh,
- _FpCodeTan,
- _FpCodeTanh,
- _FpCodeY0,
- _FpCodeY1,
- _FpCodeYn,
- _FpCodeLogb,
- _FpCodeNextafter,
- _FpCodeNegate
-
- } _FP_OPERATION_CODE;
-
- #endif /* #ifndef __assembler */
-
- /*
- * Define rounding modes.
- */
-
- #ifndef __assembler /* MIPS ONLY: Protect from assembler */
-
- typedef enum {
- _FpRoundNearest,
- _FpRoundMinusInfinity,
- _FpRoundPlusInfinity,
- _FpRoundChopped
- } _FPIEEE_ROUNDING_MODE;
-
- typedef enum {
- _FpPrecisionFull,
- _FpPrecision53,
- _FpPrecision24
- } _FPIEEE_PRECISION;
-
-
- /*
- * Define floating point context record
- */
-
- typedef float _FP32;
- typedef double _FP64;
- typedef short _I16;
- typedef int _I32;
- typedef unsigned short _U16;
- typedef unsigned int _U32;
-
-
- typedef struct {
- unsigned short W[5];
- } _FP80;
-
- typedef struct {
- unsigned long W[4];
- } _FP128;
-
- typedef struct {
- unsigned long W[2];
- } _I64;
-
- typedef struct {
- unsigned long W[2];
- } _U64;
-
- typedef struct {
- unsigned short W[5];
- } _BCD80;
-
-
- typedef struct {
- union {
- _FP32 Fp32Value;
- _FP64 Fp64Value;
- _FP80 Fp80Value;
- _FP128 Fp128Value;
- _I16 I16Value;
- _I32 I32Value;
- _I64 I64Value;
- _U16 U16Value;
- _U32 U32Value;
- _U64 U64Value;
- _BCD80 Bcd80Value;
- char *StringValue;
- int CompareValue;
- } Value;
-
- unsigned int OperandValid : 1;
- unsigned int Format : 4;
-
- } _FPIEEE_VALUE;
-
-
- typedef struct {
- unsigned int Inexact : 1;
- unsigned int Underflow : 1;
- unsigned int Overflow : 1;
- unsigned int ZeroDivide : 1;
- unsigned int InvalidOperation : 1;
- } _FPIEEE_EXCEPTION_FLAGS;
-
-
- typedef struct {
- unsigned int RoundingMode : 2;
- unsigned int Precision : 3;
- unsigned int Operation :12;
- _FPIEEE_EXCEPTION_FLAGS Cause;
- _FPIEEE_EXCEPTION_FLAGS Enable;
- _FPIEEE_EXCEPTION_FLAGS Status;
- _FPIEEE_VALUE Operand1;
- _FPIEEE_VALUE Operand2;
- _FPIEEE_VALUE Result;
- } _FPIEEE_RECORD;
-
-
- struct _EXCEPTION_POINTERS;
-
- /*
- * Floating point IEEE exception filter routine
- */
-
- _CRTIMP int __cdecl _fpieee_flt(
- unsigned long,
- struct _EXCEPTION_POINTERS *,
- int (__cdecl *)(_FPIEEE_RECORD *)
- );
-
- #ifdef __cplusplus
- }
- #endif
-
- #ifdef _MSC_VER
- #pragma pack(pop)
- #endif /* _MSC_VER */
- #endif /* #ifndef __assembler */
-
- #endif /* _INC_FPIEEE */
-