From 289b1bdebc760b5e7fda2717bde4690eb59588ba Mon Sep 17 00:00:00 2001 From: PerikiyoXD Date: Mon, 27 Nov 2023 22:04:31 +0100 Subject: [PATCH] Rework _CPU_FEATURES structure --- sdk/xtdk/amd64/artypes.h | 156 ++++++++++++++++++++------------------- sdk/xtdk/i686/artypes.h | 153 ++++++++++++++++++++------------------ 2 files changed, 165 insertions(+), 144 deletions(-) diff --git a/sdk/xtdk/amd64/artypes.h b/sdk/xtdk/amd64/artypes.h index e3607b0..5888d83 100644 --- a/sdk/xtdk/amd64/artypes.h +++ b/sdk/xtdk/amd64/artypes.h @@ -111,7 +111,7 @@ #define X86_EFLAGS_ID_MASK 0x00200000 /* CPUID vendor names */ -#define CPUID_VENDOR_NAME_AMD "AuthenticAMD" +#define CPUID_VENDOR_NAME_AMD "AuthenticAMD" #define CPUID_VENDOR_NAME_INTEL "GenuineIntel" /* CPU vendor enumeration list */ @@ -190,81 +190,89 @@ typedef enum _CPUID_FEATURES } CPUID_FEATURES, *PCPUID_FEATURES; /* CPU features, as reported by CPUID instruction */ -typedef struct _CPU_FEATURES { - union { - struct { - BOOLEAN SSE3 : 1; - BOOLEAN PCLMUL : 1; - BOOLEAN DTES64 : 1; - BOOLEAN MONITOR : 1; - BOOLEAN DS_CPL : 1; - BOOLEAN VMX : 1; - BOOLEAN SMX : 1; - BOOLEAN EST : 1; - BOOLEAN TM2 : 1; - BOOLEAN SSSE3 : 1; - BOOLEAN CID : 1; - BOOLEAN SDBG : 1; - BOOLEAN FMA : 1; - BOOLEAN CX16 : 1; - BOOLEAN XTPR : 1; - BOOLEAN PDCM : 1; - BOOLEAN Reserved1 : 1; // Bit 16 is reserved - BOOLEAN PCID : 1; - BOOLEAN DCA : 1; - BOOLEAN SSE4_1 : 1; - BOOLEAN SSE4_2 : 1; - BOOLEAN X2APIC : 1; - BOOLEAN MOVBE : 1; - BOOLEAN POPCNT : 1; - BOOLEAN TSC_DEADLINE : 1; - BOOLEAN AES : 1; - BOOLEAN XSAVE : 1; - BOOLEAN OSXSAVE : 1; - BOOLEAN AVX : 1; - BOOLEAN F16C : 1; - BOOLEAN RDRAND : 1; - BOOLEAN HYPERVISOR : 1; +typedef union _CPU_FEATURES +{ + UINT64 Value; + union + { + UINT32 Ecx; + UINT32 ExtendedFeatures; + struct + { + BYTE SSE3 : 1; + BYTE PCLMUL : 1; + BYTE DTES64 : 1; + BYTE MONITOR : 1; + BYTE DS_CPL : 1; + BYTE VMX : 1; + BYTE SMX : 1; + BYTE EST : 1; + BYTE TM2 : 1; + BYTE SSSE3 : 1; + BYTE CID : 1; + BYTE SDBG : 1; + BYTE FMA : 1; + BYTE CX16 : 1; + BYTE XTPR : 1; + BYTE PDCM : 1; + BYTE Reserved4 : 1; // Bit 16 is reserved + BYTE PCID : 1; + BYTE DCA : 1; + BYTE SSE4_1 : 1; + BYTE SSE4_2 : 1; + BYTE X2APIC : 1; + BYTE MOVBE : 1; + BYTE POPCNT : 1; + BYTE TSC_DEADLINE : 1; + BYTE AES : 1; + BYTE XSAVE : 1; + BYTE OSXSAVE : 1; + BYTE AVX : 1; + BYTE F16C : 1; + BYTE RDRAND : 1; + BYTE HYPERVISOR : 1; + }; }; - UINT32 ExtendedFeatures; - }; - union { - struct { - BOOLEAN FPU : 1; - BOOLEAN VME : 1; - BOOLEAN DE : 1; - BOOLEAN PSE : 1; - BOOLEAN TSC : 1; - BOOLEAN MSR : 1; - BOOLEAN PAE : 1; - BOOLEAN MCE : 1; - BOOLEAN CX8 : 1; - BOOLEAN APIC : 1; - BOOLEAN Reserved2 : 1; // Bit 10 is reserved - BOOLEAN SEP : 1; - BOOLEAN MTRR : 1; - BOOLEAN PGE : 1; - BOOLEAN MCA : 1; - BOOLEAN CMOV : 1; - BOOLEAN PAT : 1; - BOOLEAN PSE36 : 1; - BOOLEAN PSN : 1; - BOOLEAN CLFLUSH : 1; - BOOLEAN Reserved3 : 1; // Bit 20 is reserved - BOOLEAN DS : 1; - BOOLEAN ACPI : 1; - BOOLEAN MMX : 1; - BOOLEAN FXSR : 1; - BOOLEAN SSE : 1; - BOOLEAN SSE2 : 1; - BOOLEAN SS : 1; - BOOLEAN HTT : 1; - BOOLEAN TM : 1; - BOOLEAN Reserved4 : 1; // Bit 30 is reserved - BOOLEAN PBE : 1; + union + { + UINT32 Edx; + UINT32 Features; + struct + { + BYTE FPU : 1; + BYTE VME : 1; + BYTE DE : 1; + BYTE PSE : 1; + BYTE TSC : 1; + BYTE MSR : 1; + BYTE PAE : 1; + BYTE MCE : 1; + BYTE CX8 : 1; + BYTE APIC : 1; + BYTE Reserved1 : 1; // Bit 10 is reserved + BYTE SEP : 1; + BYTE MTRR : 1; + BYTE PGE : 1; + BYTE MCA : 1; + BYTE CMOV : 1; + BYTE PAT : 1; + BYTE PSE36 : 1; + BYTE PSN : 1; + BYTE CLFLUSH : 1; + BYTE Reserved2 : 1; // Bit 20 is reserved + BYTE DS : 1; + BYTE ACPI : 1; + BYTE MMX : 1; + BYTE FXSR : 1; + BYTE SSE : 1; + BYTE SSE2 : 1; + BYTE SS : 1; + BYTE HTT : 1; + BYTE TM : 1; + BYTE Reserved3 : 1; // Bit 30 is reserved + BYTE PBE : 1; + }; }; - UINT64 Features; - }; } CPU_FEATURES, *PCPU_FEATURES; /* CPUID requests */ diff --git a/sdk/xtdk/i686/artypes.h b/sdk/xtdk/i686/artypes.h index 1c8cd77..c9f2142 100644 --- a/sdk/xtdk/i686/artypes.h +++ b/sdk/xtdk/i686/artypes.h @@ -62,7 +62,7 @@ #define SEGMENT_GS 0x65 /* CPUID vendor names */ -#define CPUID_VENDOR_NAME_AMD "AuthenticAMD" +#define CPUID_VENDOR_NAME_AMD "AuthenticAMD" #define CPUID_VENDOR_NAME_INTEL "GenuineIntel" /* CPU vendor enumeration list */ @@ -141,76 +141,89 @@ typedef enum _CPUID_FEATURES } CPUID_FEATURES, *PCPUID_FEATURES; /* CPU features, as reported by CPUID instruction */ -typedef struct _CPU_FEATURES { - union { - struct { - BOOLEAN SSE3 : 1; - BOOLEAN PCLMUL : 1; - BOOLEAN DTES64 : 1; - BOOLEAN MONITOR : 1; - BOOLEAN DS_CPL : 1; - BOOLEAN VMX : 1; - BOOLEAN SMX : 1; - BOOLEAN EST : 1; - BOOLEAN TM2 : 1; - BOOLEAN SSSE3 : 1; - BOOLEAN CID : 1; - BOOLEAN SDBG : 1; - BOOLEAN FMA : 1; - BOOLEAN CX16 : 1; - BOOLEAN XTPR : 1; - BOOLEAN PDCM : 1; - BOOLEAN Reserved1 : 1; // Bit 16 is reserved - BOOLEAN PCID : 1; - BOOLEAN DCA : 1; - BOOLEAN SSE4_1 : 1; - BOOLEAN SSE4_2 : 1; - BOOLEAN X2APIC : 1; - BOOLEAN MOVBE : 1; - BOOLEAN POPCNT : 1; - BOOLEAN TSC_DEADLINE : 1; - BOOLEAN AES : 1; - BOOLEAN XSAVE : 1; - BOOLEAN OSXSAVE : 1; - BOOLEAN AVX : 1; - BOOLEAN F16C : 1; - BOOLEAN RDRAND : 1; - BOOLEAN HYPERVISOR : 1; - BOOLEAN FPU : 1; - BOOLEAN VME : 1; - BOOLEAN DE : 1; - BOOLEAN PSE : 1; - BOOLEAN TSC : 1; - BOOLEAN MSR : 1; - BOOLEAN PAE : 1; - BOOLEAN MCE : 1; - BOOLEAN CX8 : 1; - BOOLEAN APIC : 1; - BOOLEAN Reserved2 : 1; // Bit 10 is reserved - BOOLEAN SEP : 1; - BOOLEAN MTRR : 1; - BOOLEAN PGE : 1; - BOOLEAN MCA : 1; - BOOLEAN CMOV : 1; - BOOLEAN PAT : 1; - BOOLEAN PSE36 : 1; - BOOLEAN PSN : 1; - BOOLEAN CLFLUSH : 1; - BOOLEAN Reserved3 : 1; // Bit 20 is reserved - BOOLEAN DS : 1; - BOOLEAN ACPI : 1; - BOOLEAN MMX : 1; - BOOLEAN FXSR : 1; - BOOLEAN SSE : 1; - BOOLEAN SSE2 : 1; - BOOLEAN SS : 1; - BOOLEAN HTT : 1; - BOOLEAN TM : 1; - BOOLEAN Reserved4 : 1; // Bit 30 is reserved - BOOLEAN PBE : 1; +typedef union _CPU_FEATURES +{ + UINT64 Value; + union + { + UINT32 Ecx; + UINT32 ExtendedFeatures; + struct + { + BYTE SSE3 : 1; + BYTE PCLMUL : 1; + BYTE DTES64 : 1; + BYTE MONITOR : 1; + BYTE DS_CPL : 1; + BYTE VMX : 1; + BYTE SMX : 1; + BYTE EST : 1; + BYTE TM2 : 1; + BYTE SSSE3 : 1; + BYTE CID : 1; + BYTE SDBG : 1; + BYTE FMA : 1; + BYTE CX16 : 1; + BYTE XTPR : 1; + BYTE PDCM : 1; + BYTE Reserved1 : 1; // Bit 16 is reserved + BYTE PCID : 1; + BYTE DCA : 1; + BYTE SSE4_1 : 1; + BYTE SSE4_2 : 1; + BYTE X2APIC : 1; + BYTE MOVBE : 1; + BYTE POPCNT : 1; + BYTE TSC_DEADLINE : 1; + BYTE AES : 1; + BYTE XSAVE : 1; + BYTE OSXSAVE : 1; + BYTE AVX : 1; + BYTE F16C : 1; + BYTE RDRAND : 1; + BYTE HYPERVISOR : 1; + }; + }; + union + { + UINT32 Edx; + UINT32 Features; + struct + { + BYTE FPU : 1; + BYTE VME : 1; + BYTE DE : 1; + BYTE PSE : 1; + BYTE TSC : 1; + BYTE MSR : 1; + BYTE PAE : 1; + BYTE MCE : 1; + BYTE CX8 : 1; + BYTE APIC : 1; + BYTE Reserved2 : 1; // Bit 10 is reserved + BYTE SEP : 1; + BYTE MTRR : 1; + BYTE PGE : 1; + BYTE MCA : 1; + BYTE CMOV : 1; + BYTE PAT : 1; + BYTE PSE36 : 1; + BYTE PSN : 1; + BYTE CLFLUSH : 1; + BYTE Reserved3 : 1; // Bit 20 is reserved + BYTE DS : 1; + BYTE ACPI : 1; + BYTE MMX : 1; + BYTE FXSR : 1; + BYTE SSE : 1; + BYTE SSE2 : 1; + BYTE SS : 1; + BYTE HTT : 1; + BYTE TM : 1; + BYTE Reserved4 : 1; // Bit 30 is reserved + BYTE PBE : 1; + }; }; - UINT64 AsUINT64; - }; } CPU_FEATURES, *PCPU_FEATURES; /* CPUID requests */