[ros-diffs] [tkreuzer] 49787: [NTOS] Add some missing intrinsics for MSVC

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Nov 24 20:03:02 UTC 2010


Author: tkreuzer
Date: Wed Nov 24 20:03:01 2010
New Revision: 49787

URL: http://svn.reactos.org/svn/reactos?rev=49787&view=rev
Log:
[NTOS]
Add some missing intrinsics for MSVC

Modified:
    branches/cmake-bringup/ntoskrnl/include/internal/i386/intrin_i.h

Modified: branches/cmake-bringup/ntoskrnl/include/internal/i386/intrin_i.h
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/ntoskrnl/include/internal/i386/intrin_i.h?rev=49787&r1=49786&r2=49787&view=diff
==============================================================================
--- branches/cmake-bringup/ntoskrnl/include/internal/i386/intrin_i.h [iso-8859-1] (original)
+++ branches/cmake-bringup/ntoskrnl/include/internal/i386/intrin_i.h [iso-8859-1] Wed Nov 24 20:03:01 2010
@@ -144,6 +144,32 @@
         sgdt [eax]
     }
 }
+
+FORCEINLINE
+VOID
+__fxsave(OUT PFX_SAVE_AREA SaveArea)
+{
+    __asm mov eax, SaveArea
+    __asm fxsave [eax]
+}
+
+FORCEINLINE
+VOID
+__fxrstor(IN PFX_SAVE_AREA SaveArea)
+{
+    __asm mov eax, SaveArea
+    __asm fxrstor [eax]
+}
+
+FORCEINLINE
+VOID
+__fnsave(OUT PFLOATING_SAVE_AREA SaveArea)
+{
+    __asm mov eax, SaveArea
+    __asm fnsave [eax]
+    __asm wait;
+}
+
 #define Ke386GetGlobalDescriptorTable __sgdt
 
 FORCEINLINE
@@ -267,6 +293,28 @@
     __asm mov ax, Value;
     __asm mov gs, ax;
 }
+
+extern ULONG KeI386FxsrPresent;
+
+FORCEINLINE
+VOID
+Ke386SaveFpuState(IN PVOID SaveArea)
+{
+    if (KeI386FxsrPresent)
+    {
+        __fxsave(SaveArea);
+    }
+    else
+    {
+        __fnsave(SaveArea);
+    }
+}
+
+#define Ke386FnSave __fnsave
+#define Ke386FxSave __fxsave
+// The name suggest, that the original author didn't understand what frstor means
+#define Ke386FxStore __fxrstor
+
 
 #else
 #error Unknown compiler for inline assembler




More information about the Ros-diffs mailing list