Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_FPIEEE
      7 #define _INC_FPIEEE
      8 
      9 #include <crtdefs.h>
     10 
     11 #pragma pack(push,_CRT_PACKING)
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17   typedef enum {
     18     _FpCompareEqual,_FpCompareGreater,_FpCompareLess,_FpCompareUnordered
     19   } _FPIEEE_COMPARE_RESULT;
     20 
     21   typedef enum {
     22     _FpFormatFp32,_FpFormatFp64,_FpFormatFp80,_FpFormatFp128,_FpFormatI16,_FpFormatI32,
     23     _FpFormatI64,_FpFormatU16,_FpFormatU32,_FpFormatU64,_FpFormatBcd80,_FpFormatCompare,
     24     _FpFormatString,
     25 #if defined(__ia64__)
     26     _FpFormatFp82
     27 #endif
     28   } _FPIEEE_FORMAT;
     29 
     30   typedef enum {
     31     _FpCodeUnspecified,_FpCodeAdd,_FpCodeSubtract,_FpCodeMultiply,_FpCodeDivide,
     32     _FpCodeSquareRoot,_FpCodeRemainder,_FpCodeCompare,_FpCodeConvert,_FpCodeRound,
     33     _FpCodeTruncate,_FpCodeFloor,_FpCodeCeil,_FpCodeAcos,_FpCodeAsin,_FpCodeAtan,
     34     _FpCodeAtan2,_FpCodeCabs,_FpCodeCos,_FpCodeCosh,_FpCodeExp,_FpCodeFabs,_FpCodeFmod,
     35     _FpCodeFrexp,_FpCodeHypot,_FpCodeLdexp,_FpCodeLog,_FpCodeLog10,_FpCodeModf,
     36     _FpCodePow,_FpCodeSin,_FpCodeSinh,_FpCodeTan,_FpCodeTanh,_FpCodeY0,_FpCodeY1,
     37     _FpCodeYn,_FpCodeLogb,_FpCodeNextafter,_FpCodeNegate,_FpCodeFmin,_FpCodeFmax,
     38     _FpCodeConvertTrunc,
     39     _XMMIAddps,_XMMIAddss,_XMMISubps,_XMMISubss,_XMMIMulps,_XMMIMulss,_XMMIDivps,
     40     _XMMIDivss,_XMMISqrtps,_XMMISqrtss,_XMMIMaxps,_XMMIMaxss,_XMMIMinps,_XMMIMinss,
     41     _XMMICmpps,_XMMICmpss,_XMMIComiss,_XMMIUComiss,_XMMICvtpi2ps,_XMMICvtsi2ss,
     42     _XMMICvtps2pi,_XMMICvtss2si,_XMMICvttps2pi,_XMMICvttss2si,_XMMIAddsubps,_XMMIHaddps,
     43     _XMMIHsubps,_XMMI2Addpd,_XMMI2Addsd,_XMMI2Subpd,_XMMI2Subsd,_XMMI2Mulpd,_XMMI2Mulsd,
     44     _XMMI2Divpd,_XMMI2Divsd,_XMMI2Sqrtpd,_XMMI2Sqrtsd,_XMMI2Maxpd,_XMMI2Maxsd,_XMMI2Minpd,
     45     _XMMI2Minsd,_XMMI2Cmppd,_XMMI2Cmpsd,_XMMI2Comisd,_XMMI2UComisd,_XMMI2Cvtpd2pi,
     46     _XMMI2Cvtsd2si,_XMMI2Cvttpd2pi,_XMMI2Cvttsd2si,_XMMI2Cvtps2pd,_XMMI2Cvtss2sd,
     47     _XMMI2Cvtpd2ps,_XMMI2Cvtsd2ss,_XMMI2Cvtdq2ps,_XMMI2Cvttps2dq,_XMMI2Cvtps2dq,
     48     _XMMI2Cvttpd2dq,_XMMI2Cvtpd2dq,_XMMI2Addsubpd,_XMMI2Haddpd,_XMMI2Hsubpd,
     49 #if defined(__ia64__)
     50     _FpCodeFma,_FpCodeFmaSingle,_FpCodeFmaDouble,_FpCodeFms,_FpCodeFmsSingle,
     51     _FpCodeFmsDouble,_FpCodeFnma,_FpCodeFnmaSingle,_FpCodeFnmaDouble,_FpCodeFamin,
     52     _FpCodeFamax
     53 #endif
     54   } _FP_OPERATION_CODE;
     55 
     56   typedef enum {
     57     _FpRoundNearest,_FpRoundMinusInfinity,_FpRoundPlusInfinity,_FpRoundChopped
     58   } _FPIEEE_ROUNDING_MODE;
     59 
     60   typedef enum {
     61     _FpPrecisionFull,_FpPrecision53,_FpPrecision24,
     62 #if defined(__ia64__)
     63     _FpPrecision64,_FpPrecision113
     64 #endif
     65   } _FPIEEE_PRECISION;
     66 
     67   typedef float _FP32;
     68   typedef double _FP64;
     69   typedef short _I16;
     70   typedef int _I32;
     71   typedef unsigned short _U16;
     72   typedef unsigned int _U32;
     73   __MINGW_EXTENSION typedef __int64 _Q64;
     74 
     75   typedef struct
     76 #if defined(__ia64__)
     77     _CRT_ALIGN(16)
     78 #endif
     79   {
     80     unsigned short W[5];
     81   } _FP80;
     82 
     83   typedef struct _CRT_ALIGN(16) {
     84     unsigned long W[4];
     85   } _FP128;
     86 
     87   typedef struct _CRT_ALIGN(8) {
     88     unsigned long W[2];
     89   } _I64;
     90 
     91   typedef struct _CRT_ALIGN(8) {
     92     unsigned long W[2];
     93   } _U64;
     94 
     95   typedef struct
     96 #if defined(__ia64__)
     97     _CRT_ALIGN(16)
     98 #endif
     99   {
    100     unsigned short W[5];
    101   } _BCD80;
    102 
    103   typedef struct _CRT_ALIGN(16) {
    104     _Q64 W[2];
    105   } _FPQ64;
    106 
    107   typedef struct {
    108     union {
    109       _FP32 Fp32Value;
    110       _FP64 Fp64Value;
    111       _FP80 Fp80Value;
    112       _FP128 Fp128Value;
    113       _I16 I16Value;
    114       _I32 I32Value;
    115       _I64 I64Value;
    116       _U16 U16Value;
    117       _U32 U32Value;
    118       _U64 U64Value;
    119       _BCD80 Bcd80Value;
    120       char *StringValue;
    121       int CompareValue;
    122       _Q64 Q64Value;
    123       _FPQ64 Fpq64Value;
    124     } Value;
    125     unsigned int OperandValid : 1;
    126     unsigned int Format : 4;
    127   } _FPIEEE_VALUE;
    128 
    129   typedef struct {
    130     unsigned int Inexact : 1;
    131     unsigned int Underflow : 1;
    132     unsigned int Overflow : 1;
    133     unsigned int ZeroDivide : 1;
    134     unsigned int InvalidOperation : 1;
    135   } _FPIEEE_EXCEPTION_FLAGS;
    136 
    137   typedef struct {
    138     unsigned int RoundingMode : 2;
    139     unsigned int Precision : 3;
    140     unsigned int Operation :12;
    141     _FPIEEE_EXCEPTION_FLAGS Cause;
    142     _FPIEEE_EXCEPTION_FLAGS Enable;
    143     _FPIEEE_EXCEPTION_FLAGS Status;
    144     _FPIEEE_VALUE Operand1;
    145     _FPIEEE_VALUE Operand2;
    146     _FPIEEE_VALUE Result;
    147 #if defined(__ia64__)
    148     _FPIEEE_VALUE Operand3;
    149 #endif
    150   } _FPIEEE_RECORD,*_PFPIEEE_RECORD;
    151 
    152   struct _EXCEPTION_POINTERS;
    153 
    154   _CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode,struct _EXCEPTION_POINTERS *_PtExceptionPtr,int (__cdecl *_Handler)(_FPIEEE_RECORD *));
    155 
    156 #ifdef __cplusplus
    157 }
    158 #endif
    159 
    160 #pragma pack(pop)
    161 #endif
    162