Module: wine Branch: refs/heads/master Commit: 068cedc7f2ebc6a2ed3f8a8e137cc9d96539d7cd URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=068cedc7f2ebc6a2ed3f8a8e...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Jan 13 14:29:30 2006 +0100
kernel: Reimplemented the MapHInst functions in assembly.
---
dlls/kernel/kernel32.spec | 8 +++--- dlls/kernel/krnl386.exe.spec | 4 +-- dlls/kernel/ne_module.c | 58 +++++++++++++++++++++++++----------------- 3 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec index 4c3a025..65976a1 100644 --- a/dlls/kernel/kernel32.spec +++ b/dlls/kernel/kernel32.spec @@ -790,10 +790,10 @@ @ stdcall LockFileEx(long long long long long ptr) @ stdcall LockResource(long) @ stdcall MakeCriticalSectionGlobal(ptr) -@ stdcall -i386 -register MapHInstLS() -@ stdcall -i386 -register MapHInstLS_PN() -@ stdcall -i386 -register MapHInstSL() -@ stdcall -i386 -register MapHInstSL_PN() +@ stdcall -i386 -norelay MapHInstLS() +@ stdcall -i386 -norelay MapHInstLS_PN() +@ stdcall -i386 -norelay MapHInstSL() +@ stdcall -i386 -norelay MapHInstSL_PN() @ stdcall MapHModuleLS(long) @ stdcall MapHModuleSL(long) @ stdcall MapLS(ptr) diff --git a/dlls/kernel/krnl386.exe.spec b/dlls/kernel/krnl386.exe.spec index 7b7a477..0005f37 100644 --- a/dlls/kernel/krnl386.exe.spec +++ b/dlls/kernel/krnl386.exe.spec @@ -374,8 +374,8 @@ 469 stub WOAGimmeTitle 470 stub WOADestroyConsole 471 pascal GetCurrentProcessId() GetCurrentProcessId -472 pascal -register MapHInstLS() __regs_MapHInstLS -473 pascal -register MapHInstSL() __regs_MapHInstSL +472 pascal -register MapHInstLS() MapHInstLS16 +473 pascal -register MapHInstSL() MapHInstSL16 474 pascal CloseW32Handle(long) CloseHandle 475 pascal -ret16 GetTEBSelectorFS() GetTEBSelectorFS16 476 pascal ConvertToGlobalHandle(long) ConvertToGlobalHandle diff --git a/dlls/kernel/ne_module.c b/dlls/kernel/ne_module.c index 89600d2..930dc13 100644 --- a/dlls/kernel/ne_module.c +++ b/dlls/kernel/ne_module.c @@ -2138,47 +2138,57 @@ HMODULE WINAPI MapHModuleSL(HMODULE16 hm }
/*************************************************************************** - * MapHInstLS (KERNEL32.@) * MapHInstLS (KERNEL.472) */ -void WINAPI __regs_MapHInstLS( CONTEXT86 *context ) +void WINAPI MapHInstLS16( CONTEXT86 *context ) { context->Eax = MapHModuleLS( (HMODULE)context->Eax ); } -#ifdef DEFINE_REGS_ENTRYPOINT -DEFINE_REGS_ENTRYPOINT( MapHInstLS, 0, 0 ); -#endif
/*************************************************************************** - * MapHInstSL (KERNEL32.@) * MapHInstSL (KERNEL.473) */ -void WINAPI __regs_MapHInstSL( CONTEXT86 *context ) +void WINAPI MapHInstSL16( CONTEXT86 *context ) { context->Eax = (DWORD)MapHModuleSL( context->Eax ); } -#ifdef DEFINE_REGS_ENTRYPOINT -DEFINE_REGS_ENTRYPOINT( MapHInstSL, 0, 0 ); -#endif + +#ifdef __i386__ + +/*************************************************************************** + * MapHInstLS (KERNEL32.@) + */ +__ASM_GLOBAL_FUNC( MapHInstLS, + "pushl %eax\n\t" + "call " __ASM_NAME("MapHModuleLS") "\n\t" + "ret" ); + +/*************************************************************************** + * MapHInstSL (KERNEL32.@) + */ +__ASM_GLOBAL_FUNC( MapHInstSL, + "pushl %eax\n\t" + "call " __ASM_NAME("MapHModuleSL") "\n\t" + "ret" );
/*************************************************************************** * MapHInstLS_PN (KERNEL32.@) */ -void WINAPI __regs_MapHInstLS_PN( CONTEXT86 *context ) -{ - if (context->Eax) context->Eax = MapHModuleLS( (HMODULE)context->Eax ); -} -#ifdef DEFINE_REGS_ENTRYPOINT -DEFINE_REGS_ENTRYPOINT( MapHInstLS_PN, 0, 0 ); -#endif +__ASM_GLOBAL_FUNC( MapHInstLS_PN, + "testl %eax,%eax\n\t" + "jz 1f\n\t" + "pushl %eax\n\t" + "call " __ASM_NAME("MapHModuleLS") "\n" + "1:\tret" );
/*************************************************************************** * MapHInstSL_PN (KERNEL32.@) */ -void WINAPI __regs_MapHInstSL_PN( CONTEXT86 *context ) -{ - if (context->Eax) context->Eax = (DWORD)MapHModuleSL( context->Eax ); -} -#ifdef DEFINE_REGS_ENTRYPOINT -DEFINE_REGS_ENTRYPOINT( MapHInstSL_PN, 0, 0 ); -#endif +__ASM_GLOBAL_FUNC( MapHInstSL_PN, + "andl $0xffff,%eax\n\t" + "jz 1f\n\t" + "pushl %eax\n\t" + "call " __ASM_NAME("MapHModuleSL") "\n" + "1:\tret" ); + +#endif /* __i386__ */