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 162