diff options
Diffstat (limited to 'C/CpuArch.c')
-rw-r--r-- | C/CpuArch.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/C/CpuArch.c b/C/CpuArch.c index d7f8b1d8..36fc5bb4 100644 --- a/C/CpuArch.c +++ b/C/CpuArch.c @@ -1,5 +1,5 @@ /* CpuArch.c -- CPU specific code -2012-05-29: Igor Pavlov : Public domain */ +2015-03-25: Igor Pavlov : Public domain */ #include "Precomp.h" @@ -54,7 +54,7 @@ static UInt32 CheckFlag(UInt32 flag) #define CHECK_CPUID_IS_SUPPORTED #endif -static void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) +void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) { #ifdef USE_ASM @@ -116,7 +116,7 @@ Bool x86cpuid_CheckAndRead(Cx86cpuid *p) return True; } -static UInt32 kVendors[][3] = +static const UInt32 kVendors[][3] = { { 0x756E6547, 0x49656E69, 0x6C65746E}, { 0x68747541, 0x69746E65, 0x444D4163}, @@ -144,18 +144,21 @@ Bool CPU_Is_InOrder() UInt32 family, model; if (!x86cpuid_CheckAndRead(&p)) return True; - family = x86cpuid_GetFamily(&p); - model = x86cpuid_GetModel(&p); + + family = x86cpuid_GetFamily(p.ver); + model = x86cpuid_GetModel(p.ver); + firm = x86cpuid_GetFirm(&p); + switch (firm) { case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && ( - /* Atom CPU */ - model == 0x100C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */ - || model == 0x2006 /* 45 nm, Z6xx */ - || model == 0x2007 /* 32 nm, Z2460 */ - || model == 0x3005 /* 32 nm, Z2760 */ - || model == 0x3006 /* 32 nm, N2xxx, D2xxx */ + /* In-Order Atom CPU */ + model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */ + || model == 0x26 /* 45 nm, Z6xx */ + || model == 0x27 /* 32 nm, Z2460 */ + || model == 0x35 /* 32 nm, Z2760 */ + || model == 0x36 /* 32 nm, N2xxx, D2xxx */ ))); case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA))); case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF)); |