ReactOS 0.4.16-dev-1059-gb1cf981
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#ifndef _INC_FPIEEE // include guard for 3rd party interop
11#define _INC_FPIEEE
12
13#ifndef __midl
14
15#ifdef _M_CEE_PURE
16 #error ERROR: This file is not supported in the pure mode!
17#endif
18
19#include <corecrt.h>
20
21#pragma warning(push)
22#pragma warning(disable: _UCRT_DISABLED_WARNINGS)
24
26
27
28
29#ifndef __assembler
30
31 // Define floating point IEEE compare result values.
32 typedef enum
33 {
39
40 // Define floating point format and result precision values.
41 typedef enum
42 {
57
58 // Define operation code values.
59 typedef enum
60 {
101 _FpCodeFmin, // XMMI
102 _FpCodeFmax, // XMMI
104 _XMMIAddps, // XMMI
128 _XMMIAddsubps, // XMMI for PNI
129 _XMMIHaddps, // XMMI for PNI
130 _XMMIHsubps, // XMMI for PNI
131 _XMMIRoundps, // 66 0F 3A 08
132 _XMMIRoundss, // 66 0F 3A 0A
133 _XMMIDpps, // 66 0F 3A 40
134 _XMMI2Addpd, // XMMI2
163 _XMMI2Cvttpd2dq, // 66 0F E6
165 _XMMI2Addsubpd, // 66 0F D0
166 _XMMI2Haddpd, // 66 0F 7C
167 _XMMI2Hsubpd, // 66 0F 7D
168 _XMMI2Roundpd, // 66 0F 3A 09
169 _XMMI2Roundsd, // 66 0F 3A 0B
170 _XMMI2Dppd, // 66 0F 3A 41
172
173#endif // __assembler
174
175#ifdef _CORECRT_BUILD
176 #ifndef __assembler
177
178 #define OP_UNSPEC _FpCodeUnspecified
179 #define OP_ADD _FpCodeAdd
180 #define OP_SUB _FpCodeSubtract
181 #define OP_MUL _FpCodeMultiply
182 #define OP_DIV _FpCodeDivide
183 #define OP_REM _FpCodeRemainder
184 #define OP_COMP _FpCodeCompare
185 #define OP_CVT _FpCodeConvert
186 #define OP_RND _FpCodeRound
187 #define OP_TRUNC _FpCodeTruncate
188
189 #define OP_EXP _FpCodeExp
190
191 #define OP_POW _FpCodePow
192 #define OP_LOG _FpCodeLog
193 #define OP_LOG10 _FpCodeLog10
194 #define OP_SINH _FpCodeSinh
195 #define OP_COSH _FpCodeCosh
196 #define OP_TANH _FpCodeTanh
197 #define OP_ASIN _FpCodeAsin
198 #define OP_ACOS _FpCodeAcos
199 #define OP_ATAN _FpCodeAtan
200 #define OP_ATAN2 _FpCodeAtan2
201 #define OP_SQRT _FpCodeSquareRoot
202 #define OP_SIN _FpCodeSin
203 #define OP_COS _FpCodeCos
204 #define OP_TAN _FpCodeTan
205 #define OP_CEIL _FpCodeCeil
206 #define OP_FLOOR _FpCodeFloor
207 #define OP_ABS _FpCodeFabs
208 #define OP_MODF _FpCodeModf
209 #define OP_LDEXP _FpCodeLdexp
210 #define OP_CABS _FpCodeCabs
211 #define OP_HYPOT _FpCodeHypot
212 #define OP_FMOD _FpCodeFmod
213 #define OP_FREXP _FpCodeFrexp
214 #define OP_Y0 _FpCodeY0
215 #define OP_Y1 _FpCodeY1
216 #define OP_YN _FpCodeYn
217
218 #define OP_LOGB _FpCodeLogb
219 #define OP_NEXTAFTER _FpCodeNextafter
220
221 // XMMI
222 #define OP_ADDPS _XMMIAddps
223 #define OP_ADDSS _XMMIAddss
224 #define OP_SUBPS _XMMISubps
225 #define OP_SUBSS _XMMISubss
226 #define OP_MULPS _XMMIMulps
227 #define OP_MULSS _XMMIMulss
228 #define OP_DIVPS _XMMIDivps
229 #define OP_DIVSS _XMMIDivss
230 #define OP_SQRTPS _XMMISqrtps
231 #define OP_SQRTSS _XMMISqrtss
232 #define OP_MAXPS _XMMIMaxps
233 #define OP_MAXSS _XMMIMaxss
234 #define OP_MINPS _XMMIMinps
235 #define OP_MINSS _XMMIMinss
236 #define OP_CMPPS _XMMICmpps
237 #define OP_CMPSS _XMMICmpss
238 #define OP_COMISS _XMMIComiss
239 #define OP_UCOMISS _XMMIUComiss
240 #define OP_CVTPI2PS _XMMICvtpi2ps
241 #define OP_CVTSI2SS _XMMICvtsi2ss
242 #define OP_CVTPS2PI _XMMICvtps2pi
243 #define OP_CVTSS2SI _XMMICvtss2si
244 #define OP_CVTTPS2PI _XMMICvttps2pi
245 #define OP_CVTTSS2SI _XMMICvttss2si
246 #define OP_ADDSUBPS _XMMIAddsubps
247 #define OP_HADDPS _XMMIHaddps
248 #define OP_HSUBPS _XMMIHsubps
249 #define OP_ROUNDPS _XMMIRoundps
250 #define OP_ROUNDSS _XMMIRoundss
251 #define OP_DPPS _XMMIDpps
252 // XMMI
253
254 // XMMI2
255 #define OP_ADDPD _XMMI2Addpd // XMMI2
256 #define OP_ADDSD _XMMI2Addsd
257 #define OP_SUBPD _XMMI2Subpd
258 #define OP_SUBSD _XMMI2Subsd
259 #define OP_MULPD _XMMI2Mulpd
260 #define OP_MULSD _XMMI2Mulsd
261 #define OP_DIVPD _XMMI2Divpd
262 #define OP_DIVSD _XMMI2Divsd
263 #define OP_SQRTPD _XMMI2Sqrtpd
264 #define OP_SQRTSD _XMMI2Sqrtsd
265 #define OP_MAXPD _XMMI2Maxpd
266 #define OP_MAXSD _XMMI2Maxsd
267 #define OP_MINPD _XMMI2Minpd
268 #define OP_MINSD _XMMI2Minsd
269 #define OP_CMPPD _XMMI2Cmppd
270 #define OP_CMPSD _XMMI2Cmpsd
271 #define OP_COMISD _XMMI2Comisd
272 #define OP_UCOMISD _XMMI2UComisd
273 #define OP_CVTPD2PI _XMMI2Cvtpd2pi // 66 2D
274 #define OP_CVTSD2SI _XMMI2Cvtsd2si // F2
275 #define OP_CVTTPD2PI _XMMI2Cvttpd2pi // 66 2C
276 #define OP_CVTTSD2SI _XMMI2Cvttsd2si // F2
277 #define OP_CVTPS2PD _XMMI2Cvtps2pd // 0F 5A
278 #define OP_CVTSS2SD _XMMI2Cvtss2sd // F3
279 #define OP_CVTPD2PS _XMMI2Cvtpd2ps // 66
280 #define OP_CVTSD2SS _XMMI2Cvtsd2ss // F2
281 #define OP_CVTDQ2PS _XMMI2Cvtdq2ps // 0F 5B
282 #define OP_CVTTPS2DQ _XMMI2Cvttps2dq // F3
283 #define OP_CVTPS2DQ _XMMI2Cvtps2dq // 66
284 #define OP_CVTTPD2DQ _XMMI2Cvttpd2dq // 66 0F E6
285 #define OP_CVTPD2DQ _XMMI2Cvtpd2dq // F2
286 #define OP_ADDSUBPD _XMMI2Addsubpd // 66 0F D0
287 #define OP_HADDPD _XMMI2Haddpd // 66 0F 7C
288 #define OP_HSUBPD _XMMI2Hsubpd // 66 0F 7D
289 #define OP_ROUNDPD _XMMI2Roundpd // 66 0F 3A 09
290 #define OP_ROUNDSD _XMMI2Roundsd // 66 0F 3A 0B
291 #define OP_DPPD _XMMI2Dppd // 66 0F 3A 41
292 // XMMI2
293
294 #else // __assembler
295
296 // This must be the same as the enumerator _FP_OPERATION_CODE
297 #define OP_UNSPEC 0
298 #define OP_ADD 1
299 #define OP_SUB 2
300 #define OP_MUL 3
301 #define OP_DIV 4
302 #define OP_SQRT 5
303 #define OP_REM 6
304 #define OP_COMP 7
305 #define OP_CVT 8
306 #define OP_RND 9
307 #define OP_TRUNC 10
308 #define OP_FLOOR 11
309 #define OP_CEIL 12
310 #define OP_ACOS 13
311 #define OP_ASIN 14
312 #define OP_ATAN 15
313 #define OP_ATAN2 16
314 #define OP_CABS 17
315 #define OP_COS 18
316 #define OP_COSH 19
317 #define OP_EXP 20
318 #define OP_ABS 21 // same as OP_FABS
319 #define OP_FABS 21 // same as OP_ABS
320 #define OP_FMOD 22
321 #define OP_FREXP 23
322 #define OP_HYPOT 24
323 #define OP_LDEXP 25
324 #define OP_LOG 26
325 #define OP_LOG10 27
326 #define OP_MODF 28
327 #define OP_POW 29
328 #define OP_SIN 30
329 #define OP_SINH 31
330 #define OP_TAN 32
331 #define OP_TANH 33
332 #define OP_Y0 34
333 #define OP_Y1 35
334 #define OP_YN 36
335 #define OP_LOGB 37
336 #define OP_NEXTAFTER 38
337 #define OP_NEG 39
338
339 #endif // __assembler
340#endif // _CORECRT_BUILD
341
342// Define rounding modes.
343#ifndef __assembler
344
345 typedef enum
346 {
352
353 typedef enum
354 {
359
360
361 // Define floating point context record
362 typedef float _FP32;
363 typedef double _FP64;
364 typedef short _I16;
365 typedef int _I32;
366 typedef unsigned short _U16;
367 typedef unsigned int _U32;
368 typedef __int64 _Q64;
369
370 #ifdef _CORECRT_BUILD
371 typedef struct
372 {
373 unsigned long W[4];
374 } _U32ARRAY;
375 #endif
376
377 typedef struct
378 {
379 unsigned short W[5];
380 } _FP80;
381
382 typedef struct _CRT_ALIGN(16)
383 {
384 unsigned long W[4];
386
387 typedef struct _CRT_ALIGN(8)
388 {
389 unsigned long W[2];
391
392 typedef struct _CRT_ALIGN(8)
393 {
394 unsigned long W[2];
396
397 typedef struct
398 {
399 unsigned short W[5];
400 } _BCD80;
401
402 typedef struct _CRT_ALIGN(16)
403 {
404 _Q64 W[2];
406
407 typedef struct
408 {
409 union
410 {
411 _FP32 Fp32Value;
412 _FP64 Fp64Value;
413 _FP80 Fp80Value;
414 _FP128 Fp128Value;
415 _I16 I16Value;
416 _I32 I32Value;
417 _I64 I64Value;
418 _U16 U16Value;
419 _U32 U32Value;
420 _U64 U64Value;
421 _BCD80 Bcd80Value;
422 char *StringValue;
423 int CompareValue;
424 #ifdef _CORECRT_BUILD
425 _U32ARRAY U32ArrayValue;
426 #endif
427 _Q64 Q64Value;
428 _FPQ64 Fpq64Value;
430
431 unsigned int OperandValid : 1;
432 unsigned int Format : 4;
433
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;
454 _FPIEEE_VALUE Operand1;
455 _FPIEEE_VALUE Operand2;
458
459
460 struct _EXCEPTION_POINTERS;
461
463
464 // Floating point IEEE exception filter routine
466 _In_ unsigned long _ExceptionCode,
467 _In_ struct _EXCEPTION_POINTERS* _PtExceptionPtr,
469 );
470
471#endif // __assembler
472
474
476#pragma warning(pop) // _UCRT_DISABLED_WARNINGS
477#endif // __midl
478#endif // _INC_FPIEEE
#define __cdecl
Definition: accygwin.h:79
#define __int64
Definition: basetyps.h:16
unsigned short _U16
Definition: fpieee.h:263
_FPQ64
Definition: fpieee.h:297
_FPIEEE_ROUNDING_MODE
Definition: fpieee.h:248
@ _FpRoundNearest
Definition: fpieee.h:249
@ _FpRoundPlusInfinity
Definition: fpieee.h:249
@ _FpRoundChopped
Definition: fpieee.h:249
@ _FpRoundMinusInfinity
Definition: fpieee.h:249
_FP128
Definition: fpieee.h:277
float _FP32
Definition: fpieee.h:259
short _I16
Definition: fpieee.h:261
_FP_OPERATION_CODE
Definition: fpieee.h:28
@ _XMMISubss
Definition: fpieee.h:75
@ _FpCodeUnspecified
Definition: fpieee.h:29
@ _XMMI2Addpd
Definition: fpieee.h:99
@ _FpCodeLogb
Definition: fpieee.h:66
@ _XMMI2Cvtpd2dq
Definition: fpieee.h:129
@ _XMMI2Cvtsd2si
Definition: fpieee.h:118
@ _XMMIComiss
Definition: fpieee.h:88
@ _FpCodeTanh
Definition: fpieee.h:62
@ _FpCodeAtan2
Definition: fpieee.h:45
@ _XMMI2Cmppd
Definition: fpieee.h:113
@ _FpCodeFabs
Definition: fpieee.h:50
@ _FpCodeFmin
Definition: fpieee.h:69
@ _FpCodeAtan
Definition: fpieee.h:44
@ _XMMISqrtss
Definition: fpieee.h:81
@ _FpCodeSquareRoot
Definition: fpieee.h:34
@ _XMMI2Cvttsd2si
Definition: fpieee.h:120
@ _XMMI2Maxsd
Definition: fpieee.h:110
@ _FpCodeTruncate
Definition: fpieee.h:39
@ _FpCodeFmod
Definition: fpieee.h:51
@ _XMMI2Cvtdq2ps
Definition: fpieee.h:125
@ _FpCodeLdexp
Definition: fpieee.h:54
@ _FpCodeSin
Definition: fpieee.h:59
@ _XMMI2Cvtps2pd
Definition: fpieee.h:121
@ _XMMISubps
Definition: fpieee.h:74
@ _XMMI2Subsd
Definition: fpieee.h:102
@ _XMMI2Cvttpd2dq
Definition: fpieee.h:128
@ _XMMIAddsubps
Definition: fpieee.h:96
@ _XMMIMulss
Definition: fpieee.h:77
@ _FpCodeHypot
Definition: fpieee.h:53
@ _FpCodeFrexp
Definition: fpieee.h:52
@ _FpCodeModf
Definition: fpieee.h:57
@ _FpCodeAsin
Definition: fpieee.h:43
@ _FpCodeY0
Definition: fpieee.h:63
@ _XMMIAddps
Definition: fpieee.h:72
@ _XMMI2Cvttpd2pi
Definition: fpieee.h:119
@ _FpCodeDivide
Definition: fpieee.h:33
@ _FpCodeLog10
Definition: fpieee.h:56
@ _FpCodeCos
Definition: fpieee.h:47
@ _FpCodeAcos
Definition: fpieee.h:42
@ _XMMIUComiss
Definition: fpieee.h:89
@ _XMMI2Minpd
Definition: fpieee.h:111
@ _XMMI2Divsd
Definition: fpieee.h:106
@ _XMMICvtpi2ps
Definition: fpieee.h:90
@ _XMMIMinss
Definition: fpieee.h:85
@ _XMMI2Subpd
Definition: fpieee.h:101
@ _XMMICmpss
Definition: fpieee.h:87
@ _XMMI2Cvtss2sd
Definition: fpieee.h:122
@ _XMMICmpps
Definition: fpieee.h:86
@ _XMMI2Mulsd
Definition: fpieee.h:104
@ _XMMI2Cvtsd2ss
Definition: fpieee.h:124
@ _XMMI2Addsd
Definition: fpieee.h:100
@ _FpCodeConvert
Definition: fpieee.h:37
@ _XMMI2Divpd
Definition: fpieee.h:105
@ _XMMISqrtps
Definition: fpieee.h:80
@ _FpCodePow
Definition: fpieee.h:58
@ _FpCodeLog
Definition: fpieee.h:55
@ _FpCodeCompare
Definition: fpieee.h:36
@ _XMMI2Sqrtsd
Definition: fpieee.h:108
@ _XMMI2Mulpd
Definition: fpieee.h:103
@ _FpCodeAdd
Definition: fpieee.h:30
@ _XMMICvtss2si
Definition: fpieee.h:93
@ _XMMI2Hsubpd
Definition: fpieee.h:132
@ _XMMI2Addsubpd
Definition: fpieee.h:130
@ _FpCodeMultiply
Definition: fpieee.h:32
@ _XMMIMinps
Definition: fpieee.h:84
@ _XMMICvttps2pi
Definition: fpieee.h:94
@ _FpCodeNextafter
Definition: fpieee.h:67
@ _XMMI2Minsd
Definition: fpieee.h:112
@ _FpCodeCeil
Definition: fpieee.h:41
@ _FpCodeRemainder
Definition: fpieee.h:35
@ _XMMI2UComisd
Definition: fpieee.h:116
@ _XMMICvtsi2ss
Definition: fpieee.h:91
@ _XMMI2Sqrtpd
Definition: fpieee.h:107
@ _XMMIHaddps
Definition: fpieee.h:97
@ _XMMIDivss
Definition: fpieee.h:79
@ _XMMI2Comisd
Definition: fpieee.h:115
@ _XMMI2Cvttps2dq
Definition: fpieee.h:126
@ _XMMI2Cvtps2dq
Definition: fpieee.h:127
@ _XMMI2Cmpsd
Definition: fpieee.h:114
@ _XMMI2Cvtpd2pi
Definition: fpieee.h:117
@ _XMMIDivps
Definition: fpieee.h:78
@ _XMMICvtps2pi
Definition: fpieee.h:92
@ _FpCodeSubtract
Definition: fpieee.h:31
@ _XMMI2Cvtpd2ps
Definition: fpieee.h:123
@ _FpCodeTan
Definition: fpieee.h:61
@ _XMMIMaxps
Definition: fpieee.h:82
@ _XMMICvttss2si
Definition: fpieee.h:95
@ _XMMIMaxss
Definition: fpieee.h:83
@ _FpCodeRound
Definition: fpieee.h:38
@ _FpCodeExp
Definition: fpieee.h:49
@ _XMMI2Haddpd
Definition: fpieee.h:131
@ _FpCodeConvertTrunc
Definition: fpieee.h:71
@ _FpCodeYn
Definition: fpieee.h:65
@ _FpCodeCosh
Definition: fpieee.h:48
@ _FpCodeCabs
Definition: fpieee.h:46
@ _FpCodeSinh
Definition: fpieee.h:60
@ _FpCodeFmax
Definition: fpieee.h:70
@ _XMMI2Maxpd
Definition: fpieee.h:109
@ _FpCodeNegate
Definition: fpieee.h:68
@ _XMMIHsubps
Definition: fpieee.h:98
@ _FpCodeY1
Definition: fpieee.h:64
@ _XMMIAddss
Definition: fpieee.h:73
@ _FpCodeFloor
Definition: fpieee.h:40
@ _XMMIMulps
Definition: fpieee.h:76
unsigned int _U32
Definition: fpieee.h:264
_FPIEEE_PRECISION
Definition: fpieee.h:252
@ _FpPrecision53
Definition: fpieee.h:253
@ _FpPrecision24
Definition: fpieee.h:253
@ _FpPrecisionFull
Definition: fpieee.h:253
_FPIEEE_FORMAT
Definition: fpieee.h:21
@ _FpFormatU16
Definition: fpieee.h:22
@ _FpFormatFp64
Definition: fpieee.h:22
@ _FpFormatFp32
Definition: fpieee.h:22
@ _FpFormatBcd80
Definition: fpieee.h:22
@ _FpFormatU32
Definition: fpieee.h:22
@ _FpFormatCompare
Definition: fpieee.h:22
@ _FpFormatString
Definition: fpieee.h:22
@ _FpFormatU64
Definition: fpieee.h:22
@ _FpFormatI16
Definition: fpieee.h:22
@ _FpFormatI32
Definition: fpieee.h:22
@ _FpFormatI64
Definition: fpieee.h:22
@ _FpFormatFp128
Definition: fpieee.h:22
@ _FpFormatFp80
Definition: fpieee.h:22
_CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode, struct _EXCEPTION_POINTERS *_PtExceptionPtr, int(__cdecl *_Handler)(_FPIEEE_RECORD *))
_I64
Definition: fpieee.h:281
_U64
Definition: fpieee.h:285
double _FP64
Definition: fpieee.h:260
int _I32
Definition: fpieee.h:262
struct _FPIEEE_RECORD * _PFPIEEE_RECORD
__MINGW_EXTENSION typedef __int64 _Q64
Definition: fpieee.h:265
_FPIEEE_COMPARE_RESULT
Definition: fpieee.h:17
@ _FpCompareGreater
Definition: fpieee.h:18
@ _FpCompareLess
Definition: fpieee.h:18
@ _FpCompareEqual
Definition: fpieee.h:18
@ _FpCompareUnordered
Definition: fpieee.h:18
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
FP_OP Operation
Definition: fpcontrol.c:150
Status
Definition: gdiplustypes.h:25
#define _In_
Definition: no_sal2.h:158
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142
Definition: polytest.cpp:36
Definition: fpieee.h:291
Definition: fpieee.h:271
#define _CRT_ALIGN(x)
Definition: corecrt.h:217
#define _ACRTIMP
Definition: corecrt.h:138
#define _UCRT_DISABLE_CLANG_WARNINGS
Definition: corecrt.h:109
#define _UCRT_RESTORE_CLANG_WARNINGS
Definition: corecrt.h:117
__int64 _Q64
Definition: fpieee.h:368
@ _XMMIRoundps
Definition: fpieee.h:131
@ _XMMI2Roundpd
Definition: fpieee.h:168
@ _XMMI2Roundsd
Definition: fpieee.h:169
@ _XMMIRoundss
Definition: fpieee.h:132
@ _XMMIDpps
Definition: fpieee.h:133
@ _XMMI2Dppd
Definition: fpieee.h:170
int(__cdecl * _FpieeFltHandlerType)(_FPIEEE_RECORD *)
Definition: fpieee.h:462
#define _CRT_END_C_HEADER
Definition: vcruntime.h:42
#define _CRT_BEGIN_C_HEADER
Definition: vcruntime.h:40
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409