reactos/ntoskrnl/ke
George Bișoc 064a35dc67
[NTOS:KE] Fully implement FPU Save/Restore mechanism
This commit fully implements the inner logic of KeSaveFloatingPointState and KeRestoreFloatingPointState routines. On ReactOS we're currently simply doing a FNSAVE operation whereas on Windows it is a lot more than that.

On Windows Server 2003 the logic more or less goes like this. In order to save the FPU state the NPX state of the current thread has to be checked first, that is, if NPX is loaded and currently charged for the current thread then the system will acquire the NPX registers actively present. From that point it performs either a FNSAVE or FXSAVE
if FX is actually supported. Otherwise the control word and MXCsr registers are obtained.

FXSAVE/FNSAVE operation is done solely if the FX save area is held up in a pool allocation. Pool allocation occurs if it's been found out that the NPX IRQL of the thread is not the same as the current thread which from where it determines if the interrupt level is APC then allocate some pool memory and hold the save area there, otherwise
the save area in question is grabbed from the current processor control region. If NPX is not loaded for the current thread then the FPU state is obtained from the NPX frame.

In our case we'll be doing something way simpler. Only do a FXSAVE/FNSAVE directly of the FPU state registers, in this way we are simplifying the code and the actual logic of Save/Restore mechanism.
2022-05-24 18:39:45 +02:00
..
amd64 [NTOS:KE] Fix CPU extended family and model detection 2022-05-09 21:50:24 +03:00
arm [NDK][HAL][NTOS] Add missing PRCB_MINOR_VERSION / PRCB_MAJOR_VERSION and use them. 2022-05-07 18:14:38 +02:00
i386 [NTOS:KE] Fully implement FPU Save/Restore mechanism 2022-05-24 18:39:45 +02:00
apc.c [FORMATTING][NTOS][HAL][DRIVERS][SDK] Fix trailing spaces 2021-06-11 15:33:08 +03:00
balmgr.c
bug.c [NTOS:KE] Fix buffer overflow when displaying x64 bug checks 2022-01-03 13:25:09 -05:00
clock.c
config.c [NTOS:KE] Both KeFindConfigurationEntry() and KeFindConfigurationNextEntry() functions are exported by NTOSKRNL, so they definitively must NOT be in the discardable INIT section!! 2021-04-10 00:43:52 +02:00
devqueue.c [NTOS:KE] Fix 'Sert' typo, in a comment (#1929) 2019-09-23 01:13:07 +02:00
dpc.c [NTOS:KE] Fix some locking issues 2021-06-19 12:17:18 +02:00
eventobj.c
except.c [FORMATTING][NTOS][HAL][DRIVERS][SDK] Fix trailing spaces 2021-06-11 15:33:08 +03:00
freeze.c [NTOS:KD64,KE] IRQL is automatically adjusted during calls to KdEnterDebugger() and KdExitDebugger(). (#3942) 2021-09-12 18:20:32 +02:00
gate.c [NTOS:KE] Rename some locking functions to reflect the IRQL level changes 2019-12-31 15:30:27 +01:00
gmutex.c
ipi.c [NTOS] Fix build with CONFIG_SMP 2021-06-19 12:17:18 +02:00
krnlinit.c [REACTOS] Cleanup INIT and some PAGE section allocations 2020-11-02 21:45:31 +03:00
mutex.c [NTOS] Consistently use MUTANT_INCREMENT. 2020-10-16 16:09:54 +02:00
procobj.c [NTOS:KE] Fix some locking issues 2021-06-19 12:17:18 +02:00
profobj.c
queue.c [FORMATTING][NTOS][HAL][DRIVERS][SDK] Fix trailing spaces 2021-06-11 15:33:08 +03:00
semphobj.c
spinlock.c [NTOS:KE] Unconditionally check IRQL when acquiring & releasing spinlock at DISPATCH_LEVEL 2021-06-29 11:49:20 +02:00
thrdobj.c [NTOS:KE] Rename some locking functions to reflect the IRQL level changes 2019-12-31 15:30:27 +01:00
thrdschd.c
time.c [NTOS:KE:X64] Fix KiWriteSystemTime 2020-10-31 14:23:16 +01:00
timerobj.c [FORMATTING][NTOS][HAL][DRIVERS][SDK] Fix trailing spaces 2021-06-11 15:33:08 +03:00
wait.c [PSDK][NDK] Use hex to define MIN/MAX constants like in native SDK 2021-07-23 22:03:48 +02:00