summaryrefslogtreecommitdiffstats
path: root/private/crt32/h/fpieee.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/crt32/h/fpieee.h')
-rw-r--r--private/crt32/h/fpieee.h362
1 files changed, 362 insertions, 0 deletions
diff --git a/private/crt32/h/fpieee.h b/private/crt32/h/fpieee.h
new file mode 100644
index 000000000..6949fb522
--- /dev/null
+++ b/private/crt32/h/fpieee.h
@@ -0,0 +1,362 @@
+/***
+* fpieee.h - Definitions for floating point IEEE exception handling
+*
+* Copyright (c) 1991-1993, Microsoft Corporation. All rights reserved.
+*
+*Purpose:
+* This file contains constant and type definitions for handling
+* floating point exceptions [ANSI/IEEE std. 754]
+*
+*Revision History:
+* 03-01-92 GDP written
+* 04-05-92 GDP calling convention macros
+* 01-21-93 GJF Removed support for C6-386's _cdecl.
+* 01-13-94 RDL Added #ifndef _LANGUAGE_ASSEMBLY for asm includes.
+*
+*******************************************************************************/
+
+#ifndef _INC_FPIEEE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _LANGUAGE_ASSEMBLY
+
+#ifndef _INTERNAL_IFSTRIP_
+#include <cruntime.h>
+#endif /* _INTERNAL_IFSTRIP_ */
+
+/*
+ * Conditional macro definition for function calling type and variable type
+ * qualifiers.
+ */
+#if ( (_MSC_VER >= 800) && (_M_IX86 >= 300) )
+
+/*
+ * Definitions for MS C8-32 (386/486) compiler
+ */
+#define _CRTAPI1 __cdecl
+#define _CRTAPI2 __cdecl
+
+#else
+
+/*
+ * Other compilers (e.g., MIPS)
+ */
+#define _CRTAPI1
+#define _CRTAPI2
+
+#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.
+ *
+ * NOTE: If you change this enum, change the #defines below for assembler!
+ */
+
+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 /* _LANGUAGE_ASSEMBLY */
+
+
+#ifndef _INTERNAL_IFSTRIP_
+
+
+#ifndef _LANGUAGE_ASSEMBLY
+
+#define OP_UNSPEC _FpCodeUnspecified
+#define OP_ADD _FpCodeAdd
+#define OP_SUB _FpCodeSubtract
+#define OP_MUL _FpCodeMultiply
+#define OP_DIV _FpCodeDivide
+#define OP_REM _FpCodeRemainder
+#define OP_COMP _FpCodeCompare
+#define OP_CVT _FpCodeConvert
+#define OP_RND _FpCodeRound
+#define OP_TRUNC _FpCodeTruncate
+
+#define OP_EXP _FpCodeExp
+
+#define OP_POW _FpCodePow
+#define OP_LOG _FpCodeLog
+#define OP_LOG10 _FpCodeLog10
+#define OP_SINH _FpCodeSinh
+#define OP_COSH _FpCodeCosh
+#define OP_TANH _FpCodeTanh
+#define OP_ASIN _FpCodeAsin
+#define OP_ACOS _FpCodeAcos
+#define OP_ATAN _FpCodeAtan
+#define OP_ATAN2 _FpCodeAtan2
+#define OP_SQRT _FpCodeSquareRoot
+#define OP_SIN _FpCodeSin
+#define OP_COS _FpCodeCos
+#define OP_TAN _FpCodeTan
+#define OP_CEIL _FpCodeCeil
+#define OP_FLOOR _FpCodeFloor
+#define OP_ABS _FpCodeFabs
+#define OP_MODF _FpCodeModf
+#define OP_LDEXP _FpCodeLdexp
+#define OP_CABS _FpCodeCabs
+#define OP_HYPOT _FpCodeHypot
+#define OP_FMOD _FpCodeFmod
+#define OP_FREXP _FpCodeFrexp
+#define OP_Y0 _FpCodeY0
+#define OP_Y1 _FpCodeY1
+#define OP_YN _FpCodeYn
+
+#define OP_LOGB _FpCodeLogb
+#define OP_NEXTAFTER _FpCodeNextafter
+
+#else /* _LANGUAGE_ASSEMBLY */
+
+/* This must be the same as the enumerator _FP_OPERATION_CODE ! */
+#define OP_UNSPEC 0
+#define OP_ADD 1
+#define OP_SUB 2
+#define OP_MUL 3
+#define OP_DIV 4
+#define OP_SQRT 5
+#define OP_REM 6
+#define OP_COMP 7
+#define OP_CVT 8
+#define OP_RND 9
+#define OP_TRUNC 10
+#define OP_FLOOR 11
+#define OP_CEIL 12
+#define OP_ACOS 13
+#define OP_ASIN 14
+#define OP_ATAN 15
+#define OP_ATAN2 16
+#define OP_CABS 17
+#define OP_COS 18
+#define OP_COSH 19
+#define OP_EXP 20
+#define OP_ABS 21 /* same as OP_FABS */
+#define OP_FABS 21 /* same as OP_ABS */
+#define OP_FMOD 22
+#define OP_FREXP 23
+#define OP_HYPOT 24
+#define OP_LDEXP 25
+#define OP_LOG 26
+#define OP_LOG10 27
+#define OP_MODF 28
+#define OP_POW 29
+#define OP_SIN 30
+#define OP_SINH 31
+#define OP_TAN 32
+#define OP_TANH 33
+#define OP_Y0 34
+#define OP_Y1 35
+#define OP_YN 36
+#define OP_LOGB 37
+#define OP_NEXTAFTER 38
+#define OP_NEG 39
+
+
+
+#endif /* _LANGUAGE_ASSEMBLY */
+
+#endif /* _INTERNAL_IFSTRIP_ */
+
+
+/*
+ * Define rounding modes.
+ */
+
+#ifndef _LANGUAGE_ASSEMBLY
+
+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;
+
+#ifndef _INTERNAL_IFSTRIP_
+
+typedef struct {
+ unsigned long W[4];
+} _U32ARRAY;
+
+#endif /* _INTERNAL_IFSTRIP_ */
+
+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;
+#ifndef _INTERNAL_IFSTRIP_
+ _U32ARRAY U32ArrayValue;
+#endif /* _INTERNAL_IFSTRIP_ */
+ } 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
+ */
+
+int _CRTAPI1 _fpieee_flt(unsigned long code,
+ struct _EXCEPTION_POINTERS *p,
+ int handler(_FPIEEE_RECORD *));
+
+#endif /* _LANGUAGE_ASSEMBLY */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _INC_FPIEEE
+#endif /* _INC_FPIEEE */