STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
fpieee.h
Go to the documentation of this file.
1 //
2 // fpieee.h
3 //
4 // Copyright (c) Microsoft Corporation. All rights reserved.
5 //
6 // This file contains constant and type definitions for handling floating point
7 // exceptions (IEEE 754).
8 //
9 #pragma once
10 #define _INC_FPIEEE
11 
12 #ifndef __midl
13 
14 #ifdef _M_CEE_PURE
15  #error ERROR: This file is not supported in the pure mode!
16 #endif
17 
18 #include <corecrt.h>
19 
21 
22 
23 
24 #ifndef __assembler
25 
26  // Disable C4324: structure was padded due to __declspec(align())
27  #pragma warning(push)
28  #pragma warning(disable: 4324)
29 
30  // Define floating point IEEE compare result values.
31  typedef enum
32  {
38 
39  // Define floating point format and result precision values.
40  typedef enum
41  {
56 
57  // Define operation code values.
58  typedef enum
59  {
100  _FpCodeFmin, // XMMI
101  _FpCodeFmax, // XMMI
103  _XMMIAddps, // XMMI
127  _XMMIAddsubps, // XMMI for PNI
128  _XMMIHaddps, // XMMI for PNI
129  _XMMIHsubps, // XMMI for PNI
130  _XMMIRoundps, // 66 0F 3A 08
131  _XMMIRoundss, // 66 0F 3A 0A
132  _XMMIDpps, // 66 0F 3A 40
133  _XMMI2Addpd, // XMMI2
151  _XMMI2Cvtpd2pi, // 66 2D
153  _XMMI2Cvttpd2pi, // 66 2C
155  _XMMI2Cvtps2pd, // 0F 5A
159  _XMMI2Cvtdq2ps, // 0F 5B
162  _XMMI2Cvttpd2dq, // 66 0F E6
164  _XMMI2Addsubpd, // 66 0F D0
165  _XMMI2Haddpd, // 66 0F 7C
166  _XMMI2Hsubpd, // 66 0F 7D
167  _XMMI2Roundpd, // 66 0F 3A 09
168  _XMMI2Roundsd, // 66 0F 3A 0B
169  _XMMI2Dppd, // 66 0F 3A 41
171 
172 #endif // __assembler
173 
174 #ifdef _CORECRT_BUILD
175  #ifndef __assembler
176 
177  #define OP_UNSPEC _FpCodeUnspecified
178  #define OP_ADD _FpCodeAdd
179  #define OP_SUB _FpCodeSubtract
180  #define OP_MUL _FpCodeMultiply
181  #define OP_DIV _FpCodeDivide
182  #define OP_REM _FpCodeRemainder
183  #define OP_COMP _FpCodeCompare
184  #define OP_CVT _FpCodeConvert
185  #define OP_RND _FpCodeRound
186  #define OP_TRUNC _FpCodeTruncate
187 
188  #define OP_EXP _FpCodeExp
189 
190  #define OP_POW _FpCodePow
191  #define OP_LOG _FpCodeLog
192  #define OP_LOG10 _FpCodeLog10
193  #define OP_SINH _FpCodeSinh
194  #define OP_COSH _FpCodeCosh
195  #define OP_TANH _FpCodeTanh
196  #define OP_ASIN _FpCodeAsin
197  #define OP_ACOS _FpCodeAcos
198  #define OP_ATAN _FpCodeAtan
199  #define OP_ATAN2 _FpCodeAtan2
200  #define OP_SQRT _FpCodeSquareRoot
201  #define OP_SIN _FpCodeSin
202  #define OP_COS _FpCodeCos
203  #define OP_TAN _FpCodeTan
204  #define OP_CEIL _FpCodeCeil
205  #define OP_FLOOR _FpCodeFloor
206  #define OP_ABS _FpCodeFabs
207  #define OP_MODF _FpCodeModf
208  #define OP_LDEXP _FpCodeLdexp
209  #define OP_CABS _FpCodeCabs
210  #define OP_HYPOT _FpCodeHypot
211  #define OP_FMOD _FpCodeFmod
212  #define OP_FREXP _FpCodeFrexp
213  #define OP_Y0 _FpCodeY0
214  #define OP_Y1 _FpCodeY1
215  #define OP_YN _FpCodeYn
216 
217  #define OP_LOGB _FpCodeLogb
218  #define OP_NEXTAFTER _FpCodeNextafter
219 
220  // XMMI
221  #define OP_ADDPS _XMMIAddps
222  #define OP_ADDSS _XMMIAddss
223  #define OP_SUBPS _XMMISubps
224  #define OP_SUBSS _XMMISubss
225  #define OP_MULPS _XMMIMulps
226  #define OP_MULSS _XMMIMulss
227  #define OP_DIVPS _XMMIDivps
228  #define OP_DIVSS _XMMIDivss
229  #define OP_SQRTPS _XMMISqrtps
230  #define OP_SQRTSS _XMMISqrtss
231  #define OP_MAXPS _XMMIMaxps
232  #define OP_MAXSS _XMMIMaxss
233  #define OP_MINPS _XMMIMinps
234  #define OP_MINSS _XMMIMinss
235  #define OP_CMPPS _XMMICmpps
236  #define OP_CMPSS _XMMICmpss
237  #define OP_COMISS _XMMIComiss
238  #define OP_UCOMISS _XMMIUComiss
239  #define OP_CVTPI2PS _XMMICvtpi2ps
240  #define OP_CVTSI2SS _XMMICvtsi2ss
241  #define OP_CVTPS2PI _XMMICvtps2pi
242  #define OP_CVTSS2SI _XMMICvtss2si
243  #define OP_CVTTPS2PI _XMMICvttps2pi
244  #define OP_CVTTSS2SI _XMMICvttss2si
245  #define OP_ADDSUBPS _XMMIAddsubps
246  #define OP_HADDPS _XMMIHaddps
247  #define OP_HSUBPS _XMMIHsubps
248  #define OP_ROUNDPS _XMMIRoundps
249  #define OP_ROUNDSS _XMMIRoundss
250  #define OP_DPPS _XMMIDpps
251  // XMMI
252 
253  // XMMI2
254  #define OP_ADDPD _XMMI2Addpd // XMMI2
255  #define OP_ADDSD _XMMI2Addsd
256  #define OP_SUBPD _XMMI2Subpd
257  #define OP_SUBSD _XMMI2Subsd
258  #define OP_MULPD _XMMI2Mulpd
259  #define OP_MULSD _XMMI2Mulsd
260  #define OP_DIVPD _XMMI2Divpd
261  #define OP_DIVSD _XMMI2Divsd
262  #define OP_SQRTPD _XMMI2Sqrtpd
263  #define OP_SQRTSD _XMMI2Sqrtsd
264  #define OP_MAXPD _XMMI2Maxpd
265  #define OP_MAXSD _XMMI2Maxsd
266  #define OP_MINPD _XMMI2Minpd
267  #define OP_MINSD _XMMI2Minsd
268  #define OP_CMPPD _XMMI2Cmppd
269  #define OP_CMPSD _XMMI2Cmpsd
270  #define OP_COMISD _XMMI2Comisd
271  #define OP_UCOMISD _XMMI2UComisd
272  #define OP_CVTPD2PI _XMMI2Cvtpd2pi // 66 2D
273  #define OP_CVTSD2SI _XMMI2Cvtsd2si // F2
274  #define OP_CVTTPD2PI _XMMI2Cvttpd2pi // 66 2C
275  #define OP_CVTTSD2SI _XMMI2Cvttsd2si // F2
276  #define OP_CVTPS2PD _XMMI2Cvtps2pd // 0F 5A
277  #define OP_CVTSS2SD _XMMI2Cvtss2sd // F3
278  #define OP_CVTPD2PS _XMMI2Cvtpd2ps // 66
279  #define OP_CVTSD2SS _XMMI2Cvtsd2ss // F2
280  #define OP_CVTDQ2PS _XMMI2Cvtdq2ps // 0F 5B
281  #define OP_CVTTPS2DQ _XMMI2Cvttps2dq // F3
282  #define OP_CVTPS2DQ _XMMI2Cvtps2dq // 66
283  #define OP_CVTTPD2DQ _XMMI2Cvttpd2dq // 66 0F E6
284  #define OP_CVTPD2DQ _XMMI2Cvtpd2dq // F2
285  #define OP_ADDSUBPD _XMMI2Addsubpd // 66 0F D0
286  #define OP_HADDPD _XMMI2Haddpd // 66 0F 7C
287  #define OP_HSUBPD _XMMI2Hsubpd // 66 0F 7D
288  #define OP_ROUNDPD _XMMI2Roundpd // 66 0F 3A 09
289  #define OP_ROUNDSD _XMMI2Roundsd // 66 0F 3A 0B
290  #define OP_DPPD _XMMI2Dppd // 66 0F 3A 41
291  // XMMI2
292 
293  #else // __assembler
294 
295  // This must be the same as the enumerator _FP_OPERATION_CODE
296  #define OP_UNSPEC 0
297  #define OP_ADD 1
298  #define OP_SUB 2
299  #define OP_MUL 3
300  #define OP_DIV 4
301  #define OP_SQRT 5
302  #define OP_REM 6
303  #define OP_COMP 7
304  #define OP_CVT 8
305  #define OP_RND 9
306  #define OP_TRUNC 10
307  #define OP_FLOOR 11
308  #define OP_CEIL 12
309  #define OP_ACOS 13
310  #define OP_ASIN 14
311  #define OP_ATAN 15
312  #define OP_ATAN2 16
313  #define OP_CABS 17
314  #define OP_COS 18
315  #define OP_COSH 19
316  #define OP_EXP 20
317  #define OP_ABS 21 // same as OP_FABS
318  #define OP_FABS 21 // same as OP_ABS
319  #define OP_FMOD 22
320  #define OP_FREXP 23
321  #define OP_HYPOT 24
322  #define OP_LDEXP 25
323  #define OP_LOG 26
324  #define OP_LOG10 27
325  #define OP_MODF 28
326  #define OP_POW 29
327  #define OP_SIN 30
328  #define OP_SINH 31
329  #define OP_TAN 32
330  #define OP_TANH 33
331  #define OP_Y0 34
332  #define OP_Y1 35
333  #define OP_YN 36
334  #define OP_LOGB 37
335  #define OP_NEXTAFTER 38
336  #define OP_NEG 39
337 
338  #endif // __assembler
339 #endif // _CORECRT_BUILD
340 
341 // Define rounding modes.
342 #ifndef __assembler
343 
344  typedef enum
345  {
351 
352  typedef enum
353  {
358 
359 
360  // Define floating point context record
361  typedef float _FP32;
362  typedef double _FP64;
363  typedef short _I16;
364  typedef int _I32;
365  typedef unsigned short _U16;
366  typedef unsigned int _U32;
367  typedef __int64 _Q64;
368 
369  #ifdef _CORECRT_BUILD
370  typedef struct
371  {
372  unsigned long W[4];
373  } _U32ARRAY;
374  #endif
375 
376  typedef struct
377  {
378  unsigned short W[5];
379  } _FP80;
380 
381  typedef struct _CRT_ALIGN(16)
382  {
383  unsigned long W[4];
385 
386  typedef struct _CRT_ALIGN(8)
387  {
388  unsigned long W[2];
389  } _I64;
390 
391  typedef struct _CRT_ALIGN(8)
392  {
393  unsigned long W[2];
394  } _U64;
395 
396  typedef struct
397  {
398  unsigned short W[5];
399  } _BCD80;
400 
401  typedef struct _CRT_ALIGN(16)
402  {
403  _Q64 W[2];
405 
406  typedef struct
407  {
408  union
409  {
421  char *StringValue;
423  #ifdef _CORECRT_BUILD
424  _U32ARRAY U32ArrayValue;
425  #endif
428  } Value;
429 
430  unsigned int OperandValid : 1;
431  unsigned int Format : 4;
432 
433  } _FPIEEE_VALUE;
434 
435 
436  typedef struct
437  {
438  unsigned int Inexact : 1;
439  unsigned int Underflow : 1;
440  unsigned int Overflow : 1;
441  unsigned int ZeroDivide : 1;
442  unsigned int InvalidOperation : 1;
444 
445 
446  typedef struct
447  {
448  unsigned int RoundingMode : 2;
449  unsigned int Precision : 3;
450  unsigned int Operation : 12;
458 
459 
460  struct _EXCEPTION_POINTERS;
461 
462  typedef int (__cdecl* _FpieeFltHandlerType)(_FPIEEE_RECORD*);
463 
464  // Floating point IEEE exception filter routine
465  _ACRTIMP int __cdecl _fpieee_flt(
466  _In_ unsigned long _ExceptionCode,
467  _In_ struct _EXCEPTION_POINTERS* _PtExceptionPtr,
468  _In_ _FpieeFltHandlerType _Handler
469  );
470 
471  #pragma warning(pop)
472 
473 #endif // __assembler
474 
476 
477 #endif // __midl
_FP32 Fp32Value
Definition: fpieee.h:410
_I64
Definition: fpieee.h:389
_FP_OPERATION_CODE
Definition: fpieee.h:58
Definition: fpieee.h:169
Definition: fpieee.h:91
Definition: fpieee.h:46
_FPIEEE_FORMAT
Definition: fpieee.h:40
Definition: fpieee.h:129
Definition: fpieee.h:134
Definition: fpieee.h:165
_FPIEEE_ROUNDING_MODE
Definition: fpieee.h:344
#define _ACRTIMP
Definition: corecrt.h:27
Definition: fpieee.h:82
Definition: fpieee.h:63
Definition: fpieee.h:147
Definition: fpieee.h:163
Definition: fpieee.h:349
Definition: fpieee.h:136
Definition: fpieee.h:152
Definition: fpieee.h:100
Definition: fpieee.h:103
Definition: fpieee.h:80
_FP80 Fp80Value
Definition: fpieee.h:412
Definition: fpieee.h:145
Definition: fpieee.h:108
Definition: fpieee.h:66
Definition: fpieee.h:49
Definition: fpieee.h:73
Definition: fpieee.h:144
Definition: fpieee.h:143
Definition: fpieee.h:137
Definition: fpieee.h:83
typedef int(__cdecl *_FpieeFltHandlerType)(_FPIEEE_RECORD *)
Definition: fpieee.h:148
Definition: fpieee.h:396
Definition: fpieee.h:346
Definition: fpieee.h:44
_U16 U16Value
Definition: fpieee.h:417
Definition: fpieee.h:153
Definition: fpieee.h:42
Definition: fpieee.h:33
Definition: fpieee.h:151
_FPQ64 Fpq64Value
Definition: fpieee.h:427
_FPIEEE_EXCEPTION_FLAGS Cause
Definition: fpieee.h:451
Definition: fpieee.h:164
Definition: fpieee.h:111
Definition: fpieee.h:65
Definition: fpieee.h:52
Definition: fpieee.h:104
Definition: fpieee.h:60
Definition: fpieee.h:436
Definition: fpieee.h:124
Definition: fpieee.h:356
Definition: fpieee.h:119
Definition: fpieee.h:77
Definition: fpieee.h:94
Definition: fpieee.h:79
Definition: fpieee.h:156
#define _CRT_BEGIN_C_HEADER
Definition: vcruntime.h:73
Definition: fpieee.h:62
Definition: fpieee.h:85
Definition: fpieee.h:50
Definition: fpieee.h:76
Definition: fpieee.h:348
Definition: fpieee.h:107
Definition: fpieee.h:139
Definition: fpieee.h:155
__int64 _Q64
Definition: fpieee.h:367
virtual property T Value
Definition: vccorlib.h:1422
_FPIEEE_PRECISION
Definition: fpieee.h:352
Definition: fpieee.h:446
_FPIEEE_VALUE Operand2
Definition: fpieee.h:455
Definition: fpieee.h:114
Definition: fpieee.h:406
char * StringValue
Definition: fpieee.h:421
Definition: fpieee.h:149
Definition: fpieee.h:51
Definition: fpieee.h:161
_FPIEEE_VALUE Result
Definition: fpieee.h:456
_FPIEEE_EXCEPTION_FLAGS Status
Definition: fpieee.h:453
Definition: fpieee.h:112
Definition: fpieee.h:130
_FP128
Definition: fpieee.h:384
Definition: fpieee.h:95
Definition: fpieee.h:71
Definition: fpieee.h:127
Definition: fpieee.h:121
Definition: fpieee.h:117
Definition: fpieee.h:150
Definition: fpieee.h:140
Definition: fpieee.h:61
Definition: fpieee.h:168
#define _In_
Definition: sal.h:305
Definition: fpieee.h:157
Definition: fpieee.h:81
_ACRTIMP int __cdecl _fpieee_flt(_In_ unsigned long _ExceptionCode, _In_ struct _EXCEPTION_POINTERS *_PtExceptionPtr, _In_ _FpieeFltHandlerType _Handler)
Definition: fpieee.h:115
Definition: fpieee.h:90
Definition: fpieee.h:92
Definition: fpieee.h:123
_I16 I16Value
Definition: fpieee.h:414
Definition: fpieee.h:67
Definition: fpieee.h:116
Definition: fpieee.h:110
Definition: fpieee.h:93
struct _CRT_ALIGN(16)
Definition: fpieee.h:381
Definition: fpieee.h:87
Definition: fpieee.h:109
Definition: fpieee.h:113
_FP64 Fp64Value
Definition: fpieee.h:411
Definition: fpieee.h:347
Definition: fpieee.h:146
short _I16
Definition: fpieee.h:363
Definition: fpieee.h:45
Definition: fpieee.h:162
Definition: fpieee.h:167
unsigned short _U16
Definition: fpieee.h:365
Definition: fpieee.h:70
Definition: fpieee.h:35
Definition: fpieee.h:89
Definition: fpieee.h:74
Definition: fpieee.h:68
Definition: fpieee.h:133
Definition: fpieee.h:64
Definition: fpieee.h:142
Definition: fpieee.h:98
Definition: fpieee.h:47
Definition: fpieee.h:131
Definition: fpieee.h:354
_FPIEEE_COMPARE_RESULT
Definition: fpieee.h:31
float _FP32
Definition: fpieee.h:361
unsigned int _U32
Definition: fpieee.h:366
_FP128 Fp128Value
Definition: fpieee.h:413
Definition: fpieee.h:88
Definition: fpieee.h:53
Definition: fpieee.h:120
#define _CRT_END_C_HEADER
Definition: vcruntime.h:76
_U32 U32Value
Definition: fpieee.h:418
Definition: fpieee.h:126
Definition: fpieee.h:159
double _FP64
Definition: fpieee.h:362
_U64 U64Value
Definition: fpieee.h:419
_U64
Definition: fpieee.h:394
Definition: fpieee.h:355
Definition: fpieee.h:166
Definition: fpieee.h:128
Definition: fpieee.h:75
Definition: fpieee.h:96
Definition: fpieee.h:118
Definition: fpieee.h:78
Definition: fpieee.h:125
Definition: fpieee.h:376
Definition: fpieee.h:43
int CompareValue
Definition: fpieee.h:422
Definition: fpieee.h:160
Definition: fpieee.h:54
_BCD80 Bcd80Value
Definition: fpieee.h:420
Definition: fpieee.h:101
Definition: fpieee.h:106
struct _FPIEEE_RECORD * _PFPIEEE_RECORD
_FPQ64
Definition: fpieee.h:404
Definition: fpieee.h:158
Definition: fpieee.h:34
Definition: fpieee.h:105
Definition: fpieee.h:97
_FPIEEE_VALUE Operand1
Definition: fpieee.h:454
_I64 I64Value
Definition: fpieee.h:416
Definition: fpieee.h:86
Definition: fpieee.h:72
_Q64 Q64Value
Definition: fpieee.h:426
Definition: fpieee.h:84
Definition: fpieee.h:132
Definition: fpieee.h:48
Definition: fpieee.h:141
Definition: fpieee.h:154
Definition: fpieee.h:99
Definition: fpieee.h:122
Definition: fpieee.h:69
Definition: fpieee.h:102
_I32 I32Value
Definition: fpieee.h:415
int _I32
Definition: fpieee.h:364
Definition: fpieee.h:138
Definition: fpieee.h:36
Definition: fpieee.h:135
_FPIEEE_EXCEPTION_FLAGS Enable
Definition: fpieee.h:452