- Move misplaced RtlPrefetchMemoryNonTemporal from rtl into kernel where it belongs...
authorStefan Ginsberg <stefanginsberg@gmail.com>
Tue, 1 Sep 2015 19:51:52 +0000 (19:51 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Tue, 1 Sep 2015 19:51:52 +0000 (19:51 +0000)
svn path=/trunk/; revision=68903

reactos/lib/rtl/i386/rtlmem.s
reactos/ntoskrnl/include/internal/amd64/ke.h
reactos/ntoskrnl/include/internal/i386/ke.h
reactos/ntoskrnl/ke/i386/kiinit.c
reactos/ntoskrnl/rtl/i386/stack.S

index c5340b0..639ac70 100644 (file)
@@ -16,7 +16,6 @@ PUBLIC _RtlFillMemory@12
 PUBLIC _RtlFillMemoryUlong@12
 PUBLIC _RtlMoveMemory@12
 PUBLIC _RtlZeroMemory@8
-PUBLIC @RtlPrefetchMemoryNonTemporal@8
 
 /* FUNCTIONS *****************************************************************/
 .code
@@ -328,35 +327,4 @@ _RtlMoveMemory@12:
        dec edi
        jmp .CopyDownBytes
 
-
-
-@RtlPrefetchMemoryNonTemporal@8:
-
-    /*
-     * Overwritten by ntoskrnl/ke/i386/kernel.c if SSE is supported
-     * (see Ki386SetProcessorFeatures())
-     */
-    ret
-
-    /* Get granularity */
-    mov eax, [_Ke386CacheAlignment]
-
-FetchLine:
-
-    /* Prefetch this line */
-    prefetchnta byte ptr [ecx]
-
-    /* Update address and count */
-    add ecx, eax
-    sub edx, eax
-
-    /* Keep looping for the next line, or return if done */
-    ja FetchLine
-    ret
-
-
-/* FIXME: HACK */
-_Ke386CacheAlignment:
-    .long   64
-
 END
index b01e994..1701fe6 100644 (file)
@@ -81,7 +81,6 @@ typedef struct _KI_INTERRUPT_DISPATCH_ENTRY
 } KI_INTERRUPT_DISPATCH_ENTRY, *PKI_INTERRUPT_DISPATCH_ENTRY;
 #include <poppack.h>
 
-extern ULONG Ke386CacheAlignment;
 extern ULONG KeI386NpxPresent;
 extern ULONG KeI386XMMIPresent;
 extern ULONG KeI386FxsrPresent;
index a610734..4dbdb2d 100644 (file)
@@ -529,7 +529,6 @@ extern ULONG KeI386FxsrPresent;
 extern ULONG KiMXCsrMask;
 extern ULONG KeI386CpuType;
 extern ULONG KeI386CpuStep;
-extern ULONG Ke386CacheAlignment;
 extern ULONG KiFastSystemCallDisable;
 extern UCHAR KiDebugRegisterTrapOffsets[9];
 extern UCHAR KiDebugRegisterContextOffsets[9];
index d9c22cf..fe8c4a5 100644 (file)
@@ -162,7 +162,7 @@ KiInitMachineDependent(VOID)
             /* FIXME: Implement and enable XMM Page Zeroing for Mm */
 
             /* Patch the RtlPrefetchMemoryNonTemporal routine to enable it */
-            *(PCHAR)RtlPrefetchMemoryNonTemporal = 0x90;
+            *(PCHAR)RtlPrefetchMemoryNonTemporal = 0x90; // NOP
         }
     }
 
index 7fbb6e0..05fb981 100644 (file)
@@ -11,6 +11,8 @@
 #include <asm.inc>
 #include <ks386.inc>
 
+EXTERN _KePrefetchNTAGranularity:DWORD
+
 /* FUNCTIONS *****************************************************************/
 .code
 
@@ -35,4 +37,30 @@ _RtlpGetStackLimits@8:
     /* return */
     ret 8
 
+
+PUBLIC @RtlPrefetchMemoryNonTemporal@8
+@RtlPrefetchMemoryNonTemporal@8:
+
+    /*
+     * Kernel will overwrite this to 'nop' during init
+     * if prefetchnta is available. Slight optimization
+     * as compared to checking KeI386XMMIPresent for every call.
+     */
+    ret
+
+    /* Get granularity */
+    mov eax, [_KePrefetchNTAGranularity]
+
+    /* Prefetch this line */
+FetchLine:
+    prefetchnta byte ptr [ecx]
+
+    /* Update address and count */
+    add ecx, eax
+    sub edx, eax
+
+    /* Keep looping for the next line, or return if done */
+    ja FetchLine
+    ret
+
 END