From a51d65da770285a8adeacc190610a6045bccbc22 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 16 Jan 2013 14:27:04 +0100 Subject: [PATCH] msvcp90: Added complex<{float, double, long double}> constructors implementation. --- dlls/msvcp90/math.c | 104 ++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.h | 13 +++++ dlls/msvcp90/msvcp90.spec | 84 +++++++++++++++--------------- 3 files changed, 159 insertions(+), 42 deletions(-) diff --git a/dlls/msvcp90/math.c b/dlls/msvcp90/math.c index 4ba797e9009..72bcf4fceb4 100644 --- a/dlls/msvcp90/math.c +++ b/dlls/msvcp90/math.c @@ -894,3 +894,107 @@ double __cdecl std_Ctraits_double_tan( double x ) { return tan( x ); } /* ?tan@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits::tan(long double) */ LDOUBLE __cdecl std_Ctraits_long_double_tan( LDOUBLE x ) { return tan( x ); } + +/* ??0?$_Complex_base@MU_C_float_complex@@@std@@QAE@ABM0@Z */ +/* ??0?$_Complex_base@MU_C_float_complex@@@std@@QEAA@AEBM0@Z */ +/* ??0?$complex@M@std@@QAE@ABM0@Z */ +/* ??0?$complex@M@std@@QEAA@AEBM0@Z */ +DEFINE_THISCALL_WRAPPER(complex_float_ctor, 12) +complex_float* __thiscall complex_float_ctor(complex_float *this, const float *real, const float *imag) +{ + this->real = *real; + this->imag = *imag; + return this; +} + +/* ??0?$complex@M@std@@QAE@ABU_C_float_complex@@@Z */ +/* ??0?$complex@M@std@@QEAA@AEBU_C_float_complex@@@Z */ +DEFINE_THISCALL_WRAPPER(complex_float_ctor_float, 8) +complex_float* __thiscall complex_float_ctor_float(complex_float *this, const complex_float *c) +{ + this->real = c->real; + this->imag = c->imag; + return this; +} + +/* ??0?$complex@M@std@@QAE@ABU_C_double_complex@@@Z */ +/* ??0?$complex@M@std@@QEAA@AEBU_C_double_complex@@@Z */ +/* ??0?$complex@M@std@@QAE@ABU_C_ldouble_complex@@@Z */ +/* ??0?$complex@M@std@@QEAA@AEBU_C_ldouble_complex@@@Z */ +/* ??0?$complex@M@std@@QAE@ABV?$complex@N@1@@Z */ +/* ??0?$complex@M@std@@QEAA@AEBV?$complex@N@1@@Z */ +/* ??0?$complex@M@std@@QAE@ABV?$complex@O@1@@Z */ +/* ??0?$complex@M@std@@QEAA@AEBV?$complex@O@1@@Z */ +DEFINE_THISCALL_WRAPPER(complex_float_ctor_double, 8) +complex_float* __thiscall complex_float_ctor_double(complex_float *this, const complex_double *c) +{ + this->real = c->real; + this->imag = c->imag; + return this; +} + +/* ??_F?$complex@M@std@@QAEXXZ */ +/* ??_F?$complex@M@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(complex_float_ctor_def, 4) +complex_float* __thiscall complex_float_ctor_def(complex_float *this) +{ + this->real = this->imag = 0; + return this; +} + +/* ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z */ +/* ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z */ +/* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z */ +/* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAA@AEBO0@Z */ +/* ??0?$complex@N@std@@QAE@ABN0@Z */ +/* ??0?$complex@N@std@@QEAA@AEBN0@Z */ +/* ??0?$complex@O@std@@QAE@ABO0@Z */ +/* ??0?$complex@O@std@@QEAA@AEBO0@Z */ +DEFINE_THISCALL_WRAPPER(complex_double_ctor, 12) +complex_double* __thiscall complex_double_ctor(complex_double *this, const double *real, const double *imag) +{ + this->real = *real; + this->imag = *imag; + return this; +} + +/* ??0?$complex@N@std@@QAE@ABU_C_double_complex@@@Z */ +/* ??0?$complex@N@std@@QEAA@AEBU_C_double_complex@@@Z */ +/* ??0?$complex@N@std@@QAE@ABU_C_ldouble_complex@@@Z */ +/* ??0?$complex@N@std@@QEAA@AEBU_C_ldouble_complex@@@Z */ +/* ??0?$complex@N@std@@QAE@ABV?$complex@O@1@@Z */ +/* ??0?$complex@N@std@@QEAA@AEBV?$complex@O@1@@Z */ +/* ??0?$complex@O@std@@QAE@ABU_C_ldouble_complex@@@Z */ +/* ??0?$complex@O@std@@QEAA@AEBU_C_ldouble_complex@@@Z */ +/* ??0?$complex@O@std@@QAE@ABV?$complex@N@1@@Z */ +/* ??0?$complex@O@std@@QEAA@AEBV?$complex@N@1@@Z */ +DEFINE_THISCALL_WRAPPER(complex_double_ctor_double, 8) +complex_double* __thiscall complex_double_ctor_double(complex_double *this, const complex_double *c) +{ + this->real = c->real; + this->imag = c->imag; + return this; +} + +/* ??0?$complex@N@std@@QAE@ABV?$complex@M@1@@Z */ +/* ??0?$complex@N@std@@QEAA@AEBV?$complex@M@1@@Z */ +/* ??0?$complex@O@std@@QAE@ABV?$complex@M@1@@Z */ +/* ??0?$complex@O@std@@QEAA@AEBV?$complex@M@1@@Z */ +DEFINE_THISCALL_WRAPPER(complex_double_ctor_float, 8) +complex_double* __thiscall complex_double_ctor_float(complex_double *this, const complex_float *c) +{ + this->real = c->real; + this->imag = c->imag; + return this; +} + +/* ??_F?$complex@N@std@@QAEXXZ */ +/* ??_F?$complex@N@std@@QEAAXXZ */ +/* ??_F?$complex@O@std@@QAEXXZ */ +/* ??_F?$complex@O@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(complex_double_ctor_def, 4) +complex_double* __thiscall complex_double_ctor_def(complex_double *this) +{ + this->real = this->imag = 0; + return this; +} diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index 2496ebcd83a..95b0d0a3566 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -467,3 +467,16 @@ void init_exception(void*); void init_locale(void*); void init_io(void*); void free_io(void); + +/* class complex */ +typedef struct { + float real; + float imag; +} complex_float; + +/* class complex */ +/* class complex */ +typedef struct { + double real; + double imag; +} complex_double; diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 54fefd08d9b..0ae393a06cc 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -494,12 +494,12 @@ @ stub -arch=win64 ??$tanh@N@std@@YA?AV?$complex@N@0@AEBV10@@Z @ stub -arch=win32 ??$tanh@O@std@@YA?AV?$complex@O@0@ABV10@@Z @ stub -arch=win64 ??$tanh@O@std@@YA?AV?$complex@O@0@AEBV10@@Z -@ stub -arch=win32 ??0?$_Complex_base@MU_C_float_complex@@@std@@QAE@ABM0@Z -@ stub -arch=win64 ??0?$_Complex_base@MU_C_float_complex@@@std@@QEAA@AEBM0@Z -@ stub -arch=win32 ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z -@ stub -arch=win64 ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z -@ stub -arch=win32 ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z -@ stub -arch=win64 ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAA@AEBO0@Z +@ thiscall -arch=win32 ??0?$_Complex_base@MU_C_float_complex@@@std@@QAE@ABM0@Z(ptr ptr ptr) complex_float_ctor +@ cdecl -arch=win64 ??0?$_Complex_base@MU_C_float_complex@@@std@@QEAA@AEBM0@Z(ptr ptr ptr) complex_float_ctor +@ thiscall -arch=win32 ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z(ptr ptr ptr) complex_double_ctor +@ cdecl -arch=win64 ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z(ptr ptr ptr) complex_double_ctor +@ thiscall -arch=win32 ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z(ptr ptr ptr) complex_double_ctor +@ cdecl -arch=win64 ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAA@AEBO0@Z(ptr ptr ptr) complex_double_ctor @ stub -arch=win32 ??0?$_Mpunct@D@std@@IAE@PBDI_N1@Z @ stub -arch=win64 ??0?$_Mpunct@D@std@@IEAA@PEBD_K_N2@Z @ stub -arch=win32 ??0?$_Mpunct@D@std@@QAE@ABV_Locinfo@1@I_N1@Z @@ -866,36 +866,36 @@ @ cdecl -arch=win64 ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z(ptr ptr long) collate_wchar_ctor_locinfo @ thiscall -arch=win32 ??0?$collate@_W@std@@QAE@I@Z(ptr long) collate_wchar_ctor_refs @ cdecl -arch=win64 ??0?$collate@_W@std@@QEAA@_K@Z(ptr long) collate_wchar_ctor_refs -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABM0@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBM0@Z -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_double_complex@@@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_double_complex@@@Z -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_float_complex@@@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_float_complex@@@Z -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_ldouble_complex@@@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_ldouble_complex@@@Z -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABV?$complex@N@1@@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBV?$complex@N@1@@Z -@ stub -arch=win32 ??0?$complex@M@std@@QAE@ABV?$complex@O@1@@Z -@ stub -arch=win64 ??0?$complex@M@std@@QEAA@AEBV?$complex@O@1@@Z -@ stub -arch=win32 ??0?$complex@N@std@@QAE@ABN0@Z -@ stub -arch=win64 ??0?$complex@N@std@@QEAA@AEBN0@Z -@ stub -arch=win32 ??0?$complex@N@std@@QAE@ABU_C_double_complex@@@Z -@ stub -arch=win64 ??0?$complex@N@std@@QEAA@AEBU_C_double_complex@@@Z -@ stub -arch=win32 ??0?$complex@N@std@@QAE@ABU_C_ldouble_complex@@@Z -@ stub -arch=win64 ??0?$complex@N@std@@QEAA@AEBU_C_ldouble_complex@@@Z -@ stub -arch=win32 ??0?$complex@N@std@@QAE@ABV?$complex@M@1@@Z -@ stub -arch=win64 ??0?$complex@N@std@@QEAA@AEBV?$complex@M@1@@Z -@ stub -arch=win32 ??0?$complex@N@std@@QAE@ABV?$complex@O@1@@Z -@ stub -arch=win64 ??0?$complex@N@std@@QEAA@AEBV?$complex@O@1@@Z -@ stub -arch=win32 ??0?$complex@O@std@@QAE@ABO0@Z -@ stub -arch=win64 ??0?$complex@O@std@@QEAA@AEBO0@Z -@ stub -arch=win32 ??0?$complex@O@std@@QAE@ABU_C_ldouble_complex@@@Z -@ stub -arch=win64 ??0?$complex@O@std@@QEAA@AEBU_C_ldouble_complex@@@Z -@ stub -arch=win32 ??0?$complex@O@std@@QAE@ABV?$complex@M@1@@Z -@ stub -arch=win64 ??0?$complex@O@std@@QEAA@AEBV?$complex@M@1@@Z -@ stub -arch=win32 ??0?$complex@O@std@@QAE@ABV?$complex@N@1@@Z -@ stub -arch=win64 ??0?$complex@O@std@@QEAA@AEBV?$complex@N@1@@Z +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABM0@Z(ptr ptr ptr) complex_float_ctor +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBM0@Z(ptr ptr ptr) complex_float_ctor +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_double_complex@@@Z(ptr ptr) complex_float_ctor_double +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_double_complex@@@Z(ptr ptr) complex_float_ctor_double +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_float_complex@@@Z(ptr ptr) complex_float_ctor_float +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_float_complex@@@Z(ptr ptr) complex_float_ctor_float +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABU_C_ldouble_complex@@@Z(ptr ptr) complex_float_ctor_double +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBU_C_ldouble_complex@@@Z(ptr ptr) complex_float_ctor_double +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABV?$complex@N@1@@Z(ptr ptr) complex_float_ctor_double +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBV?$complex@N@1@@Z(ptr ptr) complex_float_ctor_double +@ thiscall -arch=win32 ??0?$complex@M@std@@QAE@ABV?$complex@O@1@@Z(ptr ptr) complex_float_ctor_double +@ cdecl -arch=win64 ??0?$complex@M@std@@QEAA@AEBV?$complex@O@1@@Z(ptr ptr) complex_float_ctor_double +@ thiscall -arch=win32 ??0?$complex@N@std@@QAE@ABN0@Z(ptr ptr ptr) complex_double_ctor +@ cdecl -arch=win64 ??0?$complex@N@std@@QEAA@AEBN0@Z(ptr ptr ptr) complex_double_ctor +@ thiscall -arch=win32 ??0?$complex@N@std@@QAE@ABU_C_double_complex@@@Z(ptr ptr) complex_double_ctor_double +@ cdecl -arch=win64 ??0?$complex@N@std@@QEAA@AEBU_C_double_complex@@@Z(ptr ptr) complex_double_ctor_double +@ thiscall -arch=win32 ??0?$complex@N@std@@QAE@ABU_C_ldouble_complex@@@Z(ptr ptr) complex_double_ctor_double +@ cdecl -arch=win64 ??0?$complex@N@std@@QEAA@AEBU_C_ldouble_complex@@@Z(ptr ptr) complex_double_ctor_double +@ thiscall -arch=win32 ??0?$complex@N@std@@QAE@ABV?$complex@M@1@@Z(ptr ptr) complex_double_ctor_float +@ cdecl -arch=win64 ??0?$complex@N@std@@QEAA@AEBV?$complex@M@1@@Z(ptr ptr) complex_double_ctor_float +@ thiscall -arch=win32 ??0?$complex@N@std@@QAE@ABV?$complex@O@1@@Z(ptr ptr) complex_double_ctor_double +@ cdecl -arch=win64 ??0?$complex@N@std@@QEAA@AEBV?$complex@O@1@@Z(ptr ptr) complex_double_ctor_double +@ thiscall -arch=win32 ??0?$complex@O@std@@QAE@ABO0@Z(ptr ptr ptr) complex_double_ctor +@ cdecl -arch=win64 ??0?$complex@O@std@@QEAA@AEBO0@Z(ptr ptr ptr) complex_double_ctor +@ thiscall -arch=win32 ??0?$complex@O@std@@QAE@ABU_C_ldouble_complex@@@Z(ptr ptr) complex_double_ctor_double +@ cdecl -arch=win64 ??0?$complex@O@std@@QEAA@AEBU_C_ldouble_complex@@@Z(ptr ptr) complex_double_ctor_double +@ thiscall -arch=win32 ??0?$complex@O@std@@QAE@ABV?$complex@M@1@@Z(ptr ptr) complex_double_ctor_float +@ cdecl -arch=win64 ??0?$complex@O@std@@QEAA@AEBV?$complex@M@1@@Z(ptr ptr) complex_double_ctor_float +@ thiscall -arch=win32 ??0?$complex@O@std@@QAE@ABV?$complex@N@1@@Z(ptr ptr) complex_double_ctor_double +@ cdecl -arch=win64 ??0?$complex@O@std@@QEAA@AEBV?$complex@N@1@@Z(ptr ptr) complex_double_ctor_double @ thiscall -arch=win32 ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z(ptr ptr long) ctype_char_ctor_locinfo @ cdecl -arch=win64 ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z(ptr ptr long) ctype_char_ctor_locinfo @ thiscall -arch=win32 ??0?$ctype@D@std@@QAE@PBF_NI@Z(ptr ptr long long) ctype_char_ctor_table @@ -2003,12 +2003,12 @@ @ cdecl -arch=win64 ??_F?$collate@G@std@@QEAAXXZ(ptr) collate_short_ctor @ thiscall -arch=win32 ??_F?$collate@_W@std@@QAEXXZ(ptr) collate_wchar_ctor @ cdecl -arch=win64 ??_F?$collate@_W@std@@QEAAXXZ(ptr) collate_wchar_ctor -@ stub -arch=win32 ??_F?$complex@M@std@@QAEXXZ -@ stub -arch=win64 ??_F?$complex@M@std@@QEAAXXZ -@ stub -arch=win32 ??_F?$complex@N@std@@QAEXXZ -@ stub -arch=win64 ??_F?$complex@N@std@@QEAAXXZ -@ stub -arch=win32 ??_F?$complex@O@std@@QAEXXZ -@ stub -arch=win64 ??_F?$complex@O@std@@QEAAXXZ +@ thiscall -arch=win32 ??_F?$complex@M@std@@QAEXXZ(ptr) complex_float_ctor_def +@ cdecl -arch=win64 ??_F?$complex@M@std@@QEAAXXZ(ptr) complex_float_ctor_def +@ thiscall -arch=win32 ??_F?$complex@N@std@@QAEXXZ(ptr) complex_double_ctor_def +@ cdecl -arch=win64 ??_F?$complex@N@std@@QEAAXXZ(ptr) complex_double_ctor_def +@ thiscall -arch=win32 ??_F?$complex@O@std@@QAEXXZ(ptr) complex_double_ctor_def +@ cdecl -arch=win64 ??_F?$complex@O@std@@QEAAXXZ(ptr) complex_double_ctor_def @ thiscall -arch=win32 ??_F?$ctype@D@std@@QAEXXZ(ptr) ctype_char_ctor @ cdecl -arch=win64 ??_F?$ctype@D@std@@QEAAXXZ(ptr) ctype_char_ctor @ thiscall -arch=win32 ??_F?$ctype@G@std@@QAEXXZ(ptr) ctype_short_ctor