Sebastian Lackner : ntdll: Implement RtlInterlockedPushListSListEx and fix calling convention of RtlInterlockedPushListSList.
Module: wine Branch: stable Commit: 349ac73f338bf6f7396d7042ed264d1aa0e62ca7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=349ac73f338bf6f7396d7042ed... Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Thu Feb 11 03:52:21 2016 +0100 ntdll: Implement RtlInterlockedPushListSListEx and fix calling convention of RtlInterlockedPushListSList. Signed-off-by: Sebastian Lackner <sebastian(a)fds-team.de> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit a4be1ca6db06766f6d35b0fa65afd704115e62a9) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/ntdll/ntdll.spec | 3 ++- dlls/ntdll/rtl.c | 31 ++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index c3b6bf0..5db37d4 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -705,7 +705,8 @@ @ stdcall RtlInterlockedFlushSList(ptr) @ stdcall RtlInterlockedPopEntrySList(ptr) @ stdcall RtlInterlockedPushEntrySList(ptr ptr) -@ stdcall RtlInterlockedPushListSList(ptr ptr ptr long) +@ stdcall -norelay RtlInterlockedPushListSList(ptr ptr ptr long) +@ stdcall RtlInterlockedPushListSListEx(ptr ptr ptr long) # @ stub RtlInvertRangeList @ stdcall RtlIpv4AddressToStringA(ptr ptr) @ stdcall RtlIpv4AddressToStringExA(ptr long ptr ptr) diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c index 8eb3e9f..a7babfe 100644 --- a/dlls/ntdll/rtl.c +++ b/dlls/ntdll/rtl.c @@ -57,6 +57,16 @@ static RTL_CRITICAL_SECTION_DEBUG critsect_debug = }; static RTL_CRITICAL_SECTION peb_lock = { &critsect_debug, -1, 0, 0, 0, 0 }; +#ifdef __i386__ +#define DEFINE_FASTCALL4_ENTRYPOINT( name ) \ + __ASM_STDCALL_FUNC( name, 16, \ + "popl %eax\n\t" \ + "pushl %edx\n\t" \ + "pushl %ecx\n\t" \ + "pushl %eax\n\t" \ + "jmp " __ASM_NAME("__regs_") #name __ASM_STDCALL(16)) +#endif + /* CRC polynomial 0xedb88320 */ static const DWORD CRC_table[256] = { @@ -1190,10 +1200,10 @@ PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER list) } /************************************************************************* - * RtlInterlockedPushListSList [NTDLL.@] + * RtlInterlockedPushListSListEx [NTDLL.@] */ -PSLIST_ENTRY WINAPI RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY first, - PSLIST_ENTRY last, ULONG count) +PSLIST_ENTRY WINAPI RtlInterlockedPushListSListEx(PSLIST_HEADER list, PSLIST_ENTRY first, + PSLIST_ENTRY last, ULONG count) { SLIST_HEADER old, new; @@ -1221,6 +1231,21 @@ PSLIST_ENTRY WINAPI RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY #endif } +/************************************************************************* + * RtlInterlockedPushListSList [NTDLL.@] + */ +#ifdef DEFINE_FASTCALL4_ENTRYPOINT +DEFINE_FASTCALL4_ENTRYPOINT(RtlInterlockedPushListSList) +PSLIST_ENTRY WINAPI __regs_RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY first, + PSLIST_ENTRY last, ULONG count) +#else +PSLIST_ENTRY WINAPI RtlInterlockedPushListSList(PSLIST_HEADER list, PSLIST_ENTRY first, + PSLIST_ENTRY last, ULONG count) +#endif +{ + return RtlInterlockedPushListSListEx(list, first, last, count); +} + /****************************************************************************** * RtlGetCompressionWorkSpaceSize [NTDLL.@] */
participants (1)
-
Alexandre Julliard