1 | /**
|
---|
2 | * This file has no copyright assigned and is placed in the Public Domain.
|
---|
3 | * This file is part of the mingw-w64 runtime package.
|
---|
4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
---|
5 | */
|
---|
6 | #ifndef _INC_FPIEEE
|
---|
7 | #define _INC_FPIEEE
|
---|
8 |
|
---|
9 | #include <crtdefs.h>
|
---|
10 |
|
---|
11 | #pragma pack(push,_CRT_PACKING)
|
---|
12 |
|
---|
13 | #ifdef __cplusplus
|
---|
14 | extern "C" {
|
---|
15 | #endif
|
---|
16 |
|
---|
17 | typedef enum {
|
---|
18 | _FpCompareEqual,_FpCompareGreater,_FpCompareLess,_FpCompareUnordered
|
---|
19 | } _FPIEEE_COMPARE_RESULT;
|
---|
20 |
|
---|
21 | typedef enum {
|
---|
22 | _FpFormatFp32,_FpFormatFp64,_FpFormatFp80,_FpFormatFp128,_FpFormatI16,_FpFormatI32,
|
---|
23 | _FpFormatI64,_FpFormatU16,_FpFormatU32,_FpFormatU64,_FpFormatBcd80,_FpFormatCompare,
|
---|
24 | _FpFormatString,
|
---|
25 | #if defined(__ia64__)
|
---|
26 | _FpFormatFp82
|
---|
27 | #endif
|
---|
28 | } _FPIEEE_FORMAT;
|
---|
29 |
|
---|
30 | typedef enum {
|
---|
31 | _FpCodeUnspecified,_FpCodeAdd,_FpCodeSubtract,_FpCodeMultiply,_FpCodeDivide,
|
---|
32 | _FpCodeSquareRoot,_FpCodeRemainder,_FpCodeCompare,_FpCodeConvert,_FpCodeRound,
|
---|
33 | _FpCodeTruncate,_FpCodeFloor,_FpCodeCeil,_FpCodeAcos,_FpCodeAsin,_FpCodeAtan,
|
---|
34 | _FpCodeAtan2,_FpCodeCabs,_FpCodeCos,_FpCodeCosh,_FpCodeExp,_FpCodeFabs,_FpCodeFmod,
|
---|
35 | _FpCodeFrexp,_FpCodeHypot,_FpCodeLdexp,_FpCodeLog,_FpCodeLog10,_FpCodeModf,
|
---|
36 | _FpCodePow,_FpCodeSin,_FpCodeSinh,_FpCodeTan,_FpCodeTanh,_FpCodeY0,_FpCodeY1,
|
---|
37 | _FpCodeYn,_FpCodeLogb,_FpCodeNextafter,_FpCodeNegate,_FpCodeFmin,_FpCodeFmax,
|
---|
38 | _FpCodeConvertTrunc,
|
---|
39 | _XMMIAddps,_XMMIAddss,_XMMISubps,_XMMISubss,_XMMIMulps,_XMMIMulss,_XMMIDivps,
|
---|
40 | _XMMIDivss,_XMMISqrtps,_XMMISqrtss,_XMMIMaxps,_XMMIMaxss,_XMMIMinps,_XMMIMinss,
|
---|
41 | _XMMICmpps,_XMMICmpss,_XMMIComiss,_XMMIUComiss,_XMMICvtpi2ps,_XMMICvtsi2ss,
|
---|
42 | _XMMICvtps2pi,_XMMICvtss2si,_XMMICvttps2pi,_XMMICvttss2si,_XMMIAddsubps,_XMMIHaddps,
|
---|
43 | _XMMIHsubps,_XMMI2Addpd,_XMMI2Addsd,_XMMI2Subpd,_XMMI2Subsd,_XMMI2Mulpd,_XMMI2Mulsd,
|
---|
44 | _XMMI2Divpd,_XMMI2Divsd,_XMMI2Sqrtpd,_XMMI2Sqrtsd,_XMMI2Maxpd,_XMMI2Maxsd,_XMMI2Minpd,
|
---|
45 | _XMMI2Minsd,_XMMI2Cmppd,_XMMI2Cmpsd,_XMMI2Comisd,_XMMI2UComisd,_XMMI2Cvtpd2pi,
|
---|
46 | _XMMI2Cvtsd2si,_XMMI2Cvttpd2pi,_XMMI2Cvttsd2si,_XMMI2Cvtps2pd,_XMMI2Cvtss2sd,
|
---|
47 | _XMMI2Cvtpd2ps,_XMMI2Cvtsd2ss,_XMMI2Cvtdq2ps,_XMMI2Cvttps2dq,_XMMI2Cvtps2dq,
|
---|
48 | _XMMI2Cvttpd2dq,_XMMI2Cvtpd2dq,_XMMI2Addsubpd,_XMMI2Haddpd,_XMMI2Hsubpd,
|
---|
49 | #if defined(__ia64__)
|
---|
50 | _FpCodeFma,_FpCodeFmaSingle,_FpCodeFmaDouble,_FpCodeFms,_FpCodeFmsSingle,
|
---|
51 | _FpCodeFmsDouble,_FpCodeFnma,_FpCodeFnmaSingle,_FpCodeFnmaDouble,_FpCodeFamin,
|
---|
52 | _FpCodeFamax
|
---|
53 | #endif
|
---|
54 | } _FP_OPERATION_CODE;
|
---|
55 |
|
---|
56 | typedef enum {
|
---|
57 | _FpRoundNearest,_FpRoundMinusInfinity,_FpRoundPlusInfinity,_FpRoundChopped
|
---|
58 | } _FPIEEE_ROUNDING_MODE;
|
---|
59 |
|
---|
60 | typedef enum {
|
---|
61 | _FpPrecisionFull,_FpPrecision53,_FpPrecision24,
|
---|
62 | #if defined(__ia64__)
|
---|
63 | _FpPrecision64,_FpPrecision113
|
---|
64 | #endif
|
---|
65 | } _FPIEEE_PRECISION;
|
---|
66 |
|
---|
67 | typedef float _FP32;
|
---|
68 | typedef double _FP64;
|
---|
69 | typedef short _I16;
|
---|
70 | typedef int _I32;
|
---|
71 | typedef unsigned short _U16;
|
---|
72 | typedef unsigned int _U32;
|
---|
73 | __MINGW_EXTENSION typedef __int64 _Q64;
|
---|
74 |
|
---|
75 | typedef struct
|
---|
76 | #if defined(__ia64__)
|
---|
77 | _CRT_ALIGN(16)
|
---|
78 | #endif
|
---|
79 | {
|
---|
80 | unsigned short W[5];
|
---|
81 | } _FP80;
|
---|
82 |
|
---|
83 | typedef struct _CRT_ALIGN(16) {
|
---|
84 | unsigned long W[4];
|
---|
85 | } _FP128;
|
---|
86 |
|
---|
87 | typedef struct _CRT_ALIGN(8) {
|
---|
88 | unsigned long W[2];
|
---|
89 | } _I64;
|
---|
90 |
|
---|
91 | typedef struct _CRT_ALIGN(8) {
|
---|
92 | unsigned long W[2];
|
---|
93 | } _U64;
|
---|
94 |
|
---|
95 | typedef struct
|
---|
96 | #if defined(__ia64__)
|
---|
97 | _CRT_ALIGN(16)
|
---|
98 | #endif
|
---|
99 | {
|
---|
100 | unsigned short W[5];
|
---|
101 | } _BCD80;
|
---|
102 |
|
---|
103 | typedef struct _CRT_ALIGN(16) {
|
---|
104 | _Q64 W[2];
|
---|
105 | } _FPQ64;
|
---|
106 |
|
---|
107 | typedef struct {
|
---|
108 | union {
|
---|
109 | _FP32 Fp32Value;
|
---|
110 | _FP64 Fp64Value;
|
---|
111 | _FP80 Fp80Value;
|
---|
112 | _FP128 Fp128Value;
|
---|
113 | _I16 I16Value;
|
---|
114 | _I32 I32Value;
|
---|
115 | _I64 I64Value;
|
---|
116 | _U16 U16Value;
|
---|
117 | _U32 U32Value;
|
---|
118 | _U64 U64Value;
|
---|
119 | _BCD80 Bcd80Value;
|
---|
120 | char *StringValue;
|
---|
121 | int CompareValue;
|
---|
122 | _Q64 Q64Value;
|
---|
123 | _FPQ64 Fpq64Value;
|
---|
124 | } Value;
|
---|
125 | unsigned int OperandValid : 1;
|
---|
126 | unsigned int Format : 4;
|
---|
127 | } _FPIEEE_VALUE;
|
---|
128 |
|
---|
129 | typedef struct {
|
---|
130 | unsigned int Inexact : 1;
|
---|
131 | unsigned int Underflow : 1;
|
---|
132 | unsigned int Overflow : 1;
|
---|
133 | unsigned int ZeroDivide : 1;
|
---|
134 | unsigned int InvalidOperation : 1;
|
---|
135 | } _FPIEEE_EXCEPTION_FLAGS;
|
---|
136 |
|
---|
137 | typedef struct {
|
---|
138 | unsigned int RoundingMode : 2;
|
---|
139 | unsigned int Precision : 3;
|
---|
140 | unsigned int Operation :12;
|
---|
141 | _FPIEEE_EXCEPTION_FLAGS Cause;
|
---|
142 | _FPIEEE_EXCEPTION_FLAGS Enable;
|
---|
143 | _FPIEEE_EXCEPTION_FLAGS Status;
|
---|
144 | _FPIEEE_VALUE Operand1;
|
---|
145 | _FPIEEE_VALUE Operand2;
|
---|
146 | _FPIEEE_VALUE Result;
|
---|
147 | #if defined(__ia64__)
|
---|
148 | _FPIEEE_VALUE Operand3;
|
---|
149 | #endif
|
---|
150 | } _FPIEEE_RECORD,*_PFPIEEE_RECORD;
|
---|
151 |
|
---|
152 | struct _EXCEPTION_POINTERS;
|
---|
153 |
|
---|
154 | _CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode,struct _EXCEPTION_POINTERS *_PtExceptionPtr,int (__cdecl *_Handler)(_FPIEEE_RECORD *));
|
---|
155 |
|
---|
156 | #ifdef __cplusplus
|
---|
157 | }
|
---|
158 | #endif
|
---|
159 |
|
---|
160 | #pragma pack(pop)
|
---|
161 | #endif
|
---|