From 514ff74e9bb222bcc1e1e9829ad412d91ae5efe3 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 24 Aug 2016 13:57:49 +0200 Subject: [PATCH] include: Add msvcrt/fpieee.h header. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- include/Makefile.in | 1 + include/msvcrt/fpieee.h | 239 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 240 insertions(+) create mode 100644 include/msvcrt/fpieee.h diff --git a/include/Makefile.in b/include/Makefile.in index 4aaefaf8768..89004b8a907 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -473,6 +473,7 @@ HEADER_SRCS = \ msvcrt/errno.h \ msvcrt/fcntl.h \ msvcrt/float.h \ + msvcrt/fpieee.h \ msvcrt/io.h \ msvcrt/limits.h \ msvcrt/locale.h \ diff --git a/include/msvcrt/fpieee.h b/include/msvcrt/fpieee.h new file mode 100644 index 00000000000..67f6d1147ad --- /dev/null +++ b/include/msvcrt/fpieee.h @@ -0,0 +1,239 @@ +/** + * Derived from mingw-w64 header. + * This file is in the public domain. + */ +#ifndef __WINE_FPIEEE_H +#define __WINE_FPIEEE_H + +#include + +#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, +} _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, +} _FP_OPERATION_CODE; + +typedef enum { + _FpRoundNearest, + _FpRoundMinusInfinity, + _FpRoundPlusInfinity, + _FpRoundChopped +} _FPIEEE_ROUNDING_MODE; + +typedef enum { + _FpPrecisionFull, + _FpPrecision53, + _FpPrecision24, +} _FPIEEE_PRECISION; + +typedef float _FP32; +typedef double _FP64; +typedef short _I16; +typedef int _I32; +typedef unsigned short _U16; +typedef unsigned int _U32; +typedef __int64 _Q64; + +typedef struct { + unsigned short W[5]; +} _FP80; + +typedef struct DECLSPEC_ALIGN(16) { + __msvcrt_ulong W[4]; +} _FP128; + +typedef struct DECLSPEC_ALIGN(8) { + __msvcrt_ulong W[2]; +} _I64; + +typedef struct DECLSPEC_ALIGN(8) { + __msvcrt_ulong W[2]; +} _U64; + +typedef struct { + unsigned short W[5]; +} _BCD80; + +typedef struct DECLSPEC_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; +} _FPIEEE_RECORD,*_PFPIEEE_RECORD; + +struct _EXCEPTION_POINTERS; + +int __cdecl _fpieee_flt(__msvcrt_ulong _ExceptionCode,struct _EXCEPTION_POINTERS *_PtExceptionPtr,int (__cdecl *_Handler)(_FPIEEE_RECORD *)); + +#ifdef __cplusplus +} +#endif + +#endif