include: Define thiscall assembly wrappers globally.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
62fa748f23
commit
ee4db2005e
|
@ -18,29 +18,6 @@
|
||||||
|
|
||||||
#include "wine/asm.h"
|
#include "wine/asm.h"
|
||||||
|
|
||||||
/* Copied from dlls/msvcrt/cxx.h */
|
|
||||||
#undef __thiscall
|
|
||||||
#ifdef __i386__ /* thiscall functions are i386-specific */
|
|
||||||
|
|
||||||
#define THISCALL(func) __thiscall_ ## func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
|
|
||||||
#define __thiscall __stdcall
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
extern void THISCALL(func)(void); \
|
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
|
||||||
"popl %eax\n\t" \
|
|
||||||
"pushl %ecx\n\t" \
|
|
||||||
"pushl %eax\n\t" \
|
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
|
||||||
#else /* __i386__ */
|
|
||||||
|
|
||||||
#define THISCALL(func) func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME(#func)
|
|
||||||
#define __thiscall __cdecl
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
|
||||||
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
|
|
||||||
#define VTABLE_ADD_FUNC(name) "\t.quad " THISCALL_NAME(name) "\n"
|
#define VTABLE_ADD_FUNC(name) "\t.quad " THISCALL_NAME(name) "\n"
|
||||||
|
|
|
@ -18,28 +18,6 @@
|
||||||
|
|
||||||
#include "wine/asm.h"
|
#include "wine/asm.h"
|
||||||
|
|
||||||
#undef __thiscall
|
|
||||||
#ifdef __i386__ /* thiscall functions are i386-specific */
|
|
||||||
|
|
||||||
#define THISCALL(func) __thiscall_ ## func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
|
|
||||||
#define __thiscall __stdcall
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
extern void THISCALL(func)(void); \
|
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
|
||||||
"popl %eax\n\t" \
|
|
||||||
"pushl %ecx\n\t" \
|
|
||||||
"pushl %eax\n\t" \
|
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
|
||||||
#else /* __i386__ */
|
|
||||||
|
|
||||||
#define THISCALL(func) func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME(#func)
|
|
||||||
#define __thiscall __cdecl
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
|
||||||
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
|
|
||||||
#define VTABLE_ADD_FUNC(name) "\t.quad " THISCALL_NAME(name) "\n"
|
#define VTABLE_ADD_FUNC(name) "\t.quad " THISCALL_NAME(name) "\n"
|
||||||
|
|
|
@ -500,35 +500,6 @@ DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetSelectionBarWidth(ITextHost *i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef __i386__ /* thiscall functions are i386-specific */
|
|
||||||
|
|
||||||
#define THISCALL(func) (void *) __thiscall_ ## func
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
__declspec(naked) HRESULT __thiscall_##func(void) \
|
|
||||||
{ \
|
|
||||||
__asm pop eax \
|
|
||||||
__asm push ecx \
|
|
||||||
__asm push eax \
|
|
||||||
__asm jmp func \
|
|
||||||
}
|
|
||||||
#else /* _MSC_VER */
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
extern HRESULT __thiscall_ ## func(void); \
|
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
|
||||||
"popl %eax\n\t" \
|
|
||||||
"pushl %ecx\n\t" \
|
|
||||||
"pushl %eax\n\t" \
|
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
#else /* __i386__ */
|
|
||||||
|
|
||||||
#define THISCALL(func) func
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
|
||||||
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC,4)
|
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC,4)
|
||||||
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC,8)
|
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC,8)
|
||||||
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar,12)
|
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar,12)
|
||||||
|
|
|
@ -34,35 +34,6 @@
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "editstr.h"
|
#include "editstr.h"
|
||||||
|
|
||||||
#ifdef __i386__ /* thiscall functions are i386-specific */
|
|
||||||
|
|
||||||
#define THISCALL(func) (void *) __thiscall_ ## func
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
__declspec(naked) HRESULT __thiscall_##func(void) \
|
|
||||||
{ \
|
|
||||||
__asm pop eax \
|
|
||||||
__asm push ecx \
|
|
||||||
__asm push eax \
|
|
||||||
__asm jmp func \
|
|
||||||
}
|
|
||||||
#else /* _MSC_VER */
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
extern HRESULT __thiscall_ ## func(void); \
|
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
|
||||||
"popl %eax\n\t" \
|
|
||||||
"pushl %ecx\n\t" \
|
|
||||||
"pushl %eax\n\t" \
|
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
#else /* __i386__ */
|
|
||||||
|
|
||||||
#define THISCALL(func) func
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
|
||||||
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(richedit);
|
WINE_DEFAULT_DEBUG_CHANNEL(richedit);
|
||||||
|
|
||||||
typedef struct ITextServicesImpl {
|
typedef struct ITextServicesImpl {
|
||||||
|
|
|
@ -28,28 +28,6 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL( vssapi );
|
WINE_DEFAULT_DEBUG_CHANNEL( vssapi );
|
||||||
|
|
||||||
#undef __thiscall
|
|
||||||
#ifdef __i386__ /* thiscall functions are i386-specific */
|
|
||||||
|
|
||||||
#define THISCALL(func) __thiscall_ ## func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
|
|
||||||
#define __thiscall __stdcall
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) \
|
|
||||||
extern void THISCALL(func)(void); \
|
|
||||||
__ASM_GLOBAL_FUNC(__thiscall_ ## func, \
|
|
||||||
"popl %eax\n\t" \
|
|
||||||
"pushl %ecx\n\t" \
|
|
||||||
"pushl %eax\n\t" \
|
|
||||||
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
|
||||||
#else /* __i386__ */
|
|
||||||
|
|
||||||
#define THISCALL(func) func
|
|
||||||
#define THISCALL_NAME(func) __ASM_NAME(#func)
|
|
||||||
#define __thiscall __cdecl
|
|
||||||
#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
|
||||||
|
|
||||||
#endif /* __i386__ */
|
|
||||||
|
|
||||||
struct CVssWriter
|
struct CVssWriter
|
||||||
{
|
{
|
||||||
void **vtable;
|
void **vtable;
|
||||||
|
|
|
@ -88,4 +88,41 @@
|
||||||
|
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
|
|
||||||
|
/* thiscall support */
|
||||||
|
|
||||||
|
#undef __thiscall
|
||||||
|
#define __thiscall __stdcall
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
|
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# define DEFINE_THISCALL_WRAPPER(func,args) \
|
||||||
|
__declspec(naked) HRESULT __thiscall_##func(void) \
|
||||||
|
{ __asm { \
|
||||||
|
pop eax \
|
||||||
|
push ecx \
|
||||||
|
push eax \
|
||||||
|
jmp func \
|
||||||
|
} }
|
||||||
|
# else /* _MSC_VER */
|
||||||
|
# define DEFINE_THISCALL_WRAPPER(func,args) \
|
||||||
|
extern void __thiscall_ ## func(void); \
|
||||||
|
__ASM_GLOBAL_FUNC( __thiscall_ ## func, \
|
||||||
|
"popl %eax\n\t" \
|
||||||
|
"pushl %ecx\n\t" \
|
||||||
|
"pushl %eax\n\t" \
|
||||||
|
"jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
|
||||||
|
# endif /* _MSC_VER */
|
||||||
|
|
||||||
|
# define THISCALL(func) (void *)__thiscall_ ## func
|
||||||
|
# define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
|
||||||
|
|
||||||
|
#else /* __i386__ */
|
||||||
|
|
||||||
|
# define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
|
||||||
|
# define THISCALL(func) func
|
||||||
|
# define THISCALL_NAME(func) __ASM_NAME(#func)
|
||||||
|
|
||||||
|
#endif /* __i386__ */
|
||||||
|
|
||||||
#endif /* __WINE_WINE_ASM_H */
|
#endif /* __WINE_WINE_ASM_H */
|
||||||
|
|
Loading…
Reference in New Issue