https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fb0ebac349ed73747aa33457789bda96b487ca93

commit fb0ebac349ed73747aa33457789bda96b487ca93
Author:     Timo Kreuzer <[email protected]>
AuthorDate: Mon Sep 23 13:57:32 2019 +0200
Commit:     Timo Kreuzer <[email protected]>
CommitDate: Fri Jan 3 13:00:45 2020 +0100

    [NDK][XDK][RTL] Fix definition of RtlFillMemoryUlong on x64
---
 sdk/include/ndk/rtlfuncs.h | 35 +++++++++++++++++++++++++++++++++--
 sdk/include/xdk/rtlfuncs.h |  6 +++---
 sdk/lib/rtl/mem.c          |  5 +++--
 3 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/sdk/include/ndk/rtlfuncs.h b/sdk/include/ndk/rtlfuncs.h
index 4809b4a0d65..5b6f878b140 100644
--- a/sdk/include/ndk/rtlfuncs.h
+++ b/sdk/include/ndk/rtlfuncs.h
@@ -2119,13 +2119,42 @@ RtlFindCharInUnicodeString(
 //
 // Memory Functions
 //
+#if defined(_M_AMD64)
+
+FORCEINLINE
+VOID
+RtlFillMemoryUlong(
+    _Out_writes_bytes_all_(Length) PVOID Destination,
+    _In_ SIZE_T Length,
+    _In_ ULONG Pattern)
+{
+    PULONG Address = (PULONG)Destination;
+    if ((Length /= 4) != 0) {
+        if (((ULONG64)Address & 4) != 0) {
+            *Address = Pattern;
+            if ((Length -= 1) == 0) {
+                return;
+            }
+            Address += 1;
+        }
+        __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), 
Length / 2);
+        if ((Length & 1) != 0) Address[Length - 1] = Pattern;
+    }
+    return;
+}
+
+#define RtlFillMemoryUlonglong(Destination, Length, Pattern)                \
+    __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
+
+#else
+
 NTSYSAPI
 VOID
 NTAPI
 RtlFillMemoryUlong(
-    _In_ PVOID Destination,
+    _Out_writes_bytes_all_(Length) PVOID Destination,
     _In_ SIZE_T Length,
-    _In_ ULONG Fill
+    _In_ ULONG Pattern
 );
 
 NTSYSAPI
@@ -2137,6 +2166,8 @@ RtlFillMemoryUlonglong(
     _In_ ULONGLONG Pattern
 );
 
+#endif
+
 NTSYSAPI
 NTSTATUS
 NTAPI
diff --git a/sdk/include/xdk/rtlfuncs.h b/sdk/include/xdk/rtlfuncs.h
index ac5214336ec..cba07f72aa5 100644
--- a/sdk/include/xdk/rtlfuncs.h
+++ b/sdk/include/xdk/rtlfuncs.h
@@ -2376,9 +2376,9 @@ NTSYSAPI
 VOID
 NTAPI
 RtlFillMemoryUlong(
-  OUT PVOID Destination,
-  IN SIZE_T Length,
-  IN ULONG Pattern);
+  _Out_writes_bytes_all_(Length) PVOID Destination,
+  _In_ SIZE_T Length,
+  _In_ ULONG Pattern);
 
 NTSYSAPI
 VOID
diff --git a/sdk/lib/rtl/mem.c b/sdk/lib/rtl/mem.c
index 6927f543f3e..352d1356908 100644
--- a/sdk/lib/rtl/mem.c
+++ b/sdk/lib/rtl/mem.c
@@ -92,7 +92,7 @@ RtlFillMemory(PVOID Destination,
 }
 
 
-
+#ifndef _M_AMD64
 /*
  * @implemented
  */
@@ -131,7 +131,8 @@ RtlFillMemoryUlonglong(
         Count--;
     }
 }
-#endif
+#endif // _WIN64
+#endif // _M_AMD64
 
 #undef RtlMoveMemory
 /*

Reply via email to