Module: wine Branch: master Commit: 2350e48f2029ab60fe60b2782005a0e34ac0a3f5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2350e48f2029ab60fe60b27820... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Fri Jan 25 10:37:24 2013 +0100 msvcp90: Added std::norm(complex) and std::polar(complex) implementation. --- dlls/msvcp90/math.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.spec | 36 ++++++++++++++-------------- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/dlls/msvcp90/math.c b/dlls/msvcp90/math.c index aca11f1..7cd605a 100644 --- a/dlls/msvcp90/math.c +++ b/dlls/msvcp90/math.c @@ -1402,6 +1402,31 @@ complex_float* __cdecl complex_float_log10(complex_float *ret, const complex_flo return ret; } +/* ??$norm(a)M@std@@YAMABV?$complex(a)M@0@@Z */ +/* ??$norm(a)M@std@@YAMAEBV?$complex(a)M@0@@Z */ +float __cdecl complex_float_norm(const complex_float *c) +{ + return c->real*c->real + c->imag*c->imag; +} + +/* ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM0@Z */ +/* ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM0@Z */ +complex_float* __cdecl complex_float_polar_theta(complex_float *ret, const float *mod, const float *theta) +{ + ret->real = *mod * cos(*theta); + ret->imag = *mod * sin(*theta); + return ret; +} + +/* ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM@Z */ +/* ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM@Z */ +complex_float* __cdecl complex_float_polar(complex_float *ret, const float *mod) +{ + ret->real = *mod; + ret->imag = 0; + return ret; +} + /* ??0?$_Complex_base(a)NU_C_double_complex@@@std@@QAE(a)ABN0@Z */ /* ??0?$_Complex_base(a)NU_C_double_complex@@@std@@QEAA(a)AEBN0@Z */ /* ??0?$_Complex_base(a)OU_C_ldouble_complex@@@std@@QAE(a)ABO0@Z */ @@ -2017,3 +2042,34 @@ complex_double* __cdecl complex_double_log10(complex_double *ret, const complex_ ret->imag *= M_LOG10E; return ret; } + +/* ??$norm(a)N@std@@YANABV?$complex(a)N@0@@Z */ +/* ??$norm(a)N@std@@YANAEBV?$complex(a)N@0@@Z */ +/* ??$norm(a)O@std@@YAOABV?$complex(a)O@0@@Z */ +/* ??$norm(a)O@std@@YAOAEBV?$complex(a)O@0@@Z */ +double __cdecl complex_double_norm(const complex_double *c) +{ + return c->real*c->real + c->imag*c->imag; +} + +/* ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN0@Z */ +/* ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN0@Z */ +/* ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO0@Z */ +/* ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO0@Z */ +complex_double* __cdecl complex_double_polar_theta(complex_double *ret, const double *mod, const double *theta) +{ + ret->real = *mod * cos(*theta); + ret->imag = *mod * sin(*theta); + return ret; +} + +/* ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN@Z */ +/* ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN@Z */ +/* ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO@Z */ +/* ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO@Z */ +complex_double* __cdecl complex_double_polar(complex_double *ret, const double *mod) +{ + ret->real = *mod; + ret->imag = 0; + return ret; +} diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 61a4651..c1351d5 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -416,24 +416,24 @@ @ cdecl -arch=win64 ??$log(a)N@std@@YA?AV?$complex(a)N@0(a)AEBV10@@Z(ptr ptr) complex_double_log @ cdecl -arch=win32 ??$log(a)O@std@@YA?AV?$complex(a)O@0(a)ABV10@@Z(ptr ptr) complex_double_log @ cdecl -arch=win64 ??$log(a)O@std@@YA?AV?$complex(a)O@0(a)AEBV10@@Z(ptr ptr) complex_double_log -@ stub -arch=win32 ??$norm(a)M@std@@YAMABV?$complex(a)M@0@@Z -@ stub -arch=win64 ??$norm(a)M@std@@YAMAEBV?$complex(a)M@0@@Z -@ stub -arch=win32 ??$norm(a)N@std@@YANABV?$complex(a)N@0@@Z -@ stub -arch=win64 ??$norm(a)N@std@@YANAEBV?$complex(a)N@0@@Z -@ stub -arch=win32 ??$norm(a)O@std@@YAOABV?$complex(a)O@0@@Z -@ stub -arch=win64 ??$norm(a)O@std@@YAOAEBV?$complex(a)O@0@@Z -@ stub -arch=win32 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM0@Z -@ stub -arch=win64 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM0@Z -@ stub -arch=win32 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM@Z -@ stub -arch=win64 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM@Z -@ stub -arch=win32 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN0@Z -@ stub -arch=win64 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN0@Z -@ stub -arch=win32 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN@Z -@ stub -arch=win64 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN@Z -@ stub -arch=win32 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO0@Z -@ stub -arch=win64 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO0@Z -@ stub -arch=win32 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO@Z -@ stub -arch=win64 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO@Z +@ cdecl -arch=win32 ??$norm(a)M@std@@YAMABV?$complex(a)M@0@@Z(ptr) complex_float_norm +@ cdecl -arch=win64 ??$norm(a)M@std@@YAMAEBV?$complex(a)M@0@@Z(ptr) complex_float_norm +@ cdecl -arch=win32 ??$norm(a)N@std@@YANABV?$complex(a)N@0@@Z(ptr) complex_double_norm +@ cdecl -arch=win64 ??$norm(a)N@std@@YANAEBV?$complex(a)N@0@@Z(ptr) complex_double_norm +@ cdecl -arch=win32 ??$norm(a)O@std@@YAOABV?$complex(a)O@0@@Z(ptr) complex_double_norm +@ cdecl -arch=win64 ??$norm(a)O@std@@YAOAEBV?$complex(a)O@0@@Z(ptr) complex_double_norm +@ cdecl -arch=win32 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM0@Z(ptr ptr ptr) complex_float_polar_theta +@ cdecl -arch=win64 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM0@Z(ptr ptr ptr) complex_float_polar_theta +@ cdecl -arch=win32 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)ABM@Z(ptr ptr) complex_float_polar +@ cdecl -arch=win64 ??$polar(a)M@std@@YA?AV?$complex(a)M@0(a)AEBM@Z(ptr ptr) complex_float_polar +@ cdecl -arch=win32 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN0@Z(ptr ptr ptr) complex_double_polar_theta +@ cdecl -arch=win64 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN0@Z(ptr ptr ptr) complex_double_polar_theta +@ cdecl -arch=win32 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)ABN@Z(ptr ptr) complex_double_polar +@ cdecl -arch=win64 ??$polar(a)N@std@@YA?AV?$complex(a)N@0(a)AEBN@Z(ptr ptr) complex_double_polar +@ cdecl -arch=win32 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO0@Z(ptr ptr ptr) complex_double_polar_theta +@ cdecl -arch=win64 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO0@Z(ptr ptr ptr) complex_double_polar_theta +@ cdecl -arch=win32 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)ABO@Z(ptr ptr) complex_double_polar +@ cdecl -arch=win64 ??$polar(a)O@std@@YA?AV?$complex(a)O@0(a)AEBO@Z(ptr ptr) complex_double_polar @ stub -arch=win32 ??$pow(a)M@std@@YA?AV?$complex(a)M@0(a)ABMABV10@@Z @ stub -arch=win64 ??$pow(a)M@std@@YA?AV?$complex(a)M@0(a)AEBMAEBV10@@Z @ stub -arch=win32 ??$pow(a)M@std@@YA?AV?$complex(a)M@0(a)ABV10@0(a)Z