msvcp: Add _Dtest implementation.
This commit is contained in:
parent
874c3f96f7
commit
1e9402124d
|
@ -2892,14 +2892,14 @@
|
|||
@ extern _Denorm
|
||||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
@ stub _FCosh
|
||||
@ extern _FDenorm
|
||||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
@ extern _FInf
|
||||
|
@ -2920,7 +2920,7 @@
|
|||
@ stub _LCosh
|
||||
@ extern _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
@ extern _LInf
|
||||
|
|
|
@ -3745,7 +3745,7 @@
|
|||
@ cdecl _Do_call(ptr)
|
||||
@ stub _Dscale
|
||||
@ stub _Dtento
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ stub _Dunscale
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
|
@ -3755,7 +3755,7 @@
|
|||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtento
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ stub _FDunscale
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
|
@ -3791,7 +3791,7 @@
|
|||
@ stub _LDint
|
||||
@ stub _LDscale
|
||||
@ stub _LDtento
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ stub _LDunscale
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
|
|
|
@ -3686,7 +3686,7 @@
|
|||
@ cdecl _Do_call(ptr)
|
||||
@ stub _Dscale
|
||||
@ stub _Dtento
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ stub _Dunscale
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
|
@ -3696,7 +3696,7 @@
|
|||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtento
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ stub _FDunscale
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
|
@ -3734,7 +3734,7 @@
|
|||
@ stub _LDint
|
||||
@ stub _LDscale
|
||||
@ stub _LDtento
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ stub _LDunscale
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
|
|
|
@ -18,10 +18,25 @@
|
|||
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "wine/test.h"
|
||||
#include "winbase.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()
|
||||
|
||||
typedef int MSVCRT_long;
|
||||
typedef unsigned char MSVCP_bool;
|
||||
|
||||
|
@ -70,6 +85,7 @@ static _Cvtvec* (__cdecl *p__Getcvt)(_Cvtvec*);
|
|||
static void (CDECL *p__Call_once)(int *once, void (CDECL *func)(void));
|
||||
static void (CDECL *p__Call_onceEx)(int *once, void (CDECL *func)(void*), void *argv);
|
||||
static void (CDECL *p__Do_call)(void *this);
|
||||
static short (__cdecl *p__Dtest)(double *d);
|
||||
|
||||
/* filesystem */
|
||||
static ULONGLONG(__cdecl *p_tr2_sys__File_size)(char const*);
|
||||
|
@ -119,6 +135,8 @@ static BOOL init(void)
|
|||
"_Call_onceEx");
|
||||
SET(p__Do_call,
|
||||
"_Do_call");
|
||||
SET(p__Dtest,
|
||||
"_Dtest");
|
||||
if(sizeof(void*) == 8) { /* 64-bit initialization */
|
||||
SET(p_tr2_sys__File_size,
|
||||
"?_File_size@sys@tr2@std@@YA_KPEBD@Z");
|
||||
|
@ -407,6 +425,32 @@ static void test__Do_call(void)
|
|||
ok(cnt == 1, "func was not called\n");
|
||||
}
|
||||
|
||||
static void test__Dtest(void)
|
||||
{
|
||||
double d;
|
||||
short ret;
|
||||
|
||||
d = 0;
|
||||
ret = p__Dtest(&d);
|
||||
ok(ret == FP_ZERO, "_Dtest(0) returned %x\n", ret);
|
||||
|
||||
d = 1;
|
||||
ret = p__Dtest(&d);
|
||||
ok(ret == FP_NORMAL, "_Dtest(1) returned %x\n", ret);
|
||||
|
||||
d = -1;
|
||||
ret = p__Dtest(&d);
|
||||
ok(ret == FP_NORMAL, "_Dtest(-1) returned %x\n", ret);
|
||||
|
||||
d = INFINITY;
|
||||
ret = p__Dtest(&d);
|
||||
ok(ret == FP_INFINITE, "_Dtest(INF) returned %x\n", ret);
|
||||
|
||||
d = NAN;
|
||||
ret = p__Dtest(&d);
|
||||
ok(ret == FP_NAN, "_Dtest(NAN) returned %x\n", ret);
|
||||
}
|
||||
|
||||
static void test_tr2_sys__File_size(void)
|
||||
{
|
||||
ULONGLONG val;
|
||||
|
@ -910,6 +954,7 @@ START_TEST(msvcp120)
|
|||
test__Getcvt();
|
||||
test__Call_once();
|
||||
test__Do_call();
|
||||
test__Dtest();
|
||||
|
||||
test_tr2_sys__File_size();
|
||||
test_tr2_sys__Equivalent();
|
||||
|
|
|
@ -3686,7 +3686,7 @@
|
|||
@ cdecl _Do_call(ptr) msvcp120._Do_call
|
||||
@ stub _Dscale
|
||||
@ stub _Dtento
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr) msvcp120._Dtest
|
||||
@ stub _Dunscale
|
||||
@ extern _Eps msvcp120._Eps
|
||||
@ stub _Exp
|
||||
|
@ -3696,7 +3696,7 @@
|
|||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtento
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr) msvcp120._FDtest
|
||||
@ stub _FDunscale
|
||||
@ extern _FEps msvcp120._FEps
|
||||
@ stub _FExp
|
||||
|
@ -3734,7 +3734,7 @@
|
|||
@ stub _LDint
|
||||
@ stub _LDscale
|
||||
@ stub _LDtento
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) msvcp120._LDtest
|
||||
@ stub _LDunscale
|
||||
@ extern _LEps msvcp120._LEps
|
||||
@ stub _LExp
|
||||
|
|
|
@ -4258,14 +4258,14 @@
|
|||
@ extern _Denorm _Denorm
|
||||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ extern _Eps _Eps
|
||||
@ stub _Exp
|
||||
@ stub _FCosh
|
||||
@ extern _FDenorm _FDenorm
|
||||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ extern _FEps _FEps
|
||||
@ stub _FExp
|
||||
@ extern _FInf _FInf
|
||||
|
@ -4282,7 +4282,7 @@
|
|||
@ stub _LCosh
|
||||
@ extern _LDenorm _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ extern _LEps _LEps
|
||||
@ stub _LExp
|
||||
@ extern _LInf _LInf
|
||||
|
|
|
@ -5044,14 +5044,14 @@
|
|||
@ extern _Denorm
|
||||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
@ stub _FCosh
|
||||
@ extern _FDenorm
|
||||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
@ extern _FInf
|
||||
|
@ -5069,7 +5069,7 @@
|
|||
@ stub _LCosh
|
||||
@ extern _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
@ extern _LInf
|
||||
|
|
|
@ -5098,14 +5098,14 @@
|
|||
@ extern _Denorm
|
||||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
@ stub _FCosh
|
||||
@ extern _FDenorm
|
||||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
@ extern _FInf
|
||||
|
@ -5125,7 +5125,7 @@
|
|||
@ stub _LCosh
|
||||
@ extern _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
@ extern _LInf
|
||||
|
|
|
@ -5705,7 +5705,7 @@
|
|||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtentox
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ stub _Dunscale
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
|
@ -5714,7 +5714,7 @@
|
|||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtentox
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ stub _FDunscale
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
|
@ -5736,7 +5736,7 @@
|
|||
@ extern _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtentox
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ stub _LDunscale
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
|
|
|
@ -2226,3 +2226,37 @@ complex_double* __cdecl complex_double_sqrt(complex_double *ret, const complex_d
|
|||
complex_double c = { 0.5, 0 };
|
||||
return complex_double_pow(ret, l, &c);
|
||||
}
|
||||
|
||||
static short dclass(double x)
|
||||
{
|
||||
switch(_fpclass(x)) {
|
||||
case _FPCLASS_SNAN:
|
||||
case _FPCLASS_QNAN:
|
||||
return FP_NAN;
|
||||
case _FPCLASS_NINF:
|
||||
case _FPCLASS_PINF:
|
||||
return FP_INFINITE;
|
||||
case _FPCLASS_ND:
|
||||
case _FPCLASS_PD:
|
||||
return FP_SUBNORMAL;
|
||||
case _FPCLASS_NN:
|
||||
case _FPCLASS_PN:
|
||||
default:
|
||||
return FP_NORMAL;
|
||||
case _FPCLASS_NZ:
|
||||
case _FPCLASS_PZ:
|
||||
return FP_ZERO;
|
||||
}
|
||||
}
|
||||
|
||||
/* _Dtest */
|
||||
short __cdecl _Dtest(double *x)
|
||||
{
|
||||
return dclass(*x);
|
||||
}
|
||||
|
||||
/* _FDtest */
|
||||
short __cdecl _FDtest(float *x)
|
||||
{
|
||||
return dclass(*x);
|
||||
}
|
||||
|
|
|
@ -6480,14 +6480,14 @@
|
|||
@ extern _Denorm
|
||||
@ stub _Dnorm
|
||||
@ stub _Dscale
|
||||
@ stub _Dtest
|
||||
@ cdecl _Dtest(ptr)
|
||||
@ extern _Eps
|
||||
@ stub _Exp
|
||||
@ stub _FCosh
|
||||
@ extern _FDenorm
|
||||
@ stub _FDnorm
|
||||
@ stub _FDscale
|
||||
@ stub _FDtest
|
||||
@ cdecl _FDtest(ptr)
|
||||
@ extern _FEps
|
||||
@ stub _FExp
|
||||
@ extern _FInf
|
||||
|
@ -6507,7 +6507,7 @@
|
|||
@ stub _LCosh
|
||||
@ extern _LDenorm
|
||||
@ stub _LDscale
|
||||
@ stub _LDtest
|
||||
@ cdecl _LDtest(ptr) _Dtest
|
||||
@ extern _LEps
|
||||
@ stub _LExp
|
||||
@ extern _LInf
|
||||
|
|
|
@ -146,6 +146,12 @@ static const union {
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#define FP_INFINITE 1
|
||||
#define FP_NAN 2
|
||||
#define FP_NORMAL -1
|
||||
#define FP_SUBNORMAL -2
|
||||
#define FP_ZERO 0
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue