Skip to content

Commit

Permalink
CPUID: Update to something a little more modern
Browse files Browse the repository at this point in the history
Previously reported as some old CPU without AVX and SSE4 and other
things.
Start advertising as something more modern that actually shipped with
AVX2 and other features. Should help some modern libraries that do bad
family and model checks rather that CPUID features checks.

Also removes the silly `(ES)` tag from CPU-Z.

Also moves generation in to a constexpr function that can actually range
check these 4-bit and 8-bit values.
  • Loading branch information
Sonicadvance1 committed Sep 14, 2024
1 parent e190d02 commit 2af1e75
Showing 1 changed file with 38 additions and 12 deletions.
50 changes: 38 additions & 12 deletions FEXCore/Source/Interface/Core/CPUID.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,20 +96,46 @@ static uint32_t GetCPUID() {
return CPU;
}

struct CPUFamily {
uint32_t Stepping;
uint32_t Model;
uint32_t ExtendedModel;
uint32_t FamilyID;
uint32_t ExtendedFamilyID;
uint32_t ProcessorType;
};

constexpr static uint32_t GenerateFamily(const CPUFamily Family) {
LOGMAN_THROW_A_FMT(Family.Stepping & ~0xF == 0, "Stepping too large");
LOGMAN_THROW_A_FMT(Family.Model & ~0xF == 0, "Model too large");
LOGMAN_THROW_A_FMT(Family.FamilyID & ~0xF == 0, "FamilyID too large");
LOGMAN_THROW_A_FMT(Family.ExtendedModel & ~0xF == 0, "ExtendedModel too large");
LOGMAN_THROW_A_FMT(Family.ExtendedFamilyID & ~0xFF == 0, "ExtendedFamilyID too large");
LOGMAN_THROW_A_FMT(Family.ProcessorType & ~0xF == 0, "ProcessorType too large");

return Family.Stepping | (Family.Model << 4) | (Family.FamilyID << 8) | (Family.ProcessorType << 12) | (Family.ExtendedModel << 16) |
(Family.ExtendedFamilyID << 20);
}

#ifdef CPUID_AMD
constexpr uint32_t FAMILY_IDENTIFIER = 0 | // Stepping
(0xA << 4) | // Model
(0xF << 8) | // Family ID
(0 << 12) | // Processor type
(0 << 16) | // Extended model ID
(1 << 20); // Extended family ID
constexpr uint32_t FAMILY_IDENTIFIER = GenerateFamily(CPUFamily {
.Stepping = 0,
.Model = 0xA,
.ExtendedModel = 0,
.FamilyID = 0xF,
.ExtendedFamilyID = 1,
.ProcessorType = 0,
});

#else
constexpr uint32_t FAMILY_IDENTIFIER = 0 | // Stepping
(0x7 << 4) | // Model
(0x6 << 8) | // Family ID
(0 << 12) | // Processor type
(1 << 16) | // Extended model ID
(0x0 << 20); // Extended family ID
constexpr uint32_t FAMILY_IDENTIFIER = GenerateFamily(CPUFamily {
.Stepping = 1,
.Model = 6,
.ExtendedModel = 0xA,
.FamilyID = 6,
.ExtendedFamilyID = 0,
.ProcessorType = 0,
});
#endif

#ifdef _M_ARM_64
Expand Down

0 comments on commit 2af1e75

Please sign in to comment.