https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ad607262885c7f23fe1fb…
commit ad607262885c7f23fe1fba0de4f48ab0119cb94b
Author:     Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sun May 26 15:06:32 2019 +0200
Commit:     Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Sun Jul 14 11:35:50 2019 +0200
    [ACPICA] Fix MSVC x64 build
    See CORE-16082
---
 drivers/bus/acpi/acpica/include/platform/acmsvc.h  |  4 +--
 drivers/bus/acpi/acpica/include/platform/acwin64.h | 41 ++++++++++++++++++++++
 drivers/bus/acpi/acpica/namespace/nsnames.c        |  2 +-
 3 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/drivers/bus/acpi/acpica/include/platform/acmsvc.h
b/drivers/bus/acpi/acpica/include/platform/acmsvc.h
index 57d9693c65e..936cbf4ebff 100644
--- a/drivers/bus/acpi/acpica/include/platform/acmsvc.h
+++ b/drivers/bus/acpi/acpica/include/platform/acmsvc.h
@@ -149,7 +149,7 @@
 #endif
 #ifdef __REACTOS__
-
+#ifdef _M_IX86
 /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
 #ifdef ACPI_APPLICATION
@@ -208,7 +208,7 @@
         __asm exit_rel:                             \
         __asm mov           Pnd, al                 \
 }
-
+#endif /* _M_IX86 */
 #endif /* __REACTOS__ */
 /* warn C4100: unreferenced formal parameter */
diff --git a/drivers/bus/acpi/acpica/include/platform/acwin64.h
b/drivers/bus/acpi/acpica/include/platform/acwin64.h
index 5dda0a5de8e..9ad34088c9d 100644
--- a/drivers/bus/acpi/acpica/include/platform/acwin64.h
+++ b/drivers/bus/acpi/acpica/include/platform/acwin64.h
@@ -83,6 +83,7 @@
 /*! [Begin] no source code translation  */
+#ifndef __REACTOS__
 #define ACPI_FLUSH_CPU_CACHE()
 /*
@@ -99,6 +100,46 @@
 #endif
+#else /* __REACTOS__ */
+
+#ifdef ACPI_APPLICATION
+#define ACPI_FLUSH_CPU_CACHE()
+#else
+#define ACPI_FLUSH_CPU_CACHE()  __wbinvd()
+#endif
+
+#define ACPI_ACQUIRE_GLOBAL_LOCK(FacsPtr, Acq) \
+{ \
+    BOOLEAN acquired = 0xFF; \
+\
+    if ((FacsPtr) != 0) \
+    { \
+        UINT32 compare, prev, newval; \
+        UINT32* lock = &((FacsPtr)->GlobalLock); \
+        do \
+        { \
+            compare = *lock; \
+            newval = (compare & ~1) | ((compare >> 1) & 1) | 2; \
+            prev = InterlockedCompareExchange(lock, newval, compare); \
+        } while (prev != compare); \
+        acquired = ((newval & 0xFF) < 3) ? 0xFF : 0x00; \
+    } \
+    (Acq) = acquired; \
+}
+
+#define ACPI_RELEASE_GLOBAL_LOCK(FacsPtr, Pnd) \
+{ \
+    BOOLEAN pending = 0; \
+\
+    if ((FacsPtr) != 0) \
+    { \
+        pending = InterlockedAnd(&(FacsPtr)->GlobalLock, ~3) & 1; \
+    } \
+    (Pnd) = pending; \
+}
+
+#endif /* __REACTOS__ */
+
 /*! [End] no source code translation !*/
 #endif /* __ACWIN_H__ */
diff --git a/drivers/bus/acpi/acpica/namespace/nsnames.c
b/drivers/bus/acpi/acpica/namespace/nsnames.c
index 6ab5cc64430..3c40c6ac3de 100644
--- a/drivers/bus/acpi/acpica/namespace/nsnames.c
+++ b/drivers/bus/acpi/acpica/namespace/nsnames.c
@@ -434,7 +434,7 @@ AcpiNsBuildPrefixedPathname (
     char                    *FullPath = NULL;
     char                    *ExternalPath = NULL;
     char                    *PrefixPath = NULL;
-    UINT32                  PrefixPathLength = 0;
+    SIZE_T                  PrefixPathLength = 0;
     /* If there is a prefix, get the pathname to it */