From 3afbc7e419a0cdbfb639126c47a63f16fae1c524 Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 15 Mar 2023 22:19:18 +0100 Subject: [PATCH] Introduce SIMD save area in place of FN/FX and use anonymous union inside FX_SAVE_AREA structure --- sdk/xtdk/i686/ketypes.h | 23 +++++------------------ sdk/xtdk/i686/xtstruct.h | 3 +-- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index e93dbd3..8c88068 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -180,21 +180,8 @@ typedef struct _FLOATING_SAVE_AREA ULONG Cr0NpxState; } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; -/* Data for FNSAVE/FRSTOR instructions structure definition */ -typedef struct _FNSAVE_FORMAT -{ - ULONG ControlWord; - ULONG StatusWord; - ULONG TagWord; - ULONG ErrorOffset; - ULONG ErrorSelector; - ULONG DataOffset; - ULONG DataSelector; - UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; -} FNSAVE_FORMAT, *PFNSAVE_FORMAT; - /* Data for FXSAVE/FXRSTOR instructions structure definition */ -typedef struct _FXSAVE_FORMAT +typedef struct _SIMD_SAVE_AREA { USHORT ControlWord; USHORT StatusWord; @@ -210,16 +197,16 @@ typedef struct _FXSAVE_FORMAT UCHAR Reserved3[SIZE_OF_FX_REGISTERS]; UCHAR Reserved4[224]; UCHAR Align16Byte[8]; -} FXSAVE_FORMAT, *PFXSAVE_FORMAT; +} SIMD_SAVE_AREA, *PSIMD_SAVE_AREA; /* Floating save area structure definition */ typedef struct _FX_SAVE_AREA { union { - FNSAVE_FORMAT FnArea; - FXSAVE_FORMAT FxArea; - } U; + FLOATING_SAVE_AREA FnArea; + SIMD_SAVE_AREA FxArea; + }; ULONG NpxSavedCpu; ULONG Cr0NpxState; } FX_SAVE_AREA, *PFX_SAVE_AREA; diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index 0bbf03a..c1bca3c 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -23,9 +23,7 @@ typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; -typedef struct _FNSAVE_FORMAT FNSAVE_FORMAT, *PFNSAVE_FORMAT; typedef struct _FX_SAVE_AREA FX_SAVE_AREA, *PFX_SAVE_AREA; -typedef struct _FXSAVE_FORMAT FXSAVE_FORMAT, *PFXSAVE_FORMAT; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _HARDWARE_PTE_PAE HARDWARE_PTE_PAE, *PHARDWARE_PTE_PAE; typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR; @@ -42,6 +40,7 @@ typedef struct _KSWITCH_FRAME KSWITCH_FRAME, *PKSWITCH_FRAME; typedef struct _KTHREAD_INIT_FRAME KTHREAD_INIT_FRAME, *PKTHREAD_INIT_FRAME; typedef struct _KTRAP_FRAME KTRAP_FRAME, *PKTRAP_FRAME; typedef struct _KTSS KTSS, *PKTSS; +typedef struct _SIMD_SAVE_AREA SIMD_SAVE_AREA, *PSIMD_SAVE_AREA; typedef struct _THREAD_ENVIRONMENT_BLOCK THREAD_ENVIRONMENT_BLOCK, *PTHREAD_ENVIRONMENT_BLOCK; #endif /* __XTDK_I686_XTSTRUCT_H */