162 lines
4.6 KiB
C
162 lines
4.6 KiB
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the w64 mingw-runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER within this package.
|
|
*/
|
|
#ifndef _INC_FPIEEE
|
|
#define _INC_FPIEEE
|
|
|
|
#include <_mingw.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
|