Module: wine Branch: master Commit: 84cf6aa20d3506663f6ff5f8bc296f16c0137039 URL: https://gitlab.winehq.org/wine/wine/-/commit/84cf6aa20d3506663f6ff5f8bc296f1...
Author: Eric Pouech eric.pouech@gmail.com Date: Mon Dec 12 16:58:15 2022 +0100
ntdll: Implement RtlU(short|long)ByteSwap() using fastcall bits.
Signed-off-by: Eric Pouech eric.pouech@gmail.com
---
dlls/ntdll/ntdll.spec | 4 ++-- dlls/ntdll/rtl.c | 16 ++++++++-------- dlls/ntoskrnl.exe/ntoskrnl.c | 16 ++++++++++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 4 ++-- 4 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 5b4cbbaa7fe..b41e29c0ff5 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1038,7 +1038,7 @@ @ stdcall RtlTryAcquireSRWLockShared(ptr) @ stdcall RtlTryEnterCriticalSection(ptr) @ stdcall RtlUTF8ToUnicodeN(ptr long ptr ptr long) -@ cdecl -i386 -norelay RtlUlongByteSwap() NTDLL_RtlUlongByteSwap +@ stdcall -fastcall -arch=i386 -norelay RtlUlongByteSwap(long) @ stdcall -fastcall -arch=i386 -norelay RtlUlonglongByteSwap(int64) # @ stub RtlUnhandledExceptionFilter2 # @ stub RtlUnhandledExceptionFilter @@ -1072,7 +1072,7 @@ @ stdcall RtlUpperString(ptr ptr) @ stub RtlUsageHeap @ stdcall -norelay RtlUserThreadStart(ptr ptr) -@ cdecl -i386 -norelay RtlUshortByteSwap() NTDLL_RtlUshortByteSwap +@ stdcall -fastcall -arch=i386 -norelay RtlUshortByteSwap(long) @ stdcall RtlValidAcl(ptr) @ stdcall RtlValidRelativeSecurityDescriptor(ptr long long) @ stdcall RtlValidSecurityDescriptor(ptr) diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c index 00bc16bbfa5..59dde6359e3 100644 --- a/dlls/ntdll/rtl.c +++ b/dlls/ntdll/rtl.c @@ -659,10 +659,10 @@ __ASM_FASTCALL_FUNC(RtlUlonglongByteSwap, 8, * ix86 version takes argument in %ecx. Other systems use the inline version. */ #ifdef __i386__ -__ASM_GLOBAL_FUNC(NTDLL_RtlUlongByteSwap, - "movl %ecx,%eax\n\t" - "bswap %eax\n\t" - "ret") +__ASM_FASTCALL_FUNC(RtlUlongByteSwap, 4, + "movl %ecx,%eax\n\t" + "bswap %eax\n\t" + "ret") #endif
/************************************************************************* @@ -674,10 +674,10 @@ __ASM_GLOBAL_FUNC(NTDLL_RtlUlongByteSwap, * i386 version takes argument in %cx. Other systems use the inline version. */ #ifdef __i386__ -__ASM_GLOBAL_FUNC(NTDLL_RtlUshortByteSwap, - "movb %ch,%al\n\t" - "movb %cl,%ah\n\t" - "ret") +__ASM_FASTCALL_FUNC(RtlUshortByteSwap, 4, + "movb %ch,%al\n\t" + "movb %cl,%ah\n\t" + "ret") #endif
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 9548eb98542..cc30750a160 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2187,6 +2187,22 @@ LONG FASTCALL NTOSKRNL_InterlockedIncrement( LONG volatile *dest )
#ifdef __i386__
+/************************************************************************* + * RtlUshortByteSwap (NTOSKRNL.EXE.@) + */ +__ASM_FASTCALL_FUNC(RtlUshortByteSwap, 4, + "movb %ch,%al\n\t" + "movb %cl,%ah\n\t" + "ret") + +/************************************************************************* + * RtlUlongByteSwap (NTOSKRNL.EXE.@) + */ +__ASM_FASTCALL_FUNC(RtlUlongByteSwap, 4, + "movl %ecx,%eax\n\t" + "bswap %eax\n\t" + "ret") + /************************************************************************* * RtlUlonglongByteSwap (NTOSKRNL.EXE.@) */ diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 321083e5ac4..2447d01458d 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -67,9 +67,9 @@ @ stdcall -fastcall ObfDereferenceObject(ptr) @ stdcall -fastcall ObfReferenceObject(ptr) @ stub RtlPrefetchMemoryNonTemporal -@ cdecl -i386 -norelay RtlUlongByteSwap() +@ stdcall -fastcall -arch=i386 -norelay RtlUlongByteSwap(long) @ stdcall -fastcall -arch=i386 -norelay RtlUlonglongByteSwap(int64) -@ cdecl -i386 -norelay RtlUshortByteSwap() +@ stdcall -fastcall -arch=i386 -norelay RtlUshortByteSwap(long) @ stub WmiGetClock @ stub Kei386EoiHelper @ stub Kii386SpinOnSpinLock