From: Piotr Caban Subject: [PATCH 1/2 v2] msvcp: Add _Dscale implementation Message-Id: <560D6275.6000801@codeweavers.com> Date: Thu, 1 Oct 2015 18:42:29 +0200 Signed-off-by: Piotr Caban --- dlls/msvcp100/msvcp100.spec | 6 ++--- dlls/msvcp110/msvcp110.spec | 6 ++--- dlls/msvcp120/msvcp120.spec | 6 ++--- dlls/msvcp120/tests/msvcp120.c | 54 +++++++++++++++++++++++++++++++++++++ dlls/msvcp120_app/msvcp120_app.spec | 6 ++--- dlls/msvcp60/msvcp60.spec | 6 ++--- dlls/msvcp70/msvcp70.spec | 6 ++--- dlls/msvcp71/msvcp71.spec | 6 ++--- dlls/msvcp80/msvcp80.spec | 6 ++--- dlls/msvcp90/math.c | 14 ++++++++++ dlls/msvcp90/msvcp90.spec | 6 ++--- 11 files changed, 95 insertions(+), 27 deletions(-) diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec index 6738979..c5d8fcc 100644 --- a/dlls/msvcp100/msvcp100.spec +++ b/dlls/msvcp100/msvcp100.spec @@ -2891,14 +2891,14 @@ @ stub _Cosh @ extern _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ cdecl _Dtest(ptr) @ extern _Eps @ stub _Exp @ stub _FCosh @ extern _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ cdecl _FDtest(ptr) @ extern _FEps @ stub _FExp @@ -2919,7 +2919,7 @@ @ extern _Inf @ stub _LCosh @ extern _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ cdecl _LDtest(ptr) _Dtest @ extern _LEps @ stub _LExp diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index f571a55..a3776cf 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -3743,7 +3743,7 @@ @ stub _Dint @ stub _Dnorm @ cdecl _Do_call(ptr) -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ stub _Dtento @ cdecl _Dtest(ptr) @ stub _Dunscale @@ -3753,7 +3753,7 @@ @ extern _FDenorm @ stub _FDint @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ stub _FDtento @ cdecl _FDtest(ptr) @ stub _FDunscale @@ -3789,7 +3789,7 @@ @ stub _LCosh @ extern _LDenorm @ stub _LDint -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ stub _LDtento @ cdecl _LDtest(ptr) _Dtest @ stub _LDunscale diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index 8da3cc7..2b07f13 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -3684,7 +3684,7 @@ @ stub _Dint @ stub _Dnorm @ cdecl _Do_call(ptr) -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ stub _Dtento @ cdecl _Dtest(ptr) @ stub _Dunscale @@ -3694,7 +3694,7 @@ @ extern _FDenorm @ stub _FDint @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ stub _FDtento @ cdecl _FDtest(ptr) @ stub _FDunscale @@ -3732,7 +3732,7 @@ @ stub _LCosh @ extern _LDenorm @ stub _LDint -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ stub _LDtento @ cdecl _LDtest(ptr) _Dtest @ stub _LDunscale diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c index bf7ed8f..358c408 100644 --- a/dlls/msvcp120/tests/msvcp120.c +++ b/dlls/msvcp120/tests/msvcp120.c @@ -86,6 +86,7 @@ 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); +static short (__cdecl *p__Dscale)(double *d, int exp); /* filesystem */ static ULONGLONG(__cdecl *p_tr2_sys__File_size)(char const*); @@ -139,6 +140,8 @@ static BOOL init(void) "_Do_call"); SET(p__Dtest, "_Dtest"); + SET(p__Dscale, + "_Dscale"); if(sizeof(void*) == 8) { /* 64-bit initialization */ SET(p_tr2_sys__File_size, "?_File_size@sys@tr2@std@@YA_KPEBD@Z"); @@ -461,6 +464,56 @@ static void test__Dtest(void) ok(ret == FP_NAN, "_Dtest(NAN) returned %x\n", ret); } +static void test__Dscale(void) +{ + double d; + short ret; + + d = 0; + ret = p__Dscale(&d, 0); + ok(d == 0, "d = %f\n", d); + ok(ret == FP_ZERO, "ret = %x\n", ret); + + d = 0; + ret = p__Dscale(&d, 1); + ok(d == 0, "d = %f\n", d); + ok(ret == FP_ZERO, "ret = %x\n", ret); + + d = 0; + ret = p__Dscale(&d, -1); + ok(d == 0, "d = %f\n", d); + ok(ret == FP_ZERO, "ret = %x\n", ret); + + d = 1; + ret = p__Dscale(&d, 0); + ok(d == 1, "d = %f\n", d); + ok(ret == FP_NORMAL, "ret = %x\n", ret); + + d = 1; + ret = p__Dscale(&d, 1); + ok(d == 2, "d = %f\n", d); + ok(ret == FP_NORMAL, "ret = %x\n", ret); + + d = 1; + ret = p__Dscale(&d, -1); + ok(d == 0.5, "d = %f\n", d); + ok(ret == FP_NORMAL, "ret = %x\n", ret); + + d = 1; + ret = p__Dscale(&d, -99999); + ok(d == 0, "d = %f\n", d); + ok(ret == FP_ZERO, "ret = %x\n", ret); + + d = 1; + ret = p__Dscale(&d, 999999); + ok(d == INFINITY, "d = %f\n", d); + ok(ret == FP_INFINITE, "ret = %x\n", ret); + + d = NAN; + ret = p__Dscale(&d, 1); + ok(ret == FP_NAN, "ret = %x\n", ret); +} + static void test_tr2_sys__File_size(void) { ULONGLONG val; @@ -1001,6 +1054,7 @@ START_TEST(msvcp120) test__Call_once(); test__Do_call(); test__Dtest(); + test__Dscale(); test_tr2_sys__File_size(); test_tr2_sys__Equivalent(); diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index bf7b542..1470b3c 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -3684,7 +3684,7 @@ @ stub _Dint @ stub _Dnorm @ cdecl _Do_call(ptr) msvcp120._Do_call -@ stub _Dscale +@ cdecl _Dscale(ptr long) msvcp120._Dscale @ stub _Dtento @ cdecl _Dtest(ptr) msvcp120._Dtest @ stub _Dunscale @@ -3694,7 +3694,7 @@ @ extern _FDenorm msvcp120._FDenorm @ stub _FDint @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) msvcp120._FDscale @ stub _FDtento @ cdecl _FDtest(ptr) msvcp120._FDtest @ stub _FDunscale @@ -3732,7 +3732,7 @@ @ stub _LCosh @ extern _LDenorm msvcp120._LDenorm @ stub _LDint -@ stub _LDscale +@ cdecl _LDscale(ptr long) msvcp120._LDscale @ stub _LDtento @ cdecl _LDtest(ptr) msvcp120._LDtest @ stub _LDunscale diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec index 10d04e5..05d0435 100644 --- a/dlls/msvcp60/msvcp60.spec +++ b/dlls/msvcp60/msvcp60.spec @@ -4257,14 +4257,14 @@ @ stub _Cosh @ extern _Denorm _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ cdecl _Dtest(ptr) @ extern _Eps _Eps @ stub _Exp @ stub _FCosh @ extern _FDenorm _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ cdecl _FDtest(ptr) @ extern _FEps _FEps @ stub _FExp @@ -4281,7 +4281,7 @@ @ extern _Inf _Inf @ stub _LCosh @ extern _LDenorm _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ cdecl _LDtest(ptr) _Dtest @ extern _LEps _LEps @ stub _LExp diff --git a/dlls/msvcp70/msvcp70.spec b/dlls/msvcp70/msvcp70.spec index f390d8a..a6f5ef3 100644 --- a/dlls/msvcp70/msvcp70.spec +++ b/dlls/msvcp70/msvcp70.spec @@ -5043,14 +5043,14 @@ @ stub _Cosh @ extern _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ cdecl _Dtest(ptr) @ extern _Eps @ stub _Exp @ stub _FCosh @ extern _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ cdecl _FDtest(ptr) @ extern _FEps @ stub _FExp @@ -5068,7 +5068,7 @@ @ extern _Inf @ stub _LCosh @ extern _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ cdecl _LDtest(ptr) _Dtest @ extern _LEps @ stub _LExp diff --git a/dlls/msvcp71/msvcp71.spec b/dlls/msvcp71/msvcp71.spec index 2675c9a..ba2fcaf 100644 --- a/dlls/msvcp71/msvcp71.spec +++ b/dlls/msvcp71/msvcp71.spec @@ -5097,14 +5097,14 @@ @ stub _Cosh @ extern _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ cdecl _Dtest(ptr) @ extern _Eps @ stub _Exp @ stub _FCosh @ extern _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ cdecl _FDtest(ptr) @ extern _FEps @ stub _FExp @@ -5124,7 +5124,7 @@ @ extern _Inf @ stub _LCosh @ extern _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ cdecl _LDtest(ptr) _Dtest @ extern _LEps @ stub _LExp diff --git a/dlls/msvcp80/msvcp80.spec b/dlls/msvcp80/msvcp80.spec index ed04def..d801608 100644 --- a/dlls/msvcp80/msvcp80.spec +++ b/dlls/msvcp80/msvcp80.spec @@ -5703,7 +5703,7 @@ @ stub _Cosh @ extern _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ stub _Dtentox @ cdecl _Dtest(ptr) @ stub _Dunscale @@ -5712,7 +5712,7 @@ @ stub _FCosh @ extern _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ stub _FDtentox @ cdecl _FDtest(ptr) @ stub _FDunscale @@ -5734,7 +5734,7 @@ @ extern _Inf @ stub _LCosh @ extern _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ stub _LDtentox @ cdecl _LDtest(ptr) _Dtest @ stub _LDunscale diff --git a/dlls/msvcp90/math.c b/dlls/msvcp90/math.c index 9b827f3..2d9996db 100644 --- a/dlls/msvcp90/math.c +++ b/dlls/msvcp90/math.c @@ -2260,3 +2260,17 @@ short __cdecl _FDtest(float *x) { return dclass(*x); } + +/* _Dscale */ +short __cdecl _Dscale(double *x, int exp) +{ + *x *= pow(2, exp); + return dclass(*x); +} + +/* _FDscale */ +short __cdecl _FDscale(float *x, int exp) +{ + *x *= pow(2, exp); + return dclass(*x); +} diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index d3a314b..f2e3a5b 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -6479,14 +6479,14 @@ @ stub _Cosh @ extern _Denorm @ stub _Dnorm -@ stub _Dscale +@ cdecl _Dscale(ptr long) @ cdecl _Dtest(ptr) @ extern _Eps @ stub _Exp @ stub _FCosh @ extern _FDenorm @ stub _FDnorm -@ stub _FDscale +@ cdecl _FDscale(ptr long) @ cdecl _FDtest(ptr) @ extern _FEps @ stub _FExp @@ -6506,7 +6506,7 @@ @ extern _Inf @ stub _LCosh @ extern _LDenorm -@ stub _LDscale +@ cdecl _LDscale(ptr long) _Dscale @ cdecl _LDtest(ptr) _Dtest @ extern _LEps @ stub _LExp