From dc0e3d0a9c3ffa085d1cbcc53940d1876005af1a Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 24 Aug 2016 13:57:55 +0200 Subject: [PATCH] msvcrt: Add _fpieee_flt stub. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- .../api-ms-win-crt-runtime-l1-1-0.spec | 2 +- dlls/crtdll/crtdll.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/except_arm.c | 10 +++ dlls/msvcrt/except_i386.c | 11 +++ dlls/msvcrt/except_x86_64.c | 11 +++ dlls/msvcrt/msvcrt.h | 90 +++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt20/msvcrt20.spec | 2 +- dlls/msvcrt40/msvcrt40.spec | 2 +- dlls/msvcrtd/msvcrtd.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 19 files changed, 137 insertions(+), 15 deletions(-) diff --git a/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec b/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec index 3ba1016fba2..3dc6b20acc4 100644 --- a/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec +++ b/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec @@ -36,7 +36,7 @@ @ cdecl _errno() ucrtbase._errno @ cdecl _execute_onexit_table(ptr) ucrtbase._execute_onexit_table @ cdecl _exit(long) ucrtbase._exit -@ cdecl _fpieee_flt(long ptr ptr) ucrtbase._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) ucrtbase._fpieee_flt @ cdecl _fpreset() ucrtbase._fpreset @ cdecl _get_doserrno(ptr) ucrtbase._get_doserrno @ cdecl _get_errno(ptr) ucrtbase._get_errno diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec index a33cf47ee2f..89458b51362 100644 --- a/dlls/crtdll/crtdll.spec +++ b/dlls/crtdll/crtdll.spec @@ -108,7 +108,7 @@ @ cdecl _flushall() msvcrt._flushall @ extern _fmode_dll msvcrt._fmode @ cdecl _fpclass(double) msvcrt._fpclass -@ cdecl _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt @ cdecl _fpreset() msvcrt._fpreset @ cdecl _fputchar(long) msvcrt._fputchar @ cdecl _fputwchar(long) msvcrt._fputwchar diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 7e80adc5f02..03fd698b927 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -825,7 +825,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=x86_64 _fpclassf -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 1890a13f7a1..f5371b9f79f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1172,7 +1172,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=x86_64 _fpclassf -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 66334d8df33..e402c5fe11e 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1172,7 +1172,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=x86_64 _fpclassf -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 6f0daca367e..a953c389cef 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1100,7 +1100,7 @@ @ extern _fmode msvcr120._fmode @ cdecl _fpclass(double) msvcr120._fpclass # stub -arch=x86_64 _fpclassf -@ cdecl _fpieee_flt(long ptr ptr) msvcr120._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) msvcr120._fpieee_flt @ cdecl _fpreset() msvcr120._fpreset @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 6bd50838981..ca3ff87afad 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -313,7 +313,7 @@ @ cdecl _flushall() MSVCRT__flushall @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ cdecl _fputchar(long) MSVCRT__fputchar @ cdecl _fputwchar(long) MSVCRT__fputwchar diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 7e3f2653f82..7e6d7c0a3de 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -307,7 +307,7 @@ @ cdecl _flushall() MSVCRT__flushall @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ cdecl _fputchar(long) MSVCRT__fputchar @ cdecl _fputwchar(long) MSVCRT__fputwchar diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index aae7fc10462..c1edc24e9fb 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -491,7 +491,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=x86_64 _fpclassf -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d9fe6bbe27b..93da303ba89 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -474,7 +474,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=win64 _fpclassf(float) -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ stub _fprintf_l @ stub _fprintf_p diff --git a/dlls/msvcrt/except_arm.c b/dlls/msvcrt/except_arm.c index 62dadef6284..29ddb7b1b95 100644 --- a/dlls/msvcrt/except_arm.c +++ b/dlls/msvcrt/except_arm.c @@ -193,4 +193,14 @@ void __cdecl MSVCRT_longjmp(struct MSVCRT___JUMP_BUFFER *jmp, int retval) longjmp_set_regs(jmp, retval); } +/********************************************************************* + * _fpieee_flt (MSVCRT.@) + */ +int __cdecl _fpieee_flt(ULONG exception_code, EXCEPTION_POINTERS *ep, + int (__cdecl *handler)(_FPIEEE_RECORD*)) +{ + FIXME("(%x %p %p)\n", exception_code, ep, handler); + return EXCEPTION_CONTINUE_SEARCH; +} + #endif /* __arm__ */ diff --git a/dlls/msvcrt/except_i386.c b/dlls/msvcrt/except_i386.c index c9395850950..6a01fa76a31 100644 --- a/dlls/msvcrt/except_i386.c +++ b/dlls/msvcrt/except_i386.c @@ -1118,4 +1118,15 @@ void __stdcall _seh_longjmp_unwind4(struct MSVCRT___JUMP_BUFFER *jmp) jmp->TryLevel, (void *)jmp->Ebp ); } +/********************************************************************* + * _fpieee_flt (MSVCRT.@) + */ +int __cdecl _fpieee_flt(ULONG exception_code, EXCEPTION_POINTERS *ep, + int (__cdecl *handler)(_FPIEEE_RECORD*)) +{ + FIXME("(%x %p %p) opcode: %x\n", exception_code, ep, handler, + *(ULONG*)ep->ContextRecord->FloatSave.ErrorOffset); + return EXCEPTION_CONTINUE_SEARCH; +} + #endif /* __i386__ */ diff --git a/dlls/msvcrt/except_x86_64.c b/dlls/msvcrt/except_x86_64.c index 69daf2e973e..3a90a66e542 100644 --- a/dlls/msvcrt/except_x86_64.c +++ b/dlls/msvcrt/except_x86_64.c @@ -700,4 +700,15 @@ void __cdecl _local_unwind( void *frame, void *target ) RtlUnwind( frame, target, NULL, 0 ); } +/********************************************************************* + * _fpieee_flt (MSVCRT.@) + */ +int __cdecl _fpieee_flt(ULONG exception_code, EXCEPTION_POINTERS *ep, + int (__cdecl *handler)(_FPIEEE_RECORD*)) +{ + FIXME("(%x %p %p) opcode: %s\n", exception_code, ep, handler, + wine_dbgstr_longlong(*(ULONG64*)ep->ContextRecord->Rip)); + return EXCEPTION_CONTINUE_SEARCH; +} + #endif /* __x86_64__ */ diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index c96d0dc0845..eb6273db942 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -1176,4 +1176,94 @@ extern char* __cdecl __unDName(char *,const char*,int,malloc_func_t,free_func_t, #define UCRTBASE_SCANF_MASK (0x0007) +typedef enum { + _FpFormatFp32, + _FpFormatFp64, + _FpFormatFp80, + _FpFormatFp128, + _FpFormatI16, + _FpFormatI32, + _FpFormatI64, + _FpFormatU16, + _FpFormatU32, + _FpFormatU64, + _FpFormatBcd80, + _FpFormatCompare, + _FpFormatString, +} _FPIEEE_FORMAT; + +typedef float _FP32; +typedef double _FP64; +typedef short _I16; +typedef int _I32; +typedef unsigned short _U16; +typedef unsigned int _U32; +typedef __int64 _Q64; + +typedef struct { + unsigned short W[5]; +} _FP80; + +typedef struct DECLSPEC_ALIGN(16) { + MSVCRT_ulong W[4]; +} _FP128; + +typedef struct DECLSPEC_ALIGN(8) { + MSVCRT_ulong W[2]; +} _I64; + +typedef struct DECLSPEC_ALIGN(8) { + MSVCRT_ulong W[2]; +} _U64; + +typedef struct { + unsigned short W[5]; +} _BCD80; + +typedef struct DECLSPEC_ALIGN(16) { + _Q64 W[2]; +} _FPQ64; + +typedef struct { + union { + _FP32 Fp32Value; + _FP64 Fp64Value; + _FP80 Fp80Value; + _FP128 Fp128Value; + _I16 I16Value; + _I32 I32Value; + _I64 I64Value; + _U16 U16Value; + _U32 U32Value; + _U64 U64Value; + _BCD80 Bcd80Value; + char *StringValue; + int CompareValue; + _Q64 Q64Value; + _FPQ64 Fpq64Value; + } Value; + unsigned int OperandValid : 1; + unsigned int Format : 4; +} _FPIEEE_VALUE; + +typedef struct { + unsigned int Inexact : 1; + unsigned int Underflow : 1; + unsigned int Overflow : 1; + unsigned int ZeroDivide : 1; + unsigned int InvalidOperation : 1; +} _FPIEEE_EXCEPTION_FLAGS; + +typedef struct { + unsigned int RoundingMode : 2; + unsigned int Precision : 3; + unsigned int Operation :12; + _FPIEEE_EXCEPTION_FLAGS Cause; + _FPIEEE_EXCEPTION_FLAGS Enable; + _FPIEEE_EXCEPTION_FLAGS Status; + _FPIEEE_VALUE Operand1; + _FPIEEE_VALUE Operand2; + _FPIEEE_VALUE Result; +} _FPIEEE_RECORD, *_PFPIEEE_RECORD; + #endif /* __WINE_MSVCRT_H */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 299837681be..0c1d4adeb88 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -457,7 +457,7 @@ @ extern _fmode MSVCRT__fmode @ cdecl _fpclass(double) MSVCRT__fpclass # stub -arch=win64 _fpclassf(float) -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() # stub _fprintf_l(ptr str ptr) # stub _fprintf_p(ptr str) diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec index e3b3452dcdd..bbc89bee39d 100644 --- a/dlls/msvcrt20/msvcrt20.spec +++ b/dlls/msvcrt20/msvcrt20.spec @@ -926,7 +926,7 @@ @ cdecl _flushall() msvcrt._flushall @ extern _fmode msvcrt._fmode @ cdecl _fpclass(double) msvcrt._fpclass -@ cdecl _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt @ cdecl _fpreset() msvcrt._fpreset @ cdecl _fputchar(long) msvcrt._fputchar @ cdecl _fputwchar(long) msvcrt._fputwchar diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec index 1cc28e6af9f..07f34330671 100644 --- a/dlls/msvcrt40/msvcrt40.spec +++ b/dlls/msvcrt40/msvcrt40.spec @@ -1012,7 +1012,7 @@ @ cdecl _flushall() msvcrt._flushall @ extern _fmode msvcrt._fmode @ cdecl _fpclass(double) msvcrt._fpclass -@ cdecl _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt @ cdecl _fpreset() msvcrt._fpreset @ cdecl _fputchar(long) msvcrt._fputchar @ cdecl _fputwchar(long) msvcrt._fputwchar diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 61c40d089c1..34ad1d3cbb5 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -294,7 +294,7 @@ @ cdecl _flushall() msvcrt._flushall @ extern _fmode msvcrt._fmode @ cdecl _fpclass(double) msvcrt._fpclass -@ cdecl _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) msvcrt._fpieee_flt @ cdecl _fpreset() msvcrt._fpreset @ cdecl _fputchar(long) msvcrt._fputchar @ cdecl _fputwchar(long) msvcrt._fputwchar diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 0e1faa11e53..d20ef71331e 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -325,7 +325,7 @@ @ cdecl _flushall() MSVCRT__flushall @ cdecl _fpclass(double) MSVCRT__fpclass @ stub _fpclassf -@ stub _fpieee_flt(long ptr ptr) +@ cdecl -arch=i386,x86_64,arm _fpieee_flt(long ptr ptr) @ cdecl _fpreset() @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar