include/msvcrt: Add INFINITY and NAN definitions.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2019-05-30 09:09:59 +02:00
parent d535df42f6
commit a16ef96dc6
13 changed files with 28 additions and 179 deletions

View File

@ -22,25 +22,6 @@
#include "wine/test.h"
#include "d3dx9.h"
#ifndef INFINITY
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
#endif /* INFINITY */
#ifndef NAN
static float get_nan(void)
{
DWORD nan = 0x7fc00000;
return *(float *)&nan;
}
#define NAN get_nan()
#endif
/* helper functions */
static BOOL compare_float(FLOAT f, FLOAT g, UINT ulps)
{

View File

@ -18,6 +18,7 @@
#include <fcntl.h>
#include <float.h>
#include <math.h>
#include <io.h>
#include <stdio.h>
#include <windef.h>
@ -180,20 +181,6 @@ typedef struct {
exception e;
} logic_error;
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
#undef __thiscall
#ifdef __i386__
#define __thiscall __stdcall

View File

@ -169,20 +169,6 @@ static void init_thiscall_thunk(void)
#define call_func7(func,_this,a,b,c,d,e,f) func(_this,a,b,c,d,e,f)
#endif /* __i386__ */
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
typedef int MSVCRT_long;
typedef unsigned char MSVCP_bool;

View File

@ -27,20 +27,6 @@
#include <winbase.h>
#include "wine/test.h"
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline float __port_ind(void)
{
static const unsigned __ind_bytes = 0xffc00000;

View File

@ -22,6 +22,7 @@
#include <wchar.h>
#include <stdio.h>
#include <float.h>
#include <math.h>
#include <limits.h>
#include <wctype.h>
@ -114,30 +115,6 @@ typedef struct {
critical_section lock;
} _Condition_variable;
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline int isnormal(double d)
{
return _fpclass(d) & (_FPCLASS_PN | _FPCLASS_NN);
}
static inline int isinf(double d)
{
return _fpclass(d) & (_FPCLASS_PINF | _FPCLASS_NINF);
}
struct MSVCRT_lconv
{
char* decimal_point;

View File

@ -25,20 +25,6 @@
#include "msvcrt.h"
#include <process.h>
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline BOOL almost_equal(double d1, double d2) {
if(d1-d2>-1e-30 && d1-d2<1e-30)
return TRUE;

View File

@ -24,9 +24,10 @@
* the following macro is defined.
*/
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include <locale.h>
#include "windef.h"
@ -35,20 +36,6 @@
#include "wine/test.h"
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline float __port_ind(void)
{
static const unsigned __ind_bytes = 0xffc00000;

View File

@ -21,6 +21,7 @@
#include <stdlib.h>
#include <wchar.h>
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <io.h>
#include <sys/stat.h>
@ -57,20 +58,6 @@
expect_ ## func = called_ ## func = FALSE; \
}while(0)
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline double __port_min_pos_double(void)
{
static const UINT64 __min_pos_double = 0x10000000000000;

View File

@ -23,6 +23,7 @@
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include "windef.h"
#include "winbase.h"
@ -66,20 +67,6 @@ DEFINE_EXPECT(invalid_parameter_handler);
#define UCRTBASE_PRINTF_LEGACY_MSVCRT_COMPATIBILITY (0x0008)
#define UCRTBASE_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS (0x0010)
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
static inline float __port_ind(void)
{
static const unsigned __ind_bytes = 0xffc00000;

View File

@ -57,24 +57,6 @@ DEFINE_EXPECT(invalid_parameter_handler);
static _invalid_parameter_handler (__cdecl *p_set_invalid_parameter_handler)(_invalid_parameter_handler);
#ifndef INFINITY
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
#endif
#ifndef NAN
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
#endif
static void __cdecl test_invalid_parameter_handler(const wchar_t *expression,
const wchar_t *function, const wchar_t *file,
unsigned line, uintptr_t arg)

View File

@ -17,30 +17,12 @@
*/
#include <stdio.h>
#include <math.h>
#include "windows.h"
#include "rpc.h"
#include "webservices.h"
#include "wine/test.h"
#include <math.h>
#ifndef INFINITY
static inline float __port_infinity(void)
{
static const unsigned __inf_bytes = 0x7f800000;
return *(const float *)&__inf_bytes;
}
#define INFINITY __port_infinity()
#endif
#ifndef NAN
static inline float __port_nan(void)
{
static const unsigned __nan_bytes = 0x7fc00000;
return *(const float *)&__nan_bytes;
}
#define NAN __port_nan()
#endif
static HRESULT set_output( WS_XML_WRITER *writer )
{
WS_XML_WRITER_TEXT_ENCODING text = { {WS_XML_WRITER_ENCODING_TYPE_TEXT}, WS_CHARSET_UTF8 };

View File

@ -205,6 +205,18 @@ static const union {
# endif
#endif
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
# define INFINITY __builtin_inff()
# define NAN __builtin_nanf("")
#else
static const union {
unsigned int __i;
float __f;
} __inff = { 0x7f800000 }, __nanf = { 0x7fc00000 };
# define INFINITY (__inff.__f)
# define NAN (__nanf.__f)
#endif
#define FP_INFINITE 1
#define FP_NAN 2
#define FP_NORMAL -1

View File

@ -46,6 +46,15 @@
#define INVALID_SET_FILE_POINTER (~0u)
#endif
#ifdef _MSC_VER
# ifndef INFINITY
# define INFINITY ((float)HUGE_VAL)
# endif
# ifndef NAN
# define NAN (INFINITY * 0.0f)
# endif
#endif
/* debug level */
extern int winetest_debug;