master
  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
 14extern "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