MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / CPUFeatures

Method CPUFeatures

Source/Windows/Common/CPUFeatures.cpp:78–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76}
77
78CPUFeatures::CPUFeatures(FEXCore::Context::Context& CTX) {
79#ifdef _M_ARM_64EC
80 // Report as a 64-bit host for ARM64EC.
81 CpuInfo.ProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64;
82#else
83 // Report as a 32-bit host for WoW64.
84 CpuInfo.ProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL;
85#endif
86
87 // Baseline FEX feature-set
88 CpuInfo.ProcessorFeatureBits = CPU_FEATURE_VME | CPU_FEATURE_TSC | CPU_FEATURE_CMOV | CPU_FEATURE_PGE | CPU_FEATURE_PSE | CPU_FEATURE_MTRR |
89 CPU_FEATURE_CX8 | CPU_FEATURE_MMX | CPU_FEATURE_X86 | CPU_FEATURE_PAT | CPU_FEATURE_FXSR | CPU_FEATURE_SEP |
90 CPU_FEATURE_SSE | CPU_FEATURE_3DNOW | CPU_FEATURE_SSE2 | CPU_FEATURE_SSE3 | CPU_FEATURE_CX128 |
91 CPU_FEATURE_NX | CPU_FEATURE_SSSE3 | CPU_FEATURE_SSE41 | CPU_FEATURE_PAE | CPU_FEATURE_DAZ;
92
93 // Features that require specific host CPU support
94 const auto CPUIDResult01 = CTX.RunCPUIDFunction(0x01, 0);
95 if (CPUIDResult01.ecx & (1 << 20)) {
96 CpuInfo.ProcessorFeatureBits |= CPU_FEATURE_SSE42;
97 }
98 if (CPUIDResult01.ecx & (1 << 27)) {
99 CpuInfo.ProcessorFeatureBits |= CPU_FEATURE_XSAVE;
100 }
101 if (CPUIDResult01.ecx & (1 << 28)) {
102 CpuInfo.ProcessorFeatureBits |= CPU_FEATURE_AVX;
103 }
104
105 const auto CPUIDResult07 = CTX.RunCPUIDFunction(0x07, 0);
106 if (CPUIDResult07.ebx & (1 << 5)) {
107 CpuInfo.ProcessorFeatureBits |= CPU_FEATURE_AVX2;
108 }
109
110 const auto FamilyIdentifier = CPUIDResult01.eax;
111 CpuInfo.ProcessorLevel = ((FamilyIdentifier >> 8) & 0xf) + ((FamilyIdentifier >> 20) & 0xff); // Family
112 CpuInfo.ProcessorRevision = (FamilyIdentifier & 0xf0000) >> 4; // Extended Model
113 CpuInfo.ProcessorRevision |= (FamilyIdentifier & 0xf0) << 4; // Model
114 CpuInfo.ProcessorRevision |= FamilyIdentifier & 0xf; // Stepping
115}
116
117bool CPUFeatures::IsFeaturePresent(uint32_t Feature) {
118 switch (Feature) {

Callers

nothing calls this directly

Calls 1

RunCPUIDFunctionMethod · 0.80

Tested by

no test coverage detected