aboutsummaryrefslogtreecommitdiff
path: root/x86_64-w64-mingw32/include/fpieee.h
blob: 62086c06c85c35495788d4a665af61cc909bf5f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_FPIEEE
#define _INC_FPIEEE

#include <crtdefs.h>

#pragma pack(push,_CRT_PACKING)

#ifdef __cplusplus
extern "C" {
#endif

  typedef enum {
    _FpCompareEqual,_FpCompareGreater,_FpCompareLess,_FpCompareUnordered
  } _FPIEEE_COMPARE_RESULT;

  typedef enum {
    _FpFormatFp32,_FpFormatFp64,_FpFormatFp80,_FpFormatFp128,_FpFormatI16,_FpFormatI32,
    _FpFormatI64,_FpFormatU16,_FpFormatU32,_FpFormatU64,_FpFormatBcd80,_FpFormatCompare,
    _FpFormatString,
#if defined(__ia64__)
    _FpFormatFp82
#endif
  } _FPIEEE_FORMAT;

  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,_FpCodeFmin,_FpCodeFmax,
    _FpCodeConvertTrunc,
    _XMMIAddps,_XMMIAddss,_XMMISubps,_XMMISubss,_XMMIMulps,_XMMIMulss,_XMMIDivps,
    _XMMIDivss,_XMMISqrtps,_XMMISqrtss,_XMMIMaxps,_XMMIMaxss,_XMMIMinps,_XMMIMinss,
    _XMMICmpps,_XMMICmpss,_XMMIComiss,_XMMIUComiss,_XMMICvtpi2ps,_XMMICvtsi2ss,
    _XMMICvtps2pi,_XMMICvtss2si,_XMMICvttps2pi,_XMMICvttss2si,_XMMIAddsubps,_XMMIHaddps,
    _XMMIHsubps,_XMMI2Addpd,_XMMI2Addsd,_XMMI2Subpd,_XMMI2Subsd,_XMMI2Mulpd,_XMMI2Mulsd,
    _XMMI2Divpd,_XMMI2Divsd,_XMMI2Sqrtpd,_XMMI2Sqrtsd,_XMMI2Maxpd,_XMMI2Maxsd,_XMMI2Minpd,
    _XMMI2Minsd,_XMMI2Cmppd,_XMMI2Cmpsd,_XMMI2Comisd,_XMMI2UComisd,_XMMI2Cvtpd2pi,
    _XMMI2Cvtsd2si,_XMMI2Cvttpd2pi,_XMMI2Cvttsd2si,_XMMI2Cvtps2pd,_XMMI2Cvtss2sd,
    _XMMI2Cvtpd2ps,_XMMI2Cvtsd2ss,_XMMI2Cvtdq2ps,_XMMI2Cvttps2dq,_XMMI2Cvtps2dq,
    _XMMI2Cvttpd2dq,_XMMI2Cvtpd2dq,_XMMI2Addsubpd,_XMMI2Haddpd,_XMMI2Hsubpd,
#if defined(__ia64__)
    _FpCodeFma,_FpCodeFmaSingle,_FpCodeFmaDouble,_FpCodeFms,_FpCodeFmsSingle,
    _FpCodeFmsDouble,_FpCodeFnma,_FpCodeFnmaSingle,_FpCodeFnmaDouble,_FpCodeFamin,
    _FpCodeFamax
#endif
  } _FP_OPERATION_CODE;

  typedef enum {
    _FpRoundNearest,_FpRoundMinusInfinity,_FpRoundPlusInfinity,_FpRoundChopped
  } _FPIEEE_ROUNDING_MODE;

  typedef enum {
    _FpPrecisionFull,_FpPrecision53,_FpPrecision24,
#if defined(__ia64__)
    _FpPrecision64,_FpPrecision113
#endif
  } _FPIEEE_PRECISION;

  typedef float _FP32;
  typedef double _FP64;
  typedef short _I16;
  typedef int _I32;
  typedef unsigned short _U16;
  typedef unsigned int _U32;
  __MINGW_EXTENSION typedef __int64 _Q64;

  typedef struct
#if defined(__ia64__)
    _CRT_ALIGN(16)
#endif
  {
    unsigned short W[5];
  } _FP80;

  typedef struct _CRT_ALIGN(16) {
    unsigned long W[4];
  } _FP128;

  typedef struct _CRT_ALIGN(8) {
    unsigned long W[2];
  } _I64;

  typedef struct _CRT_ALIGN(8) {
    unsigned long W[2];
  } _U64;

  typedef struct
#if defined(__ia64__)
    _CRT_ALIGN(16)
#endif
  {
    unsigned short W[5];
  } _BCD80;

  typedef struct _CRT_ALIGN(16) {
    _Q64 W[2];
  } _FPQ64;

  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;
      _Q64 Q64Value;
      _FPQ64 Fpq64Value;
    } 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;
#if defined(__ia64__)
    _FPIEEE_VALUE Operand3;
#endif
  } _FPIEEE_RECORD,*_PFPIEEE_RECORD;

  struct _EXCEPTION_POINTERS;

  _CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode,struct _EXCEPTION_POINTERS *_PtExceptionPtr,int (__cdecl *_Handler)(_FPIEEE_RECORD *));

#ifdef __cplusplus
}
#endif

#pragma pack(pop)
#endif