mirror of
https://github.com/reactos/reactos.git
synced 2026-05-29 21:19:51 +08:00
[NTOS:KE] Move related FPU instrunctions to internal intrinsic file
This commit is contained in:
@@ -45,7 +45,6 @@ Ke386FxSave(IN PFX_SAVE_AREA SaveArea)
|
||||
asm volatile ("fxsave (%0)" : : "r"(SaveArea));
|
||||
}
|
||||
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
Ke386FnSave(IN PFLOATING_SAVE_AREA SaveArea)
|
||||
@@ -68,6 +67,28 @@ Ke386SaveFpuState(IN PFX_SAVE_AREA SaveArea)
|
||||
}
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
Ke386RestoreFpuState(_In_ PFX_SAVE_AREA SaveArea)
|
||||
{
|
||||
extern ULONG KeI386FxsrPresent;
|
||||
if (KeI386FxsrPresent)
|
||||
{
|
||||
__asm__ __volatile__ ("fxrstor %0\n" : : "m"(*SaveArea));
|
||||
}
|
||||
else
|
||||
{
|
||||
__asm__ __volatile__ ("frstor %0\n\t" : "=m" (*SaveArea));
|
||||
}
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
Ke386ClearFpExceptions(VOID)
|
||||
{
|
||||
__asm__ __volatile__ ("fnclex");
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
__sldt(PVOID Descriptor)
|
||||
@@ -163,6 +184,14 @@ __fxrstor(IN PFX_SAVE_AREA SaveArea)
|
||||
__asm fxrstor [eax]
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
__frstor(_In_ PFX_SAVE_AREA SaveArea)
|
||||
{
|
||||
__asm mov eax, SaveArea
|
||||
__asm frstor [eax]
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
__fnsave(OUT PFLOATING_SAVE_AREA SaveArea)
|
||||
@@ -314,17 +343,36 @@ Ke386SaveFpuState(IN PVOID SaveArea)
|
||||
}
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
Ke386RestoreFpuState(_In_ PVOID SaveArea)
|
||||
{
|
||||
if (KeI386FxsrPresent)
|
||||
{
|
||||
__fxrstor((PFX_SAVE_AREA)SaveArea);
|
||||
}
|
||||
else
|
||||
{
|
||||
__frstor((PFX_SAVE_AREA)SaveArea);
|
||||
}
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
Ke386ClearFpExceptions(VOID)
|
||||
{
|
||||
__asm fnclex;
|
||||
}
|
||||
|
||||
#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
|
||||
#endif
|
||||
|
||||
|
||||
#define Ke386GetGlobalDescriptorTable __sgdt
|
||||
#define Ke386SetGlobalDescriptorTable __lgdt
|
||||
#define Ke386GetLocalDescriptorTable __sldt
|
||||
@@ -333,5 +381,4 @@ Ke386SaveFpuState(IN PVOID SaveArea)
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
||||
Reference in New Issue
Block a user