mirror of
https://github.com/anrieff/libcpuid
synced 2025-10-03 11:01:30 +00:00
Major refactoring of the Intel match tables.
There were a lot of instances where there was additional code written to detect certain features from the brand string (e.g., does it have "Core (TM)"? if it has, does it have "i3"?). It makes sense to only write code for detecting these features in isolation, preventing the exponential blowup of possible intel_code_t values (e.g. previously there were enum values for CORE_{,IVY,HASWELL,BROADWELL,SKYLAKE}{,M}{3,5,7} - almost 20 separate enums items; these can now be expressed with the respective bits (CORE_, _I_, _M_, _3, _5 and _7). The change in matchtables is the addition of an extra field after brand_code: it is called model_bits. The bits for each vendor is defined in the beginning of recog_<<vendor>>.c This is the first part of the overhaul, which handles the bits detection and proper matchtables for Intel. Refactoring of AMD detection code coming next...
This commit is contained in:
parent
037245032e
commit
8179882abb
6 changed files with 573 additions and 539 deletions
|
@ -29,22 +29,15 @@
|
||||||
* of no external use and isn't a complete list of intel products.
|
* of no external use and isn't a complete list of intel products.
|
||||||
*/
|
*/
|
||||||
CODE2(PENTIUM, 2000),
|
CODE2(PENTIUM, 2000),
|
||||||
CODE(MOBILE_PENTIUM),
|
|
||||||
|
|
||||||
CODE(XEON),
|
CODE(IRWIN),
|
||||||
CODE(XEON_IRWIN),
|
CODE(POTOMAC),
|
||||||
CODE(XEONMP),
|
CODE(GAINESTOWN),
|
||||||
CODE(XEON_POTOMAC),
|
CODE(WESTMERE),
|
||||||
CODE(XEON_I7),
|
|
||||||
CODE(XEON_GAINESTOWN),
|
|
||||||
CODE(XEON_WESTMERE),
|
|
||||||
|
|
||||||
CODE(MOBILE_PENTIUM_M),
|
CODE(PENTIUM_M),
|
||||||
CODE(CELERON),
|
|
||||||
CODE(MOBILE_CELERON),
|
|
||||||
CODE(NOT_CELERON),
|
CODE(NOT_CELERON),
|
||||||
|
|
||||||
|
|
||||||
CODE(CORE_SOLO),
|
CODE(CORE_SOLO),
|
||||||
CODE(MOBILE_CORE_SOLO),
|
CODE(MOBILE_CORE_SOLO),
|
||||||
CODE(CORE_DUO),
|
CODE(CORE_DUO),
|
||||||
|
@ -59,27 +52,7 @@
|
||||||
CODE(MORE_THAN_QUADCORE),
|
CODE(MORE_THAN_QUADCORE),
|
||||||
CODE(PENTIUM_D),
|
CODE(PENTIUM_D),
|
||||||
|
|
||||||
CODE(ATOM_UNKNOWN),
|
CODE(SILVERTHORNE),
|
||||||
CODE(ATOM_SILVERTHORNE),
|
CODE(DIAMONDVILLE),
|
||||||
CODE(ATOM_DIAMONDVILLE),
|
CODE(PINEVIEW),
|
||||||
CODE(ATOM_PINEVIEW),
|
CODE(CEDARVIEW),
|
||||||
CODE(ATOM_CEDARVIEW),
|
|
||||||
|
|
||||||
CODE(CORE_I3),
|
|
||||||
CODE(CORE_I5),
|
|
||||||
CODE(CORE_I7),
|
|
||||||
CODE(CORE_IVY3), /* 22nm Core-iX */
|
|
||||||
CODE(CORE_IVY5),
|
|
||||||
CODE(CORE_IVY7),
|
|
||||||
CODE(CORE_HASWELL3), /* 22nm Core-iX, Haswell */
|
|
||||||
CODE(CORE_HASWELL5),
|
|
||||||
CODE(CORE_HASWELL7),
|
|
||||||
CODE(CORE_BROADWELL3), /* 14nm Core-iX, Broadwell */
|
|
||||||
CODE(CORE_BROADWELL5),
|
|
||||||
CODE(CORE_BROADWELL7),
|
|
||||||
CODE(CORE_SKYLAKE3), /* 14nm Core-iX, Skylake */
|
|
||||||
CODE(CORE_SKYLAKE5),
|
|
||||||
CODE(CORE_SKYLAKE7),
|
|
||||||
CODE(CORE_SKYLAKEM3),
|
|
||||||
CODE(CORE_SKYLAKEM5),
|
|
||||||
CODE(CORE_SKYLAKEM7),
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
enum _common_codes_t {
|
enum _common_codes_t {
|
||||||
NA = 0,
|
NA = 0,
|
||||||
NO_CODE,
|
NC, /* No code */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CODE(x) x
|
#define CODE(x) x
|
||||||
|
@ -54,6 +54,7 @@ struct internal_id_info_t {
|
||||||
amd_code_t amd;
|
amd_code_t amd;
|
||||||
intel_code_t intel;
|
intel_code_t intel;
|
||||||
} code;
|
} code;
|
||||||
|
uint64_t bits;
|
||||||
int score; // detection (matchtable) score
|
int score; // detection (matchtable) score
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -74,8 +74,20 @@ void debugf(int verboselevel, const char* format, ...)
|
||||||
_warn_fun(buff);
|
_warn_fun(buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int popcount64(uint64_t mask)
|
||||||
|
{
|
||||||
|
int num_set_bits = 0;
|
||||||
|
|
||||||
|
while (mask) {
|
||||||
|
mask &= mask - 1;
|
||||||
|
num_set_bits++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return num_set_bits;
|
||||||
|
}
|
||||||
|
|
||||||
static int score(const struct match_entry_t* entry, const struct cpu_id_t* data,
|
static int score(const struct match_entry_t* entry, const struct cpu_id_t* data,
|
||||||
int brand_code, int model_code)
|
int brand_code, uint64_t bits, int model_code)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
if (entry->family == data->family ) res += 2;
|
if (entry->family == data->family ) res += 2;
|
||||||
|
@ -88,22 +100,25 @@ static int score(const struct match_entry_t* entry, const struct cpu_id_t* data,
|
||||||
if (entry->l3cache == data->l3_cache ) res += 1;
|
if (entry->l3cache == data->l3_cache ) res += 1;
|
||||||
if (entry->brand_code == brand_code ) res += 2;
|
if (entry->brand_code == brand_code ) res += 2;
|
||||||
if (entry->model_code == model_code ) res += 2;
|
if (entry->model_code == model_code ) res += 2;
|
||||||
|
|
||||||
|
res += popcount64(entry->model_bits & bits) * 2;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int match_cpu_codename(const struct match_entry_t* matchtable, int count,
|
int match_cpu_codename(const struct match_entry_t* matchtable, int count,
|
||||||
struct cpu_id_t* data, int brand_code, int model_code)
|
struct cpu_id_t* data, int brand_code, uint64_t bits,
|
||||||
|
int model_code)
|
||||||
{
|
{
|
||||||
int bestscore = -1;
|
int bestscore = -1;
|
||||||
int bestindex = 0;
|
int bestindex = 0;
|
||||||
int i, t;
|
int i, t;
|
||||||
|
|
||||||
debugf(3, "Matching cpu f:%d, m:%d, s:%d, xf:%d, xm:%d, ncore:%d, l2:%d, bcode:%d, code:%d\n",
|
debugf(3, "Matching cpu f:%d, m:%d, s:%d, xf:%d, xm:%d, ncore:%d, l2:%d, bcode:%d, bits:%llu, code:%d\n",
|
||||||
data->family, data->model, data->stepping, data->ext_family,
|
data->family, data->model, data->stepping, data->ext_family,
|
||||||
data->ext_model, data->num_cores, data->l2_cache, brand_code, model_code);
|
data->ext_model, data->num_cores, data->l2_cache, brand_code, (unsigned long long) bits, model_code);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
t = score(&matchtable[i], data, brand_code, model_code);
|
t = score(&matchtable[i], data, brand_code, bits, model_code);
|
||||||
debugf(3, "Entry %d, `%s', score %d\n", i, matchtable[i].name, t);
|
debugf(3, "Entry %d, `%s', score %d\n", i, matchtable[i].name, t);
|
||||||
if (t > bestscore) {
|
if (t > bestscore) {
|
||||||
debugf(2, "Entry `%s' selected - best score so far (%d)\n", matchtable[i].name, t);
|
debugf(2, "Entry `%s' selected - best score so far (%d)\n", matchtable[i].name, t);
|
||||||
|
@ -185,3 +200,19 @@ struct cpu_id_t* get_cached_cpuid(void)
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
return &id;
|
return &id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int match_all(uint64_t bits, uint64_t mask)
|
||||||
|
{
|
||||||
|
return (bits & mask) == mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
void debug_print_lbits(int debuglevel, uint64_t mask)
|
||||||
|
{
|
||||||
|
int i, first = 0;
|
||||||
|
for (i = 0; i < 64; i++) if (mask & (((uint64_t) 1) << i)) {
|
||||||
|
if (first) first = 0;
|
||||||
|
else debugf(2, " + ");
|
||||||
|
debugf(2, "LBIT(%d)", i);
|
||||||
|
}
|
||||||
|
debugf(2, "\n");
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
|
|
||||||
#define COUNT_OF(array) (sizeof(array) / sizeof(array[0]))
|
#define COUNT_OF(array) (sizeof(array) / sizeof(array[0]))
|
||||||
|
|
||||||
|
#define LBIT(x) (((long long) 1) << x)
|
||||||
|
|
||||||
struct feature_map_t {
|
struct feature_map_t {
|
||||||
unsigned bit;
|
unsigned bit;
|
||||||
cpu_feature_t feature;
|
cpu_feature_t feature;
|
||||||
|
@ -38,13 +40,16 @@ void match_features(const struct feature_map_t* matchtable, int count,
|
||||||
|
|
||||||
struct match_entry_t {
|
struct match_entry_t {
|
||||||
int family, model, stepping, ext_family, ext_model;
|
int family, model, stepping, ext_family, ext_model;
|
||||||
int ncores, l2cache, l3cache, brand_code, model_code;
|
int ncores, l2cache, l3cache, brand_code;
|
||||||
|
uint64_t model_bits;
|
||||||
|
int model_code;
|
||||||
char name[32];
|
char name[32];
|
||||||
};
|
};
|
||||||
|
|
||||||
// returns the match score:
|
// returns the match score:
|
||||||
int match_cpu_codename(const struct match_entry_t* matchtable, int count,
|
int match_cpu_codename(const struct match_entry_t* matchtable, int count,
|
||||||
struct cpu_id_t* data, int brand_code, int model_code);
|
struct cpu_id_t* data, int brand_code, uint64_t bits,
|
||||||
|
int model_code);
|
||||||
|
|
||||||
void warnf(const char* format, ...)
|
void warnf(const char* format, ...)
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -77,6 +82,13 @@ int match_pattern(const char* haystack, const char* pattern);
|
||||||
*/
|
*/
|
||||||
struct cpu_id_t* get_cached_cpuid(void);
|
struct cpu_id_t* get_cached_cpuid(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* returns true if all bits of mask are present in `bits'. */
|
||||||
|
int match_all(uint64_t bits, uint64_t mask);
|
||||||
|
|
||||||
|
/* print what bits a mask consists of */
|
||||||
|
void debug_print_lbits(int debuglevel, uint64_t mask);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the current errno
|
* Sets the current errno
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,232 +39,243 @@ const struct amd_code_str { amd_code_t code; char *str; } amd_code_str[] = {
|
||||||
#undef CODE
|
#undef CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int brand_code;
|
||||||
|
uint64_t model_bits;
|
||||||
|
} amd_code_and_bits_t;
|
||||||
|
|
||||||
|
enum _amd_bits_t {
|
||||||
|
X4 = LBIT( 0 ),
|
||||||
|
};
|
||||||
|
typedef enum _amd_bits_t amd_bits_t;
|
||||||
|
|
||||||
|
|
||||||
const struct match_entry_t cpudb_amd[] = {
|
const struct match_entry_t cpudb_amd[] = {
|
||||||
{ -1, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD CPU" },
|
{ -1, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown AMD CPU" },
|
||||||
|
|
||||||
/* 486 and the likes */
|
/* 486 and the likes */
|
||||||
{ 4, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD 486" },
|
{ 4, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown AMD 486" },
|
||||||
{ 4, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX2" },
|
{ 4, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "AMD 486DX2" },
|
||||||
{ 4, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX2WB" },
|
{ 4, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "AMD 486DX2WB" },
|
||||||
{ 4, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX4" },
|
{ 4, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "AMD 486DX4" },
|
||||||
{ 4, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "AMD 486DX4WB" },
|
{ 4, 9, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "AMD 486DX4WB" },
|
||||||
|
|
||||||
/* Pentia clones */
|
/* Pentia clones */
|
||||||
{ 5, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown AMD 586" },
|
{ 5, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown AMD 586" },
|
||||||
{ 5, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" },
|
{ 5, 0, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K5" },
|
||||||
{ 5, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" },
|
{ 5, 1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K5" },
|
||||||
{ 5, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" },
|
{ 5, 2, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K5" },
|
||||||
{ 5, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K5" },
|
{ 5, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K5" },
|
||||||
|
|
||||||
/* The K6 */
|
/* The K6 */
|
||||||
{ 5, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6" },
|
{ 5, 6, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K6" },
|
||||||
{ 5, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6" },
|
{ 5, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K6" },
|
||||||
|
|
||||||
{ 5, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-2" },
|
{ 5, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K6-2" },
|
||||||
{ 5, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-III" },
|
{ 5, 9, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K6-III" },
|
||||||
{ 5, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" },
|
{ 5, 10, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown K6" },
|
||||||
{ 5, 11, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" },
|
{ 5, 11, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown K6" },
|
||||||
{ 5, 12, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown K6" },
|
{ 5, 12, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown K6" },
|
||||||
{ 5, 13, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "K6-2+" },
|
{ 5, 13, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "K6-2+" },
|
||||||
|
|
||||||
/* Athlon et al. */
|
/* Athlon et al. */
|
||||||
{ 6, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (Slot-A)" },
|
{ 6, 1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Athlon (Slot-A)" },
|
||||||
{ 6, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (Slot-A)" },
|
{ 6, 2, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Athlon (Slot-A)" },
|
||||||
{ 6, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Duron (Spitfire)" },
|
{ 6, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Duron (Spitfire)" },
|
||||||
{ 6, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon (ThunderBird)" },
|
{ 6, 4, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Athlon (ThunderBird)" },
|
||||||
|
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Athlon" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Athlon" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON , 0, "Athlon (Palomino)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON, 0 , 0, "Athlon (Palomino)" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Palomino)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_MP, 0 , 0, "Athlon MP (Palomino)" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Palomino)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, DURON, 0 , 0, "Duron (Palomino)" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_XP , 0, "Athlon XP" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, ATHLON_XP, 0 , 0, "Athlon XP" },
|
||||||
|
|
||||||
{ 6, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Athlon XP" },
|
{ 6, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Athlon XP" },
|
||||||
{ 6, 7, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Morgan)" },
|
{ 6, 7, -1, -1, -1, 1, -1, -1, DURON, 0 , 0, "Duron (Morgan)" },
|
||||||
|
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon XP" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Athlon XP" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON , 0, "Athlon XP (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON, 0 , 0, "Athlon XP (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP , 0, "Athlon XP (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP, 0 , 0, "Athlon XP (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, DURON , 0, "Duron (Applebred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, DURON, 0 , 0, "Duron (Applebred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, SEMPRON , 0, "Sempron (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, SEMPRON, 0 , 0, "Sempron (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, 128, -1, SEMPRON , 0, "Sempron (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, 128, -1, SEMPRON, 0 , 0, "Sempron (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, 256, -1, SEMPRON , 0, "Sempron (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, 256, -1, SEMPRON, 0 , 0, "Sempron (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Thoroughbred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_MP, 0 , 0, "Athlon MP (Thoroughbred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M , 0, "Mobile Athlon (T-Bred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M, 0 , 0, "Mobile Athlon (T-Bred)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV , 0, "Mobile Athlon (T-Bred)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV, 0 , 0, "Mobile Athlon (T-Bred)" },
|
||||||
|
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Athlon XP (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Athlon XP (Barton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, 512, -1, ATHLON_XP , 0, "Athlon XP (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, 512, -1, ATHLON_XP, 0 , 0, "Athlon XP (Barton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, 512, -1, SEMPRON , 0, "Sempron (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, 512, -1, SEMPRON, 0 , 0, "Sempron (Barton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, 256, -1, SEMPRON , 0, "Sempron (Thorton)" },
|
{ 6, 10, -1, -1, -1, 1, 256, -1, SEMPRON, 0 , 0, "Sempron (Thorton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, 256, -1, ATHLON_XP , 0, "Athlon XP (Thorton)" },
|
{ 6, 10, -1, -1, -1, 1, 256, -1, ATHLON_XP, 0 , 0, "Athlon XP (Thorton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_MP , 0, "Athlon MP (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_MP, 0 , 0, "Athlon MP (Barton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M , 0, "Mobile Athlon (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M, 0 , 0, "Mobile Athlon (Barton)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV , 0, "Mobile Athlon (Barton)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, ATHLON_XP_M_LV, 0 , 0, "Mobile Athlon (Barton)" },
|
||||||
|
|
||||||
/* K8 Architecture */
|
/* K8 Architecture */
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Unknown K8" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, NC, 0 , 0, "Unknown K8" },
|
||||||
{ 15, -1, -1, 16, -1, 1, -1, -1, NO_CODE , 0, "Unknown K9" },
|
{ 15, -1, -1, 16, -1, 1, -1, -1, NC, 0 , 0, "Unknown K9" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Unknown A64" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, NC, 0 , 0, "Unknown A64" },
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE , 0, "Opteron" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE, 0 , 0, "Opteron" },
|
||||||
{ 15, -1, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE , 0, "Opteron (Dual Core)" },
|
{ 15, -1, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE, 0 , 0, "Opteron (Dual Core)" },
|
||||||
{ 15, 3, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE , 0, "Opteron" },
|
{ 15, 3, -1, 15, -1, 1, -1, -1, OPTERON_SINGLE, 0 , 0, "Opteron" },
|
||||||
{ 15, 3, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE , 0, "Opteron (Dual Core)" },
|
{ 15, 3, -1, 15, -1, 2, -1, -1, OPTERON_DUALCORE, 0 , 0, "Opteron (Dual Core)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (512K)" },
|
{ 15, -1, -1, 15, -1, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (512K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (1024K)" },
|
{ 15, -1, -1, 15, -1, 1, 1024, -1, ATHLON_64, 0 , 0, "Athlon 64 (1024K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_FX , 0, "Athlon FX" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_FX, 0 , 0, "Athlon FX" },
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_64_FX , 0, "Athlon 64 FX" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, ATHLON_64_FX, 0 , 0, "Athlon 64 FX" },
|
||||||
{ 15, 3, -1, 15, 35, 2, -1, -1, ATHLON_64_FX , 0, "Athlon 64 FX X2 (Toledo)" },
|
{ 15, 3, -1, 15, 35, 2, -1, -1, ATHLON_64_FX, 0 , 0, "Athlon 64 FX X2 (Toledo)" },
|
||||||
{ 15, -1, -1, 15, -1, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (512K)" },
|
{ 15, -1, -1, 15, -1, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (512K)" },
|
||||||
{ 15, -1, -1, 15, -1, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (1024K)" },
|
{ 15, -1, -1, 15, -1, 2, 1024, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (1024K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 512, -1, TURION_64 , 0, "Turion 64 (512K)" },
|
{ 15, -1, -1, 15, -1, 1, 512, -1, TURION_64, 0 , 0, "Turion 64 (512K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 1024, -1, TURION_64 , 0, "Turion 64 (1024K)" },
|
{ 15, -1, -1, 15, -1, 1, 1024, -1, TURION_64, 0 , 0, "Turion 64 (1024K)" },
|
||||||
{ 15, -1, -1, 15, -1, 2, 512, -1, TURION_X2 , 0, "Turion 64 X2 (512K)" },
|
{ 15, -1, -1, 15, -1, 2, 512, -1, TURION_X2, 0 , 0, "Turion 64 X2 (512K)" },
|
||||||
{ 15, -1, -1, 15, -1, 2, 1024, -1, TURION_X2 , 0, "Turion 64 X2 (1024K)" },
|
{ 15, -1, -1, 15, -1, 2, 1024, -1, TURION_X2, 0 , 0, "Turion 64 X2 (1024K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 128, -1, SEMPRON , 0, "A64 Sempron (128K)" },
|
{ 15, -1, -1, 15, -1, 1, 128, -1, SEMPRON, 0 , 0, "A64 Sempron (128K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 256, -1, SEMPRON , 0, "A64 Sempron (256K)" },
|
{ 15, -1, -1, 15, -1, 1, 256, -1, SEMPRON, 0 , 0, "A64 Sempron (256K)" },
|
||||||
{ 15, -1, -1, 15, -1, 1, 512, -1, SEMPRON , 0, "A64 Sempron (512K)" },
|
{ 15, -1, -1, 15, -1, 1, 512, -1, SEMPRON, 0 , 0, "A64 Sempron (512K)" },
|
||||||
{ 15, -1, -1, 15, 0x4f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/512K)" },
|
{ 15, -1, -1, 15, 0x4f, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Orleans/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x5f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/512K)" },
|
{ 15, -1, -1, 15, 0x5f, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Orleans/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x2f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Venice/512K)" },
|
{ 15, -1, -1, 15, 0x2f, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Venice/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x2c, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Venice/512K)" },
|
{ 15, -1, -1, 15, 0x2c, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Venice/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x1f, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Winchester/512K)" },
|
{ 15, -1, -1, 15, 0x1f, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Winchester/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x0c, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (Newcastle/512K)" },
|
{ 15, -1, -1, 15, 0x0c, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (Newcastle/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x27, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/512K)" },
|
{ 15, -1, -1, 15, 0x27, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (San Diego/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x37, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/512K)" },
|
{ 15, -1, -1, 15, 0x37, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (San Diego/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x04, 1, 512, -1, ATHLON_64 , 0, "Athlon 64 (ClawHammer/512K)" },
|
{ 15, -1, -1, 15, 0x04, 1, 512, -1, ATHLON_64, 0 , 0, "Athlon 64 (ClawHammer/512K)" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x5f, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (Orleans/1024K)" },
|
{ 15, -1, -1, 15, 0x5f, 1, 1024, -1, ATHLON_64, 0 , 0, "Athlon 64 (Orleans/1024K)" },
|
||||||
{ 15, -1, -1, 15, 0x27, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (San Diego/1024K)" },
|
{ 15, -1, -1, 15, 0x27, 1, 1024, -1, ATHLON_64, 0 , 0, "Athlon 64 (San Diego/1024K)" },
|
||||||
{ 15, -1, -1, 15, 0x04, 1, 1024, -1, ATHLON_64 , 0, "Athlon 64 (ClawHammer/1024K)" },
|
{ 15, -1, -1, 15, 0x04, 1, 1024, -1, ATHLON_64, 0 , 0, "Athlon 64 (ClawHammer/1024K)" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x4b, 2, 256, -1, SEMPRON_DUALCORE , 0, "Athlon 64 X2 (Windsor/256K)" },
|
{ 15, -1, -1, 15, 0x4b, 2, 256, -1, SEMPRON_DUALCORE, 0 , 0, "Athlon 64 X2 (Windsor/256K)" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x23, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Toledo/512K)" },
|
{ 15, -1, -1, 15, 0x23, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Toledo/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x4b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/512K)" },
|
{ 15, -1, -1, 15, 0x4b, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Windsor/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x43, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/512K)" },
|
{ 15, -1, -1, 15, 0x43, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Windsor/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x6b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Brisbane/512K)" },
|
{ 15, -1, -1, 15, 0x6b, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Brisbane/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x2b, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Manchester/512K)"},
|
{ 15, -1, -1, 15, 0x2b, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Manchester/512K)"},
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x23, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Toledo/1024K)" },
|
{ 15, -1, -1, 15, 0x23, 2, 1024, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Toledo/1024K)" },
|
||||||
{ 15, -1, -1, 15, 0x43, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon 64 X2 (Windsor/1024K)" },
|
{ 15, -1, -1, 15, 0x43, 2, 1024, -1, ATHLON_64_X2, 0 , 0, "Athlon 64 X2 (Windsor/1024K)" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x08, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Dublin/128K)"},
|
{ 15, -1, -1, 15, 0x08, 1, 128, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Dublin/128K)"},
|
||||||
{ 15, -1, -1, 15, 0x08, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Dublin/256K)"},
|
{ 15, -1, -1, 15, 0x08, 1, 256, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Dublin/256K)"},
|
||||||
{ 15, -1, -1, 15, 0x0c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Paris)" },
|
{ 15, -1, -1, 15, 0x0c, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Paris)" },
|
||||||
{ 15, -1, -1, 15, 0x1c, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" },
|
{ 15, -1, -1, 15, 0x1c, 1, 128, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/128K)" },
|
||||||
{ 15, -1, -1, 15, 0x1c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" },
|
{ 15, -1, -1, 15, 0x1c, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x1c, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Sonora/128K)"},
|
{ 15, -1, -1, 15, 0x1c, 1, 128, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Sonora/128K)"},
|
||||||
{ 15, -1, -1, 15, 0x1c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Sonora/256K)"},
|
{ 15, -1, -1, 15, 0x1c, 1, 256, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Sonora/256K)"},
|
||||||
{ 15, -1, -1, 15, 0x2c, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" },
|
{ 15, -1, -1, 15, 0x2c, 1, 128, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/128K)" },
|
||||||
{ 15, -1, -1, 15, 0x2c, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" },
|
{ 15, -1, -1, 15, 0x2c, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x2c, 1, 128, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Albany/128K)"},
|
{ 15, -1, -1, 15, 0x2c, 1, 128, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Albany/128K)"},
|
||||||
{ 15, -1, -1, 15, 0x2c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Albany/256K)"},
|
{ 15, -1, -1, 15, 0x2c, 1, 256, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Albany/256K)"},
|
||||||
{ 15, -1, -1, 15, 0x2f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Palermo/128K)" },
|
{ 15, -1, -1, 15, 0x2f, 1, 128, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/128K)" },
|
||||||
{ 15, -1, -1, 15, 0x2f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Palermo/256K)" },
|
{ 15, -1, -1, 15, 0x2f, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Palermo/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x4f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Manila/128K)" },
|
{ 15, -1, -1, 15, 0x4f, 1, 128, -1, SEMPRON, 0 , 0, "Sempron 64 (Manila/128K)" },
|
||||||
{ 15, -1, -1, 15, 0x4f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Manila/256K)" },
|
{ 15, -1, -1, 15, 0x4f, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Manila/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x5f, 1, 128, -1, SEMPRON , 0, "Sempron 64 (Manila/128K)" },
|
{ 15, -1, -1, 15, 0x5f, 1, 128, -1, SEMPRON, 0 , 0, "Sempron 64 (Manila/128K)" },
|
||||||
{ 15, -1, -1, 15, 0x5f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Manila/256K)" },
|
{ 15, -1, -1, 15, 0x5f, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Manila/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x6b, 2, 256, -1, SEMPRON , 0, "Sempron 64 Dual (Sherman/256K)"},
|
{ 15, -1, -1, 15, 0x6b, 2, 256, -1, SEMPRON, 0 , 0, "Sempron 64 Dual (Sherman/256K)"},
|
||||||
{ 15, -1, -1, 15, 0x6b, 2, 512, -1, SEMPRON , 0, "Sempron 64 Dual (Sherman/512K)"},
|
{ 15, -1, -1, 15, 0x6b, 2, 512, -1, SEMPRON, 0 , 0, "Sempron 64 Dual (Sherman/512K)"},
|
||||||
{ 15, -1, -1, 15, 0x7f, 1, 256, -1, SEMPRON , 0, "Sempron 64 (Sparta/256K)" },
|
{ 15, -1, -1, 15, 0x7f, 1, 256, -1, SEMPRON, 0 , 0, "Sempron 64 (Sparta/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x7f, 1, 512, -1, SEMPRON , 0, "Sempron 64 (Sparta/512K)" },
|
{ 15, -1, -1, 15, 0x7f, 1, 512, -1, SEMPRON, 0 , 0, "Sempron 64 (Sparta/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x4c, 1, 256, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Keene/256K)"},
|
{ 15, -1, -1, 15, 0x4c, 1, 256, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Keene/256K)"},
|
||||||
{ 15, -1, -1, 15, 0x4c, 1, 512, -1, M_SEMPRON , 0, "Mobile Sempron 64 (Keene/512K)"},
|
{ 15, -1, -1, 15, 0x4c, 1, 512, -1, M_SEMPRON, 0 , 0, "Mobile Sempron 64 (Keene/512K)"},
|
||||||
{ 15, -1, -1, 15, -1, 2, -1, -1, SEMPRON_DUALCORE , 0, "Sempron Dual Core" },
|
{ 15, -1, -1, 15, -1, 2, -1, -1, SEMPRON_DUALCORE, 0 , 0, "Sempron Dual Core" },
|
||||||
|
|
||||||
{ 15, -1, -1, 15, 0x24, 1, 512, -1, TURION_64 , 0, "Turion 64 (Lancaster/512K)" },
|
{ 15, -1, -1, 15, 0x24, 1, 512, -1, TURION_64, 0 , 0, "Turion 64 (Lancaster/512K)" },
|
||||||
{ 15, -1, -1, 15, 0x24, 1, 1024, -1, TURION_64 , 0, "Turion 64 (Lancaster/1024K)" },
|
{ 15, -1, -1, 15, 0x24, 1, 1024, -1, TURION_64, 0 , 0, "Turion 64 (Lancaster/1024K)" },
|
||||||
{ 15, -1, -1, 15, 0x48, 2, 256, -1, TURION_X2 , 0, "Turion X2 (Taylor)" },
|
{ 15, -1, -1, 15, 0x48, 2, 256, -1, TURION_X2, 0 , 0, "Turion X2 (Taylor)" },
|
||||||
{ 15, -1, -1, 15, 0x48, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Trinidad)" },
|
{ 15, -1, -1, 15, 0x48, 2, 512, -1, TURION_X2, 0 , 0, "Turion X2 (Trinidad)" },
|
||||||
{ 15, -1, -1, 15, 0x4c, 1, 512, -1, TURION_64 , 0, "Turion 64 (Richmond)" },
|
{ 15, -1, -1, 15, 0x4c, 1, 512, -1, TURION_64, 0 , 0, "Turion 64 (Richmond)" },
|
||||||
{ 15, -1, -1, 15, 0x68, 2, 256, -1, TURION_X2 , 0, "Turion X2 (Tyler/256K)" },
|
{ 15, -1, -1, 15, 0x68, 2, 256, -1, TURION_X2, 0 , 0, "Turion X2 (Tyler/256K)" },
|
||||||
{ 15, -1, -1, 15, 0x68, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Tyler/512K)" },
|
{ 15, -1, -1, 15, 0x68, 2, 512, -1, TURION_X2, 0 , 0, "Turion X2 (Tyler/512K)" },
|
||||||
{ 15, -1, -1, 17, 3, 2, 512, -1, TURION_X2 , 0, "Turion X2 (Griffin/512K)" },
|
{ 15, -1, -1, 17, 3, 2, 512, -1, TURION_X2, 0 , 0, "Turion X2 (Griffin/512K)" },
|
||||||
{ 15, -1, -1, 17, 3, 2, 1024, -1, TURION_X2 , 0, "Turion X2 (Griffin/1024K)" },
|
{ 15, -1, -1, 17, 3, 2, 1024, -1, TURION_X2, 0 , 0, "Turion X2 (Griffin/1024K)" },
|
||||||
|
|
||||||
/* K10 Architecture (2007) */
|
/* K10 Architecture (2007) */
|
||||||
{ 15, -1, -1, 16, -1, 1, -1, -1, PHENOM , 0, "Unknown AMD Phenom" },
|
{ 15, -1, -1, 16, -1, 1, -1, -1, PHENOM, 0 , 0, "Unknown AMD Phenom" },
|
||||||
{ 15, 2, -1, 16, -1, 1, -1, -1, PHENOM , 0, "Phenom" },
|
{ 15, 2, -1, 16, -1, 1, -1, -1, PHENOM, 0 , 0, "Phenom" },
|
||||||
{ 15, 2, -1, 16, -1, 3, -1, -1, PHENOM , 0, "Phenom X3 (Toliman)" },
|
{ 15, 2, -1, 16, -1, 3, -1, -1, PHENOM, 0 , 0, "Phenom X3 (Toliman)" },
|
||||||
{ 15, 2, -1, 16, -1, 4, -1, -1, PHENOM , 0, "Phenom X4 (Agena)" },
|
{ 15, 2, -1, 16, -1, 4, -1, -1, PHENOM, 0 , 0, "Phenom X4 (Agena)" },
|
||||||
{ 15, 2, -1, 16, -1, 3, 512, -1, PHENOM , 0, "Phenom X3 (Toliman/256K)" },
|
{ 15, 2, -1, 16, -1, 3, 512, -1, PHENOM, 0 , 0, "Phenom X3 (Toliman/256K)" },
|
||||||
{ 15, 2, -1, 16, -1, 3, 512, -1, PHENOM , 0, "Phenom X3 (Toliman/512K)" },
|
{ 15, 2, -1, 16, -1, 3, 512, -1, PHENOM, 0 , 0, "Phenom X3 (Toliman/512K)" },
|
||||||
{ 15, 2, -1, 16, -1, 4, 128, -1, PHENOM , 0, "Phenom X4 (Agena/128K)" },
|
{ 15, 2, -1, 16, -1, 4, 128, -1, PHENOM, 0 , 0, "Phenom X4 (Agena/128K)" },
|
||||||
{ 15, 2, -1, 16, -1, 4, 256, -1, PHENOM , 0, "Phenom X4 (Agena/256K)" },
|
{ 15, 2, -1, 16, -1, 4, 256, -1, PHENOM, 0 , 0, "Phenom X4 (Agena/256K)" },
|
||||||
{ 15, 2, -1, 16, -1, 4, 512, -1, PHENOM , 0, "Phenom X4 (Agena/512K)" },
|
{ 15, 2, -1, 16, -1, 4, 512, -1, PHENOM , 0 , 0, "Phenom X4 (Agena/512K)" },
|
||||||
{ 15, 2, -1, 16, -1, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon X2 (Kuma)" },
|
{ 15, 2, -1, 16, -1, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon X2 (Kuma)" },
|
||||||
/* Phenom II derivates: */
|
/* Phenom II derivates: */
|
||||||
{ 15, 4, -1, 16, -1, 4, -1, -1, NO_CODE , 0, "Phenom (Deneb-based)" },
|
{ 15, 4, -1, 16, -1, 4, -1, -1, NC, 0 , 0, "Phenom (Deneb-based)" },
|
||||||
{ 15, 4, -1, 16, -1, 1, 1024, -1, SEMPRON , 0, "Sempron (Sargas)" },
|
{ 15, 4, -1, 16, -1, 1, 1024, -1, SEMPRON, 0 , 0, "Sempron (Sargas)" },
|
||||||
{ 15, 4, -1, 16, -1, 2, 512, -1, PHENOM2 , 0, "Phenom II X2 (Callisto)" },
|
{ 15, 4, -1, 16, -1, 2, 512, -1, PHENOM2, 0 , 0, "Phenom II X2 (Callisto)" },
|
||||||
{ 15, 4, -1, 16, -1, 3, 512, -1, PHENOM2 , 0, "Phenom II X3 (Heka)" },
|
{ 15, 4, -1, 16, -1, 3, 512, -1, PHENOM2, 0 , 0, "Phenom II X3 (Heka)" },
|
||||||
{ 15, 4, -1, 16, -1, 4, 512, -1, PHENOM2 , 0, "Phenom II X4" },
|
{ 15, 4, -1, 16, -1, 4, 512, -1, PHENOM2, 0 , 0, "Phenom II X4" },
|
||||||
{ 15, 4, -1, 16, 4, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Deneb)" },
|
{ 15, 4, -1, 16, 4, 4, 512, -1, PHENOM2, 0 , 0, "Phenom II X4 (Deneb)" },
|
||||||
{ 15, 5, -1, 16, 5, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Deneb)" },
|
{ 15, 5, -1, 16, 5, 4, 512, -1, PHENOM2, 0 , 0, "Phenom II X4 (Deneb)" },
|
||||||
{ 15, 4, -1, 16, 10, 4, 512, -1, PHENOM2 , 0, "Phenom II X4 (Zosma)" },
|
{ 15, 4, -1, 16, 10, 4, 512, -1, PHENOM2, 0 , 0, "Phenom II X4 (Zosma)" },
|
||||||
{ 15, 4, -1, 16, 10, 6, 512, -1, PHENOM2 , 0, "Phenom II X6 (Thuban)" },
|
{ 15, 4, -1, 16, 10, 6, 512, -1, PHENOM2, 0 , 0, "Phenom II X6 (Thuban)" },
|
||||||
/* Athlon II derivates: */
|
/* Athlon II derivates: */
|
||||||
{ 15, 6, -1, 16, 6, 2, 512, -1, ATHLON , 0, "Athlon II (Champlain)" },
|
{ 15, 6, -1, 16, 6, 2, 512, -1, ATHLON, 0 , 0, "Athlon II (Champlain)" },
|
||||||
{ 15, 6, -1, 16, 6, 2, 512, -1, ATHLON_64_X2 , 0, "Athlon II X2 (Regor)" },
|
{ 15, 6, -1, 16, 6, 2, 512, -1, ATHLON_64_X2, 0 , 0, "Athlon II X2 (Regor)" },
|
||||||
{ 15, 6, -1, 16, 6, 2, 1024, -1, ATHLON_64_X2 , 0, "Athlon II X2 (Regor)" },
|
{ 15, 6, -1, 16, 6, 2, 1024, -1, ATHLON_64_X2, 0 , 0, "Athlon II X2 (Regor)" },
|
||||||
{ 15, 5, -1, 16, 5, 3, 512, -1, ATHLON_64_X3 , 0, "Athlon II X3 (Rana)" },
|
{ 15, 5, -1, 16, 5, 3, 512, -1, ATHLON_64_X3, 0 , 0, "Athlon II X3 (Rana)" },
|
||||||
{ 15, 5, -1, 16, 5, 4, 512, -1, ATHLON_64_X4 , 0, "Athlon II X4 (Propus)" },
|
{ 15, 5, -1, 16, 5, 4, 512, -1, ATHLON_64_X4, 0 , 0, "Athlon II X4 (Propus)" },
|
||||||
/* Llano APUs (2011): */
|
/* Llano APUs (2011): */
|
||||||
{ 15, 1, -1, 18, 1, 2, -1, -1, FUSION_EA , 0, "Llano X2" },
|
{ 15, 1, -1, 18, 1, 2, -1, -1, FUSION_EA, 0 , 0, "Llano X2" },
|
||||||
{ 15, 1, -1, 18, 1, 3, -1, -1, FUSION_EA , 0, "Llano X3" },
|
{ 15, 1, -1, 18, 1, 3, -1, -1, FUSION_EA, 0 , 0, "Llano X3" },
|
||||||
{ 15, 1, -1, 18, 1, 4, -1, -1, FUSION_EA , 0, "Llano X4" },
|
{ 15, 1, -1, 18, 1, 4, -1, -1, FUSION_EA, 0 , 0, "Llano X4" },
|
||||||
|
|
||||||
/* Family 14h: Bobcat Architecture (2011) */
|
/* Family 14h: Bobcat Architecture (2011) */
|
||||||
{ 15, 2, -1, 20, -1, 1, -1, -1, FUSION_C , 0, "Brazos Ontario" },
|
{ 15, 2, -1, 20, -1, 1, -1, -1, FUSION_C, 0 , 0, "Brazos Ontario" },
|
||||||
{ 15, 2, -1, 20, -1, 2, -1, -1, FUSION_C , 0, "Brazos Ontario (Dual-core)" },
|
{ 15, 2, -1, 20, -1, 2, -1, -1, FUSION_C, 0 , 0, "Brazos Ontario (Dual-core)" },
|
||||||
{ 15, 1, -1, 20, -1, 1, -1, -1, FUSION_E , 0, "Brazos Zacate" },
|
{ 15, 1, -1, 20, -1, 1, -1, -1, FUSION_E, 0 , 0, "Brazos Zacate" },
|
||||||
{ 15, 1, -1, 20, -1, 2, -1, -1, FUSION_E , 0, "Brazos Zacate (Dual-core)" },
|
{ 15, 1, -1, 20, -1, 2, -1, -1, FUSION_E, 0 , 0, "Brazos Zacate (Dual-core)" },
|
||||||
{ 15, 2, -1, 20, -1, 2, -1, -1, FUSION_Z , 0, "Brazos Desna (Dual-core)" },
|
{ 15, 2, -1, 20, -1, 2, -1, -1, FUSION_Z, 0 , 0, "Brazos Desna (Dual-core)" },
|
||||||
|
|
||||||
/* Family 15h: Bulldozer Architecture (2011) */
|
/* Family 15h: Bulldozer Architecture (2011) */
|
||||||
{ 15, -1, -1, 21, 0, 4, -1, -1, NO_CODE , 0, "Bulldozer X2" },
|
{ 15, -1, -1, 21, 0, 4, -1, -1, NC, 0 , 0, "Bulldozer X2" },
|
||||||
{ 15, -1, -1, 21, 1, 4, -1, -1, NO_CODE , 0, "Bulldozer X2" },
|
{ 15, -1, -1, 21, 1, 4, -1, -1, NC, 0 , 0, "Bulldozer X2" },
|
||||||
{ 15, -1, -1, 21, 1, 6, -1, -1, NO_CODE , 0, "Bulldozer X3" },
|
{ 15, -1, -1, 21, 1, 6, -1, -1, NC, 0 , 0, "Bulldozer X3" },
|
||||||
{ 15, -1, -1, 21, 1, 8, -1, -1, NO_CODE , 0, "Bulldozer X4" },
|
{ 15, -1, -1, 21, 1, 8, -1, -1, NC, 0 , 0, "Bulldozer X4" },
|
||||||
/* 2nd-gen, Piledriver core (2012): */
|
/* 2nd-gen, Piledriver core (2012): */
|
||||||
{ 15, -1, -1, 21, 2, 4, -1, -1, NO_CODE , 0, "Vishera X2" },
|
{ 15, -1, -1, 21, 2, 4, -1, -1, NC, 0 , 0, "Vishera X2" },
|
||||||
{ 15, -1, -1, 21, 2, 6, -1, -1, NO_CODE , 0, "Vishera X3" },
|
{ 15, -1, -1, 21, 2, 6, -1, -1, NC, 0 , 0, "Vishera X3" },
|
||||||
{ 15, -1, -1, 21, 2, 8, -1, -1, NO_CODE , 0, "Vishera X4" },
|
{ 15, -1, -1, 21, 2, 8, -1, -1, NC, 0 , 0, "Vishera X4" },
|
||||||
{ 15, 0, -1, 21, 16, 2, -1, -1, FUSION_A , 0, "Trinity X2" },
|
{ 15, 0, -1, 21, 16, 2, -1, -1, FUSION_A, 0 , 0, "Trinity X2" },
|
||||||
{ 15, 0, -1, 21, 16, 4, -1, -1, FUSION_A , 0, "Trinity X4" },
|
{ 15, 0, -1, 21, 16, 4, -1, -1, FUSION_A, 0 , 0, "Trinity X4" },
|
||||||
{ 15, 3, -1, 21, 19, 2, -1, -1, FUSION_A , 0, "Richland X2" },
|
{ 15, 3, -1, 21, 19, 2, -1, -1, FUSION_A, 0 , 0, "Richland X2" },
|
||||||
{ 15, 3, -1, 21, 19, 4, -1, -1, FUSION_A , 0, "Richland X4" },
|
{ 15, 3, -1, 21, 19, 4, -1, -1, FUSION_A, 0 , 0, "Richland X4" },
|
||||||
/* 3rd-gen, Steamroller core (2014): */
|
/* 3rd-gen, Steamroller core (2014): */
|
||||||
{ 15, 0, -1, 21, 48, 2, -1, -1, FUSION_A , 0, "Kaveri X2" },
|
{ 15, 0, -1, 21, 48, 2, -1, -1, FUSION_A, 0 , 0, "Kaveri X2" },
|
||||||
{ 15, 0, -1, 21, 48, 4, -1, -1, FUSION_A , 0, "Kaveri X4" },
|
{ 15, 0, -1, 21, 48, 4, -1, -1, FUSION_A, 0 , 0, "Kaveri X4" },
|
||||||
{ 15, 8, -1, 21, 56, 4, -1, -1, FUSION_A , 0, "Godavari X4" },
|
{ 15, 8, -1, 21, 56, 4, -1, -1, FUSION_A, 0 , 0, "Godavari X4" },
|
||||||
/* 4th-gen, Excavator core (2015): */
|
/* 4th-gen, Excavator core (2015): */
|
||||||
{ 15, 1, -1, 21, 96, 2, -1, -1, FUSION_A , 0, "Carrizo X2" },
|
{ 15, 1, -1, 21, 96, 2, -1, -1, FUSION_A, 0 , 0, "Carrizo X2" },
|
||||||
{ 15, 1, -1, 21, 96, 4, -1, -1, FUSION_A , 0, "Carrizo X4" },
|
{ 15, 1, -1, 21, 96, 4, -1, -1, FUSION_A, 0 , 0, "Carrizo X4" },
|
||||||
{ 15, 5, -1, 21, 101, 2, -1, -1, FUSION_A , 0, "Bristol Ridge X2" },
|
{ 15, 5, -1, 21, 101, 2, -1, -1, FUSION_A, 0 , 0, "Bristol Ridge X2" },
|
||||||
{ 15, 5, -1, 21, 101, 4, -1, -1, FUSION_A , 0, "Bristol Ridge X4" },
|
{ 15, 5, -1, 21, 101, 4, -1, -1, FUSION_A, 0 , 0, "Bristol Ridge X4" },
|
||||||
{ 15, 0, -1, 21, 112, 2, -1, -1, FUSION_A , 0, "Stoney Ridge X2" },
|
{ 15, 0, -1, 21, 112, 2, -1, -1, FUSION_A, 0 , 0, "Stoney Ridge X2" },
|
||||||
{ 15, 0, -1, 21, 112, 2, -1, -1, FUSION_E , 0, "Stoney Ridge X2" },
|
{ 15, 0, -1, 21, 112, 2, -1, -1, FUSION_E, 0 , 0, "Stoney Ridge X2" },
|
||||||
|
|
||||||
/* Family 16h: Jaguar Architecture (2013) */
|
/* Family 16h: Jaguar Architecture (2013) */
|
||||||
{ 15, 0, -1, 22, 0, 2, -1, -1, FUSION_A , 0, "Kabini X2" },
|
{ 15, 0, -1, 22, 0, 2, -1, -1, FUSION_A, 0 , 0, "Kabini X2" },
|
||||||
{ 15, 0, -1, 22, 0, 4, -1, -1, FUSION_A , 0, "Kabini X4" },
|
{ 15, 0, -1, 22, 0, 4, -1, -1, FUSION_A, 0 , 0, "Kabini X4" },
|
||||||
/* 2nd-gen, Puma core (2013): */
|
/* 2nd-gen, Puma core (2013): */
|
||||||
{ 15, 0, -1, 22, 48, 2, -1, -1, FUSION_E , 0, "Mullins X2" },
|
{ 15, 0, -1, 22, 48, 2, -1, -1, FUSION_E, 0 , 0, "Mullins X2" },
|
||||||
{ 15, 0, -1, 22, 48, 4, -1, -1, FUSION_A , 0, "Mullins X4" },
|
{ 15, 0, -1, 22, 48, 4, -1, -1, FUSION_A, 0 , 0, "Mullins X4" },
|
||||||
|
|
||||||
/* Family 17h: Zen Architecture (2017) */
|
/* Family 17h: Zen Architecture (2017) */
|
||||||
//{ 15, -1, -1, 23, 1, 8, -1, -1, NO_CODE , 0, "Ryzen 7" }, //FIXME
|
//{ 15, -1, -1, 23, 1, 8, -1, -1, NC, 0 , 0, "Ryzen 7" }, //FIXME
|
||||||
//{ 15, -1, -1, 23, 1, 6, -1, -1, NO_CODE , 0, "Ryzen 5" }, //TBA
|
//{ 15, -1, -1, 23, 1, 6, -1, -1, NC, 0 , 0, "Ryzen 5" }, //TBA
|
||||||
//{ 15, -1, -1, 23, 1, 4, -1, -1, NO_CODE , 0, "Ryzen 5" }, //TBA
|
//{ 15, -1, -1, 23, 1, 4, -1, -1, NC, 0 , 0, "Ryzen 5" }, //TBA
|
||||||
//{ 15, -1, -1, 23, 1, 4, -1, -1, NO_CODE , 0, "Ryzen 3" }, //TBA
|
//{ 15, -1, -1, 23, 1, 4, -1, -1, NC, 0 , 0, "Ryzen 3" }, //TBA
|
||||||
//{ 15, -1, -1, 23, 1, 4, -1, -1, NO_CODE , 0, "Raven Ridge" }, //TBA
|
//{ 15, -1, -1, 23, 1, 4, -1, -1, NC, 0 , 0, "Raven Ridge" }, //TBA
|
||||||
|
|
||||||
/* Newer Opterons: */
|
/* Newer Opterons: */
|
||||||
{ 15, 9, -1, 22, 9, 8, -1, -1, OPTERON_GENERIC , 0, "Magny-Cours Opteron" },
|
{ 15, 9, -1, 22, 9, 8, -1, -1, OPTERON_GENERIC, 0 , 0, "Magny-Cours Opteron" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -446,12 +457,13 @@ static amd_code_t decode_amd_codename_part1(const char *bs)
|
||||||
if (match_pattern(bs, "Z-##")) return FUSION_Z;
|
if (match_pattern(bs, "Z-##")) return FUSION_Z;
|
||||||
if (match_pattern(bs, "E#-####") || match_pattern(bs, "A#-####")) return FUSION_EA;
|
if (match_pattern(bs, "E#-####") || match_pattern(bs, "A#-####")) return FUSION_EA;
|
||||||
|
|
||||||
return (amd_code_t) NO_CODE;
|
return (amd_code_t) NC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void decode_amd_codename(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
static void decode_amd_codename(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
||||||
{
|
{
|
||||||
amd_code_t code = decode_amd_codename_part1(data->brand_str);
|
amd_code_t code = decode_amd_codename_part1(data->brand_str);
|
||||||
|
uint64_t bits = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char* code_str = NULL;
|
char* code_str = NULL;
|
||||||
for (i = 0; i < COUNT_OF(amd_code_str); i++) {
|
for (i = 0; i < COUNT_OF(amd_code_str); i++) {
|
||||||
|
@ -467,7 +479,7 @@ static void decode_amd_codename(struct cpu_raw_data_t* raw, struct cpu_id_t* dat
|
||||||
else
|
else
|
||||||
debugf(2, "Detected AMD brand code: %d\n", code);
|
debugf(2, "Detected AMD brand code: %d\n", code);
|
||||||
internal->code.amd = code;
|
internal->code.amd = code;
|
||||||
internal->score = match_cpu_codename(cpudb_amd, COUNT_OF(cpudb_amd), data, code, 0);
|
internal->score = match_cpu_codename(cpudb_amd, COUNT_OF(cpudb_amd), data, code, bits, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cpuid_identify_amd(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
int cpuid_identify_amd(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
||||||
|
|
|
@ -37,6 +37,11 @@ const struct intel_bcode_str { intel_code_t code; char *str; } intel_bcode_str[]
|
||||||
#undef CODE
|
#undef CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int code;
|
||||||
|
uint64_t bits;
|
||||||
|
} intel_code_and_bits_t;
|
||||||
|
|
||||||
enum _intel_model_t {
|
enum _intel_model_t {
|
||||||
UNKNOWN = -1,
|
UNKNOWN = -1,
|
||||||
_3000 = 100,
|
_3000 = 100,
|
||||||
|
@ -54,285 +59,305 @@ enum _intel_model_t {
|
||||||
};
|
};
|
||||||
typedef enum _intel_model_t intel_model_t;
|
typedef enum _intel_model_t intel_model_t;
|
||||||
|
|
||||||
|
enum _intel_bits_t {
|
||||||
|
PENTIUM_ = LBIT( 0 ),
|
||||||
|
CELERON_ = LBIT( 1 ),
|
||||||
|
MOBILE_ = LBIT( 2 ),
|
||||||
|
CORE_ = LBIT( 3 ),
|
||||||
|
_I_ = LBIT( 4 ),
|
||||||
|
_M_ = LBIT( 5 ),
|
||||||
|
_3 = LBIT( 6 ),
|
||||||
|
_5 = LBIT( 7 ),
|
||||||
|
_7 = LBIT( 8 ),
|
||||||
|
XEON_ = LBIT( 9 ),
|
||||||
|
_MP = LBIT( 10 ),
|
||||||
|
ATOM_ = LBIT( 11 ),
|
||||||
|
|
||||||
|
};
|
||||||
|
typedef enum _intel_bits_t intel_bits_t;
|
||||||
|
|
||||||
const struct match_entry_t cpudb_intel[] = {
|
const struct match_entry_t cpudb_intel[] = {
|
||||||
{ -1, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Intel CPU" },
|
{ -1, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Intel CPU" },
|
||||||
|
|
||||||
/* i486 */
|
/* i486 */
|
||||||
{ 4, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown i486" },
|
{ 4, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown i486" },
|
||||||
{ 4, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX-25/33" },
|
{ 4, 0, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX-25/33" },
|
||||||
{ 4, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX-50" },
|
{ 4, 1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX-50" },
|
||||||
{ 4, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SX" },
|
{ 4, 2, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 SX" },
|
||||||
{ 4, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX2" },
|
{ 4, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX2" },
|
||||||
{ 4, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SL" },
|
{ 4, 4, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 SL" },
|
||||||
{ 4, 5, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 SX2" },
|
{ 4, 5, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 SX2" },
|
||||||
{ 4, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX2 WriteBack" },
|
{ 4, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX2 WriteBack" },
|
||||||
{ 4, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX4" },
|
{ 4, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX4" },
|
||||||
{ 4, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "i486 DX4 WriteBack" },
|
{ 4, 9, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "i486 DX4 WriteBack" },
|
||||||
|
|
||||||
/* All Pentia:
|
/* All Pentia:
|
||||||
Pentium 1 */
|
Pentium 1 */
|
||||||
{ 5, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium" },
|
{ 5, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Pentium" },
|
||||||
{ 5, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium A-Step" },
|
{ 5, 0, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium A-Step" },
|
||||||
{ 5, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.8u)" },
|
{ 5, 1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium 1 (0.8u)" },
|
||||||
{ 5, 2, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" },
|
{ 5, 2, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium 1 (0.35u)" },
|
||||||
{ 5, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium OverDrive" },
|
{ 5, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium OverDrive" },
|
||||||
{ 5, 4, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" },
|
{ 5, 4, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium 1 (0.35u)" },
|
||||||
{ 5, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium 1 (0.35u)" },
|
{ 5, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium 1 (0.35u)" },
|
||||||
{ 5, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium MMX (0.25u)" },
|
{ 5, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium MMX (0.25u)" },
|
||||||
|
|
||||||
/* Pentium 2 / 3 / M / Conroe / whatsnext - all P6 based. */
|
/* Pentium 2 / 3 / M / Conroe / whatsnext - all P6 based. */
|
||||||
{ 6, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown P6" },
|
{ 6, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown P6" },
|
||||||
{ 6, 0, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium Pro" },
|
{ 6, 0, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium Pro" },
|
||||||
{ 6, 1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium Pro" },
|
{ 6, 1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium Pro" },
|
||||||
{ 6, 3, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Klamath)" },
|
{ 6, 3, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium II (Klamath)" },
|
||||||
{ 6, 5, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Deschutes)" },
|
{ 6, 5, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium II (Deschutes)" },
|
||||||
{ 6, 5, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile Pentium II (Tonga)"},
|
{ 6, 5, -1, -1, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile Pentium II (Tonga)"},
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium II (Dixon)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, NC,0 , 0, "Pentium II (Dixon)" },
|
||||||
|
|
||||||
{ 6, 3, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Klamath)" },
|
{ 6, 3, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-II Xeon (Klamath)" },
|
||||||
{ 6, 5, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Drake)" },
|
{ 6, 5, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-II Xeon (Drake)" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, XEON , 0, "P-II Xeon (Dixon)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-II Xeon (Dixon)" },
|
||||||
|
|
||||||
{ 6, 5, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-II Celeron (Covingtons" },
|
{ 6, 5, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-II Celeron (Covington)" },
|
||||||
{ 6, 6, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-II Celeron (Mendocino)" },
|
{ 6, 6, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-II Celeron (Mendocino)" },
|
||||||
|
|
||||||
/* -------------------------------------------------- */
|
/* -------------------------------------------------- */
|
||||||
|
|
||||||
{ 6, 7, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Katmai)" },
|
{ 6, 7, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium III (Katmai)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Coppermine)"},
|
{ 6, 8, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium III (Coppermine)"},
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Coppermine)"},
|
{ 6, 10, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium III (Coppermine)"},
|
||||||
{ 6, 11, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Pentium III (Tualatin)" },
|
{ 6, 11, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Pentium III (Tualatin)" },
|
||||||
|
|
||||||
{ 6, 7, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Tanner)" },
|
{ 6, 7, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-III Xeon (Tanner)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Cascades)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-III Xeon (Cascades)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Cascades)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-III Xeon (Cascades)" },
|
||||||
{ 6, 11, -1, -1, -1, 1, -1, -1, XEON , 0, "P-III Xeon (Tualatin)" },
|
{ 6, 11, -1, -1, -1, 1, -1, -1, NC, XEON_ , 0, "P-III Xeon (Tualatin)" },
|
||||||
|
|
||||||
{ 6, 7, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Katmai)" },
|
{ 6, 7, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-III Celeron (Katmai)" },
|
||||||
{ 6, 8, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Coppermine)" },
|
{ 6, 8, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-III Celeron (Coppermine)" },
|
||||||
{ 6, 10, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Coppermine)" },
|
{ 6, 10, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-III Celeron (Coppermine)" },
|
||||||
{ 6, 11, -1, -1, -1, 1, -1, -1, CELERON , 0, "P-III Celeron (Tualatin)" },
|
{ 6, 11, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "P-III Celeron (Tualatin)" },
|
||||||
|
|
||||||
/* Netburst based (Pentium 4 and later)
|
/* Netburst based (Pentium 4 and later)
|
||||||
classic P4s */
|
classic P4s */
|
||||||
{ 15, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium 4" },
|
{ 15, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Pentium 4" },
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, CELERON , 0, "Unknown P-4 Celeron" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "Unknown P-4 Celeron" },
|
||||||
{ 15, -1, -1, 15, -1, 1, -1, -1, XEON , 0, "Unknown Xeon" },
|
{ 15, -1, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Unknown Xeon" },
|
||||||
|
|
||||||
{ 15, 0, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Willamette)" },
|
{ 15, 0, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Willamette)" },
|
||||||
{ 15, 1, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Willamette)" },
|
{ 15, 1, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Willamette)" },
|
||||||
{ 15, 2, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Northwood)" },
|
{ 15, 2, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Northwood)" },
|
||||||
{ 15, 3, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Prescott)" },
|
{ 15, 3, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Prescott)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Prescott)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Prescott)" },
|
||||||
{ 15, 6, -1, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium 4 (Cedar Mill)" },
|
{ 15, 6, -1, 15, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium 4 (Cedar Mill)" },
|
||||||
{ 15, 0, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Willamette)" },
|
{ 15, 0, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Willamette)" },
|
||||||
{ 15, 1, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Willamette)" },
|
{ 15, 1, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Willamette)" },
|
||||||
{ 15, 2, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Northwood)" },
|
{ 15, 2, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Northwood)" },
|
||||||
{ 15, 3, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Prescott)" },
|
{ 15, 3, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Prescott)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Prescott)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Prescott)" },
|
||||||
{ 15, 6, -1, 15, -1, 1, -1, -1, MOBILE_PENTIUM , 0, "Mobile P-4 (Cedar Mill)" },
|
{ 15, 6, -1, 15, -1, 1, -1, -1, NC, MOBILE_|PENTIUM_, 0, "Mobile P-4 (Cedar Mill)" },
|
||||||
|
|
||||||
/* server CPUs */
|
/* server CPUs */
|
||||||
{ 15, 0, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Foster)" },
|
{ 15, 0, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Foster)" },
|
||||||
{ 15, 1, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Foster)" },
|
{ 15, 1, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Foster)" },
|
||||||
{ 15, 2, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Prestonia)" },
|
{ 15, 2, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Prestonia)" },
|
||||||
{ 15, 2, -1, 15, -1, 1, -1, -1, XEONMP , 0, "Xeon (Gallatin)" },
|
{ 15, 2, -1, 15, -1, 1, -1, -1, NC, XEON_|_MP , 0, "Xeon (Gallatin)" },
|
||||||
{ 15, 3, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Nocona)" },
|
{ 15, 3, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Nocona)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Nocona)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Nocona)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, XEON_IRWIN , 0, "Xeon (Irwindale)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, IRWIN, XEON_ , 0, "Xeon (Irwindale)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, XEONMP , 0, "Xeon (Cranford)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, NC, XEON_|_MP , 0, "Xeon (Cranford)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, XEON_POTOMAC , 0, "Xeon (Potomac)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, POTOMAC, XEON_ , 0, "Xeon (Potomac)" },
|
||||||
{ 15, 6, -1, 15, -1, 1, -1, -1, XEON , 0, "Xeon (Dempsey)" },
|
{ 15, 6, -1, 15, -1, 1, -1, -1, NC, XEON_ , 0, "Xeon (Dempsey)" },
|
||||||
|
|
||||||
/* Pentium Ds */
|
/* Pentium Ds */
|
||||||
{ 15, 4, 4, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium D (SmithField)" },
|
{ 15, 4, 4, 15, -1, 1, -1, -1, NC, 0 , 0, "Pentium D (SmithField)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, PENTIUM_D , 0, "Pentium D (SmithField)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, PENTIUM_D, 0 , 0, "Pentium D (SmithField)" },
|
||||||
{ 15, 4, 7, 15, -1, 1, -1, -1, NO_CODE , 0, "Pentium D (SmithField)" },
|
{ 15, 4, 7, 15, -1, 1, -1, -1, NC, 0 , 0, "Pentium D (SmithField)" },
|
||||||
{ 15, 6, -1, 15, -1, 1, -1, -1, PENTIUM_D , 0, "Pentium D (Presler)" },
|
{ 15, 6, -1, 15, -1, 1, -1, -1, PENTIUM_D, 0 , 0, "Pentium D (Presler)" },
|
||||||
|
|
||||||
/* Celeron and Celeron Ds */
|
/* Celeron and Celeron Ds */
|
||||||
{ 15, 1, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron (Willamette)" },
|
{ 15, 1, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "P-4 Celeron (Willamette)" },
|
||||||
{ 15, 2, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron (Northwood)" },
|
{ 15, 2, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "P-4 Celeron (Northwood)" },
|
||||||
{ 15, 3, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Prescott)" },
|
{ 15, 3, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "P-4 Celeron D (Prescott)" },
|
||||||
{ 15, 4, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Prescott)" },
|
{ 15, 4, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "P-4 Celeron D (Prescott)" },
|
||||||
{ 15, 6, -1, 15, -1, 1, -1, -1, CELERON , 0, "P-4 Celeron D (Cedar Mill)" },
|
{ 15, 6, -1, 15, -1, 1, -1, -1, NC, CELERON_ , 0, "P-4 Celeron D (Cedar Mill)" },
|
||||||
|
|
||||||
/* -------------------------------------------------- */
|
/* -------------------------------------------------- */
|
||||||
/* Intel Core microarchitecture - P6-based */
|
/* Intel Core microarchitecture - P6-based */
|
||||||
|
|
||||||
{ 6, 9, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Pentium M" },
|
{ 6, 9, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Pentium M" },
|
||||||
{ 6, 9, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Unknown Pentium M" },
|
{ 6, 9, -1, -1, -1, 1, -1, -1, PENTIUM_M, 0 , 0, "Unknown Pentium M" },
|
||||||
{ 6, 9, -1, -1, -1, 1, -1, -1, PENTIUM , 0, "Pentium M (Banias)" },
|
{ 6, 9, -1, -1, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium M (Banias)" },
|
||||||
{ 6, 9, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Pentium M (Banias)" },
|
{ 6, 9, -1, -1, -1, 1, -1, -1, PENTIUM_M, 0 , 0, "Pentium M (Banias)" },
|
||||||
{ 6, 9, -1, -1, -1, 1, -1, -1, CELERON , 0, "Celeron M" },
|
{ 6, 9, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "Celeron M" },
|
||||||
{ 6, 13, -1, -1, -1, 1, -1, -1, PENTIUM , 0, "Pentium M (Dothan)" },
|
{ 6, 13, -1, -1, -1, 1, -1, -1, NC, PENTIUM_ , 0, "Pentium M (Dothan)" },
|
||||||
{ 6, 13, -1, -1, -1, 1, -1, -1, MOBILE_PENTIUM_M , 0, "Pentium M (Dothan)" },
|
{ 6, 13, -1, -1, -1, 1, -1, -1, PENTIUM_M, 0 , 0, "Pentium M (Dothan)" },
|
||||||
{ 6, 13, -1, -1, -1, 1, -1, -1, CELERON , 0, "Celeron M" },
|
{ 6, 13, -1, -1, -1, 1, -1, -1, NC, CELERON_ , 0, "Celeron M" },
|
||||||
|
|
||||||
{ 6, 12, -1, -1, -1, -1, -1, -1, ATOM_UNKNOWN , 0, "Unknown Atom" },
|
{ 6, 12, -1, -1, -1, -1, -1, -1, NC, ATOM_ , 0, "Unknown Atom" },
|
||||||
{ 6, 12, -1, -1, -1, -1, -1, -1, ATOM_DIAMONDVILLE , 0, "Atom (Diamondville)" },
|
{ 6, 12, -1, -1, -1, -1, -1, -1, DIAMONDVILLE,ATOM_, 0, "Atom (Diamondville)" },
|
||||||
{ 6, 12, -1, -1, -1, -1, -1, -1, ATOM_SILVERTHORNE , 0, "Atom (Silverthorne)" },
|
{ 6, 12, -1, -1, -1, -1, -1, -1, SILVERTHORNE,ATOM_, 0, "Atom (Silverthorne)" },
|
||||||
{ 6, 12, -1, -1, -1, -1, -1, -1, ATOM_CEDARVIEW , 0, "Atom (Cedarview)" },
|
{ 6, 12, -1, -1, -1, -1, -1, -1, CEDARVIEW, ATOM_ , 0, "Atom (Cedarview)" },
|
||||||
{ 6, 6, -1, -1, -1, -1, -1, -1, ATOM_CEDARVIEW , 0, "Atom (Cedarview)" },
|
{ 6, 6, -1, -1, -1, -1, -1, -1, CEDARVIEW, ATOM_ , 0, "Atom (Cedarview)" },
|
||||||
{ 6, 12, -1, -1, -1, -1, -1, -1, ATOM_PINEVIEW , 0, "Atom (Pineview)" },
|
{ 6, 12, -1, -1, -1, -1, -1, -1, PINEVIEW, ATOM_ , 0, "Atom (Pineview)" },
|
||||||
|
|
||||||
/* -------------------------------------------------- */
|
/* -------------------------------------------------- */
|
||||||
|
|
||||||
{ 6, 14, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Yonah" },
|
{ 6, 14, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Yonah" },
|
||||||
{ 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO , 0, "Yonah (Core Solo)" },
|
{ 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO, 0 , 0, "Yonah (Core Solo)" },
|
||||||
{ 6, 14, -1, -1, -1, 2, -1, -1, CORE_DUO , 0, "Yonah (Core Duo)" },
|
{ 6, 14, -1, -1, -1, 2, -1, -1, CORE_DUO, 0 , 0, "Yonah (Core Duo)" },
|
||||||
{ 6, 14, -1, -1, -1, 1, -1, -1, MOBILE_CORE_SOLO , 0, "Yonah (Core Solo)" },
|
{ 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO, MOBILE_, 0, "Yonah (Core Solo)" },
|
||||||
{ 6, 14, -1, -1, -1, 2, -1, -1, MOBILE_CORE_DUO , 0, "Yonah (Core Duo)" },
|
{ 6, 14, -1, -1, -1, 2, -1, -1, CORE_DUO , MOBILE_, 0, "Yonah (Core Duo)" },
|
||||||
{ 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO , 0, "Yonah (Core Solo)" },
|
{ 6, 14, -1, -1, -1, 1, -1, -1, CORE_SOLO, 0 , 0, "Yonah (Core Solo)" },
|
||||||
|
|
||||||
{ 6, 15, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Unknown Core 2" },
|
{ 6, 15, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Unknown Core 2" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 4096, -1, CORE_DUO , 0, "Conroe (Core 2 Duo)" },
|
{ 6, 15, -1, -1, -1, 2, 4096, -1, CORE_DUO, 0 , 0, "Conroe (Core 2 Duo)" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 1024, -1, CORE_DUO , 0, "Conroe (Core 2 Duo) 1024K" },
|
{ 6, 15, -1, -1, -1, 2, 1024, -1, CORE_DUO, 0 , 0, "Conroe (Core 2 Duo) 1024K" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 512, -1, CORE_DUO , 0, "Conroe (Core 2 Duo) 512K" },
|
{ 6, 15, -1, -1, -1, 2, 512, -1, CORE_DUO, 0 , 0, "Conroe (Core 2 Duo) 512K" },
|
||||||
{ 6, 15, -1, -1, -1, 4, -1, -1, QUAD_CORE , 0, "Kentsfield (Core 2 Quad)" },
|
{ 6, 15, -1, -1, -1, 4, -1, -1, QUAD_CORE, 0 , 0, "Kentsfield (Core 2 Quad)" },
|
||||||
{ 6, 15, -1, -1, -1, 4, 4096, -1, QUAD_CORE , 0, "Kentsfield (Core 2 Quad)" },
|
{ 6, 15, -1, -1, -1, 4, 4096, -1, QUAD_CORE, 0 , 0, "Kentsfield (Core 2 Quad)" },
|
||||||
{ 6, 15, -1, -1, -1, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" },
|
{ 6, 15, -1, -1, -1, 400, -1, -1, MORE_THAN_QUADCORE, 0, 0, "More than quad-core" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 2048, -1, CORE_DUO , 0, "Allendale (Core 2 Duo)" },
|
{ 6, 15, -1, -1, -1, 2, 2048, -1, CORE_DUO, 0 , 0, "Allendale (Core 2 Duo)" },
|
||||||
{ 6, 15, -1, -1, -1, 2, -1, -1, MOBILE_CORE_DUO , 0, "Merom (Core 2 Duo)" },
|
{ 6, 15, -1, -1, -1, 2, -1, -1, MOBILE_CORE_DUO, 0, 0, "Merom (Core 2 Duo)" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 2048, -1, MEROM , 0, "Merom (Core 2 Duo) 2048K" },
|
{ 6, 15, -1, -1, -1, 2, 2048, -1, MEROM, 0 , 0, "Merom (Core 2 Duo) 2048K" },
|
||||||
{ 6, 15, -1, -1, -1, 2, 4096, -1, MEROM , 0, "Merom (Core 2 Duo) 4096K" },
|
{ 6, 15, -1, -1, -1, 2, 4096, -1, MEROM, 0 , 0, "Merom (Core 2 Duo) 4096K" },
|
||||||
|
|
||||||
{ 6, 15, -1, -1, 15, 1, -1, -1, CELERON , 0, "Conroe-L (Celeron)" },
|
{ 6, 15, -1, -1, 15, 1, -1, -1, NC, CELERON_ , 0, "Conroe-L (Celeron)" },
|
||||||
{ 6, 6, -1, -1, 22, 1, -1, -1, CELERON , 0, "Conroe-L (Celeron)" },
|
{ 6, 6, -1, -1, 22, 1, -1, -1, NC, CELERON_ , 0, "Conroe-L (Celeron)" },
|
||||||
{ 6, 15, -1, -1, 15, 2, -1, -1, CELERON , 0, "Conroe-L (Allendale)" },
|
{ 6, 15, -1, -1, 15, 2, -1, -1, NC, CELERON_ , 0, "Conroe-L (Allendale)" },
|
||||||
{ 6, 6, -1, -1, 22, 2, -1, -1, CELERON , 0, "Conroe-L (Allendale)" },
|
{ 6, 6, -1, -1, 22, 2, -1, -1, NC, CELERON_ , 0, "Conroe-L (Allendale)" },
|
||||||
|
|
||||||
|
|
||||||
{ 6, 6, -1, -1, 22, 1, -1, -1, NO_CODE , 0, "Unknown Core ?" },
|
{ 6, 6, -1, -1, 22, 1, -1, -1, NC, 0 , 0, "Unknown Core ?" },
|
||||||
{ 6, 7, -1, -1, 23, 1, -1, -1, NO_CODE , 0, "Unknown Core ?" },
|
{ 6, 7, -1, -1, 23, 1, -1, -1, NC, 0 , 0, "Unknown Core ?" },
|
||||||
{ 6, 6, -1, -1, 22, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" },
|
{ 6, 6, -1, -1, 22, 400, -1, -1, MORE_THAN_QUADCORE, 0, 0, "More than quad-core" },
|
||||||
{ 6, 7, -1, -1, 23, 400, -1, -1, MORE_THAN_QUADCORE, 0, "More than quad-core" },
|
{ 6, 7, -1, -1, 23, 400, -1, -1, MORE_THAN_QUADCORE, 0, 0, "More than quad-core" },
|
||||||
|
|
||||||
{ 6, 7, -1, -1, 23, 1, -1, -1, CORE_SOLO , 0, "Unknown Core 45nm" },
|
{ 6, 7, -1, -1, 23, 1, -1, -1, CORE_SOLO , 0, 0, "Unknown Core 45nm" },
|
||||||
{ 6, 7, -1, -1, 23, 1, -1, -1, CORE_DUO , 0, "Unknown Core 45nm" },
|
{ 6, 7, -1, -1, 23, 1, -1, -1, CORE_DUO , 0, 0, "Unknown Core 45nm" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 1024, -1, WOLFDALE , 0, "Celeron Wolfdale 1M" },
|
{ 6, 7, -1, -1, 23, 2, 1024, -1, WOLFDALE , 0, 0, "Celeron Wolfdale 1M" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 2048, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 2M" },
|
{ 6, 7, -1, -1, 23, 2, 2048, -1, WOLFDALE , 0, 0, "Wolfdale (Core 2 Duo) 2M" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 3072, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 3M" },
|
{ 6, 7, -1, -1, 23, 2, 3072, -1, WOLFDALE , 0, 0, "Wolfdale (Core 2 Duo) 3M" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 6144, -1, WOLFDALE , 0, "Wolfdale (Core 2 Duo) 6M" },
|
{ 6, 7, -1, -1, 23, 2, 6144, -1, WOLFDALE , 0, 0, "Wolfdale (Core 2 Duo) 6M" },
|
||||||
{ 6, 7, -1, -1, 23, 1, -1, -1, MOBILE_CORE_DUO , 0, "Penryn (Core 2 Duo)" },
|
{ 6, 7, -1, -1, 23, 1, -1, -1, MOBILE_CORE_DUO , 0, 0, "Penryn (Core 2 Duo)" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 1024, -1, PENRYN , 0, "Penryn (Core 2 Duo)" },
|
{ 6, 7, -1, -1, 23, 2, 1024, -1, PENRYN , 0, 0, "Penryn (Core 2 Duo)" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 3072, -1, PENRYN , 0, "Penryn (Core 2 Duo) 3M" },
|
{ 6, 7, -1, -1, 23, 2, 3072, -1, PENRYN , 0, 0, "Penryn (Core 2 Duo) 3M" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 6144, -1, PENRYN , 0, "Penryn (Core 2 Duo) 6M" },
|
{ 6, 7, -1, -1, 23, 2, 6144, -1, PENRYN , 0, 0, "Penryn (Core 2 Duo) 6M" },
|
||||||
{ 6, 7, -1, -1, 23, 4, 2048, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 2M"},
|
{ 6, 7, -1, -1, 23, 4, 2048, -1, NC , 0, 0, "Yorkfield (Core 2 Quad) 2M"},
|
||||||
{ 6, 7, -1, -1, 23, 4, 3072, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 3M"},
|
{ 6, 7, -1, -1, 23, 4, 3072, -1, NC , 0, 0, "Yorkfield (Core 2 Quad) 3M"},
|
||||||
{ 6, 7, -1, -1, 23, 4, 6144, -1, QUAD_CORE , 0, "Yorkfield (Core 2 Quad) 6M"},
|
{ 6, 7, -1, -1, 23, 4, 6144, -1, NC , 0, 0, "Yorkfield (Core 2 Quad) 6M"},
|
||||||
|
|
||||||
/* Core microarchitecture-based Xeons: */
|
/* Core microarchitecture-based Xeons: */
|
||||||
{ 6, 14, -1, -1, 14, 1, -1, -1, XEON , 0, "Xeon LV" },
|
{ 6, 14, -1, -1, 14, 1, -1, -1, NC, XEON_ , 0, "Xeon LV" },
|
||||||
{ 6, 15, -1, -1, 15, 2, 4096, -1, XEON , _5100, "Xeon (Woodcrest)" },
|
{ 6, 15, -1, -1, 15, 2, 4096, -1, NC, XEON_ , _5100, "Xeon (Woodcrest)" },
|
||||||
{ 6, 15, -1, -1, 15, 2, 2048, -1, XEON , _3000, "Xeon (Conroe/2M)" },
|
{ 6, 15, -1, -1, 15, 2, 2048, -1, NC, XEON_ , _3000, "Xeon (Conroe/2M)" },
|
||||||
{ 6, 15, -1, -1, 15, 2, 4096, -1, XEON , _3000, "Xeon (Conroe/4M)" },
|
{ 6, 15, -1, -1, 15, 2, 4096, -1, NC, XEON_ , _3000, "Xeon (Conroe/4M)" },
|
||||||
{ 6, 15, -1, -1, 15, 4, 4096, -1, XEON , X3200, "Xeon (Kentsfield)" },
|
{ 6, 15, -1, -1, 15, 4, 4096, -1, NC, XEON_ , X3200, "Xeon (Kentsfield)" },
|
||||||
{ 6, 15, -1, -1, 15, 4, 4096, -1, XEON , _5300, "Xeon (Clovertown)" },
|
{ 6, 15, -1, -1, 15, 4, 4096, -1, NC, XEON_ , _5300, "Xeon (Clovertown)" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 6144, -1, XEON , _3100, "Xeon (Wolfdale)" },
|
{ 6, 7, -1, -1, 23, 2, 6144, -1, NC, XEON_ , _3100, "Xeon (Wolfdale)" },
|
||||||
{ 6, 7, -1, -1, 23, 2, 6144, -1, XEON , _5200, "Xeon (Wolfdale DP)" },
|
{ 6, 7, -1, -1, 23, 2, 6144, -1, NC, XEON_ , _5200, "Xeon (Wolfdale DP)" },
|
||||||
{ 6, 7, -1, -1, 23, 4, 6144, -1, XEON , _5400, "Xeon (Harpertown)" },
|
{ 6, 7, -1, -1, 23, 4, 6144, -1, NC, XEON_ , _5400, "Xeon (Harpertown)" },
|
||||||
{ 6, 7, -1, -1, 23, 4, 3072, -1, XEON , X3300, "Xeon (Yorkfield/3M)" },
|
{ 6, 7, -1, -1, 23, 4, 3072, -1, NC, XEON_ , X3300, "Xeon (Yorkfield/3M)" },
|
||||||
{ 6, 7, -1, -1, 23, 4, 6144, -1, XEON , X3300, "Xeon (Yorkfield/6M)" },
|
{ 6, 7, -1, -1, 23, 4, 6144, -1, NC, XEON_ , X3300, "Xeon (Yorkfield/6M)" },
|
||||||
|
|
||||||
/* Nehalem CPUs (45nm): */
|
/* Nehalem CPUs (45nm): */
|
||||||
{ 6, 10, -1, -1, 26, 4, -1, -1, XEON_GAINESTOWN , 0, "Gainestown (Xeon)" },
|
{ 6, 10, -1, -1, 26, 4, -1, -1, GAINESTOWN, XEON_ , 0, "Gainestown (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 26, 4, -1, 4096, XEON_GAINESTOWN , 0, "Gainestown 4M (Xeon)" },
|
{ 6, 10, -1, -1, 26, 4, -1, 4096, GAINESTOWN, XEON_ , 0, "Gainestown 4M (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 26, 4, -1, 8192, XEON_GAINESTOWN , 0, "Gainestown 8M (Xeon)" },
|
{ 6, 10, -1, -1, 26, 4, -1, 8192, GAINESTOWN, XEON_ , 0, "Gainestown 8M (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 26, 4, -1, -1, XEON_I7 , 0, "Bloomfield (Xeon)" },
|
{ 6, 10, -1, -1, 26, 4, -1, -1, NC, XEON_|_7 , 0, "Bloomfield (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 26, 4, -1, -1, CORE_I7 , 0, "Bloomfield (Core i7)" },
|
{ 6, 10, -1, -1, 26, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Bloomfield (Core i7)" },
|
||||||
{ 6, 10, -1, -1, 30, 4, -1, -1, CORE_I7 , 0, "Lynnfield (Core i7)" },
|
{ 6, 10, -1, -1, 30, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Lynnfield (Core i7)" },
|
||||||
{ 6, 5, -1, -1, 37, 4, -1, 8192, CORE_I5 , 0, "Lynnfield (Core i5)" },
|
{ 6, 5, -1, -1, 37, 4, -1, 8192, NC, CORE_|_I_|_5 , 0, "Lynnfield (Core i5)" },
|
||||||
|
|
||||||
/* Westmere CPUs (32nm): */
|
/* Westmere CPUs (32nm): */
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, -1, NO_CODE , 0, "Unknown Core i3/i5" },
|
{ 6, 5, -1, -1, 37, 2, -1, -1, NC, 0 , 0, "Unknown Core i3/i5" },
|
||||||
{ 6, 12, -1, -1, 44, -1, -1, -1, XEON_WESTMERE , 0, "Westmere (Xeon)" },
|
{ 6, 12, -1, -1, 44, -1, -1, -1, WESTMERE, XEON_ , 0, "Westmere (Xeon)" },
|
||||||
{ 6, 12, -1, -1, 44, -1, -1, 12288, XEON_WESTMERE , 0, "Gulftown (Xeon)" },
|
{ 6, 12, -1, -1, 44, -1, -1, 12288, WESTMERE, XEON_ , 0, "Gulftown (Xeon)" },
|
||||||
{ 6, 12, -1, -1, 44, 4, -1, 12288, CORE_I7 , 0, "Gulftown (Core i7)" },
|
{ 6, 12, -1, -1, 44, 4, -1, 12288, NC, CORE_|_I_|_7 , 0, "Gulftown (Core i7)" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I5 , 0, "Clarkdale (Core i5)" },
|
{ 6, 5, -1, -1, 37, 2, -1, 4096, NC, CORE_|_I_|_5 , 0, "Clarkdale (Core i5)" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I3 , 0, "Clarkdale (Core i3)" },
|
{ 6, 5, -1, -1, 37, 2, -1, 4096, NC, CORE_|_I_|_3 , 0, "Clarkdale (Core i3)" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, -1, PENTIUM , 0, "Arrandale" },
|
{ 6, 5, -1, -1, 37, 2, -1, -1, NC, PENTIUM_ , 0, "Arrandale" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, 4096, CORE_I7 , 0, "Arrandale (Core i7)" },
|
{ 6, 5, -1, -1, 37, 2, -1, 4096, NC, CORE_|_I_|_7 , 0, "Arrandale (Core i7)" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, 3072, CORE_I5 , 0, "Arrandale (Core i5)" },
|
{ 6, 5, -1, -1, 37, 2, -1, 3072, NC, CORE_|_I_|_5 , 0, "Arrandale (Core i5)" },
|
||||||
{ 6, 5, -1, -1, 37, 2, -1, 3072, CORE_I3 , 0, "Arrandale (Core i3)" },
|
{ 6, 5, -1, -1, 37, 2, -1, 3072, NC, CORE_|_I_|_3 , 0, "Arrandale (Core i3)" },
|
||||||
|
|
||||||
/* Sandy Bridge CPUs (32nm): */
|
/* Sandy Bridge CPUs (32nm): */
|
||||||
{ 6, 10, -1, -1, 42, -1, -1, -1, NO_CODE , 0, "Unknown Sandy Bridge" },
|
{ 6, 10, -1, -1, 42, -1, -1, -1, NC, 0 , 0, "Unknown Sandy Bridge" },
|
||||||
{ 6, 10, -1, -1, 42, -1, -1, -1, XEON , 0, "Sandy Bridge (Xeon)" },
|
{ 6, 10, -1, -1, 42, -1, -1, -1, NC, XEON_ , 0, "Sandy Bridge (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 42, -1, -1, -1, CORE_I7 , 0, "Sandy Bridge (Core i7)" },
|
{ 6, 10, -1, -1, 42, -1, -1, -1, NC, CORE_|_I_|_7 , 0, "Sandy Bridge (Core i7)" },
|
||||||
{ 6, 10, -1, -1, 42, 4, -1, -1, CORE_I7 , 0, "Sandy Bridge (Core i7)" },
|
{ 6, 10, -1, -1, 42, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Sandy Bridge (Core i7)" },
|
||||||
{ 6, 10, -1, -1, 42, 4, -1, -1, CORE_I5 , 0, "Sandy Bridge (Core i5)" },
|
{ 6, 10, -1, -1, 42, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Sandy Bridge (Core i5)" },
|
||||||
{ 6, 10, -1, -1, 42, 2, -1, -1, CORE_I3 , 0, "Sandy Bridge (Core i3)" },
|
{ 6, 10, -1, -1, 42, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Sandy Bridge (Core i3)" },
|
||||||
{ 6, 10, -1, -1, 42, 2, -1, -1, PENTIUM , 0, "Sandy Bridge (Pentium)" },
|
{ 6, 10, -1, -1, 42, 2, -1, -1, NC, PENTIUM_ , 0, "Sandy Bridge (Pentium)" },
|
||||||
{ 6, 10, -1, -1, 42, 1, -1, -1, CELERON , 0, "Sandy Bridge (Celeron)" },
|
{ 6, 10, -1, -1, 42, 1, -1, -1, NC, CELERON_ , 0, "Sandy Bridge (Celeron)" },
|
||||||
{ 6, 10, -1, -1, 42, 2, -1, -1, CELERON , 0, "Sandy Bridge (Celeron)" },
|
{ 6, 10, -1, -1, 42, 2, -1, -1, NC, CELERON_ , 0, "Sandy Bridge (Celeron)" },
|
||||||
{ 6, 13, -1, -1, 45, -1, -1, -1, NO_CODE , 0, "Sandy Bridge-E" },
|
{ 6, 13, -1, -1, 45, -1, -1, -1, NC, CORE_|_I_|_3 , 0, "Sandy Bridge-E" },
|
||||||
{ 6, 13, -1, -1, 45, -1, -1, -1, XEON , 0, "Sandy Bridge-E (Xeon)" },
|
{ 6, 13, -1, -1, 45, -1, -1, -1, NC, XEON_ , 0, "Sandy Bridge-E (Xeon)" },
|
||||||
|
|
||||||
/* Ivy Bridge CPUs (22nm): */
|
/* Ivy Bridge CPUs (22nm): */
|
||||||
{ 6, 10, -1, -1, 58, -1, -1, -1, XEON , 0, "Ivy Bridge (Xeon)" },
|
{ 6, 10, -1, -1, 58, -1, -1, -1, NC, XEON_ , 0, "Ivy Bridge (Xeon)" },
|
||||||
{ 6, 10, -1, -1, 58, 4, -1, -1, CORE_IVY7 , 0, "Ivy Bridge (Core i7)" },
|
{ 6, 10, -1, -1, 58, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Ivy Bridge (Core i7)" },
|
||||||
{ 6, 10, -1, -1, 58, 4, -1, -1, CORE_IVY5 , 0, "Ivy Bridge (Core i5)" },
|
{ 6, 10, -1, -1, 58, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Ivy Bridge (Core i5)" },
|
||||||
{ 6, 10, -1, -1, 58, 2, -1, -1, CORE_IVY3 , 0, "Ivy Bridge (Core i3)" },
|
{ 6, 10, -1, -1, 58, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Ivy Bridge (Core i3)" },
|
||||||
{ 6, 10, -1, -1, 58, 2, -1, -1, PENTIUM , 0, "Ivy Bridge (Pentium)" },
|
{ 6, 10, -1, -1, 58, 2, -1, -1, NC, PENTIUM_ , 0, "Ivy Bridge (Pentium)" },
|
||||||
{ 6, 10, -1, -1, 58, 1, -1, -1, CELERON , 0, "Ivy Bridge (Celeron)" },
|
{ 6, 10, -1, -1, 58, 1, -1, -1, NC, CELERON_ , 0, "Ivy Bridge (Celeron)" },
|
||||||
{ 6, 10, -1, -1, 58, 2, -1, -1, CELERON , 0, "Ivy Bridge (Celeron)" },
|
{ 6, 10, -1, -1, 58, 2, -1, -1, NC, CELERON_ , 0, "Ivy Bridge (Celeron)" },
|
||||||
{ 6, 14, -1, -1, 62, -1, -1, -1, NO_CODE , 0, "Ivy Bridge-E" },
|
{ 6, 14, -1, -1, 62, -1, -1, -1, NC, 0 , 0, "Ivy Bridge-E" },
|
||||||
|
|
||||||
/* Haswell CPUs (22nm): */
|
/* Haswell CPUs (22nm): */
|
||||||
{ 6, 12, -1, -1, 60, -1, -1, -1, XEON , 0, "Haswell (Xeon)" },
|
{ 6, 12, -1, -1, 60, -1, -1, -1, NC, XEON_ , 0, "Haswell (Xeon)" },
|
||||||
{ 6, 12, -1, -1, 60, 4, -1, -1, CORE_HASWELL7 , 0, "Haswell (Core i7)" },
|
{ 6, 12, -1, -1, 60, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Haswell (Core i7)" },
|
||||||
{ 6, 5, -1, -1, 69, 4, -1, -1, CORE_HASWELL7 , 0, "Haswell (Core i7)" },
|
{ 6, 5, -1, -1, 69, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Haswell (Core i7)" },
|
||||||
{ 6, 12, -1, -1, 60, 4, -1, -1, CORE_HASWELL5 , 0, "Haswell (Core i5)" },
|
{ 6, 6, -1, -1, 70, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Haswell (Core i7)" },
|
||||||
{ 6, 5, -1, -1, 69, 4, -1, -1, CORE_HASWELL5 , 0, "Haswell (Core i5)" },
|
{ 6, 12, -1, -1, 60, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Haswell (Core i5)" },
|
||||||
{ 6, 12, -1, -1, 60, 2, -1, -1, CORE_HASWELL3 , 0, "Haswell (Core i3)" },
|
{ 6, 5, -1, -1, 69, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Haswell (Core i5)" },
|
||||||
{ 6, 5, -1, -1, 69, 2, -1, -1, CORE_HASWELL3 , 0, "Haswell (Core i3)" },
|
{ 6, 12, -1, -1, 60, 2, -1, -1, NC, CORE_|_I_|_5 , 0, "Haswell (Core i5)" },
|
||||||
{ 6, 12, -1, -1, 60, 2, -1, -1, PENTIUM , 0, "Haswell (Pentium)" },
|
{ 6, 5, -1, -1, 69, 2, -1, -1, NC, CORE_|_I_|_5 , 0, "Haswell (Core i5)" },
|
||||||
{ 6, 12, -1, -1, 60, 2, -1, -1, CELERON , 0, "Haswell (Celeron)" },
|
{ 6, 12, -1, -1, 60, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Haswell (Core i3)" },
|
||||||
{ 6, 12, -1, -1, 60, 1, -1, -1, CELERON , 0, "Haswell (Celeron)" },
|
{ 6, 5, -1, -1, 69, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Haswell (Core i3)" },
|
||||||
{ 6, 15, -1, -1, 63, -1, -1, -1, NO_CODE , 0, "Haswell-E" },
|
{ 6, 12, -1, -1, 60, 2, -1, -1, NC, PENTIUM_ , 0, "Haswell (Pentium)" },
|
||||||
|
{ 6, 12, -1, -1, 60, 2, -1, -1, NC, CELERON_ , 0, "Haswell (Celeron)" },
|
||||||
|
{ 6, 12, -1, -1, 60, 1, -1, -1, NC, CELERON_ , 0, "Haswell (Celeron)" },
|
||||||
|
{ 6, 15, -1, -1, 63, -1, -1, -1, NC, 0 , 0, "Haswell-E" },
|
||||||
|
|
||||||
/* Broadwell CPUs (14nm): */
|
/* Broadwell CPUs (14nm): */
|
||||||
{ 6, 7, -1, -1, 71, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell (Core i7)" },
|
{ 6, 7, -1, -1, 71, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Broadwell (Core i7)" },
|
||||||
{ 6, 7, -1, -1, 71, 4, -1, -1, CORE_BROADWELL5 , 0, "Broadwell (Core i5)" },
|
{ 6, 7, -1, -1, 71, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Broadwell (Core i5)" },
|
||||||
{ 6, 13, -1, -1, 61, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-U (Core i7)" },
|
{ 6, 13, -1, -1, 61, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Broadwell-U (Core i7)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-U (Core i7)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NC, CORE_|_I_|_7 , 0, "Broadwell-U (Core i7)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-U (Core i5)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NC, CORE_|_I_|_5 , 0, "Broadwell-U (Core i5)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, CORE_BROADWELL3 , 0, "Broadwell-U (Core i3)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Broadwell-U (Core i3)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, PENTIUM , 0, "Broadwell-U (Pentium)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NC, PENTIUM_ , 0, "Broadwell-U (Pentium)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, CELERON , 0, "Broadwell-U (Celeron)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NC, CELERON_ , 0, "Broadwell-U (Celeron)" },
|
||||||
{ 6, 13, -1, -1, 61, 2, -1, -1, NA , 0, "Broadwell-U (Core M)" },
|
{ 6, 13, -1, -1, 61, 2, -1, -1, NA, 0 , 0, "Broadwell-U (Core M)" },
|
||||||
{ 6, 15, -1, -1, 79, -1, -1, -1, XEON , 0, "Broadwell-E (Xeon)" },
|
{ 6, 15, -1, -1, 79, -1, -1, -1, NC, XEON_ , 0, "Broadwell-E (Xeon)" },
|
||||||
{ 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL3 , 0, "Broadwell-E (Core i3)" },
|
{ 6, 15, -1, -1, 79, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Broadwell-E (Core i3)" },
|
||||||
{ 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-E (Core i5)" },
|
{ 6, 15, -1, -1, 79, 2, -1, -1, NC, CORE_|_I_|_5 , 0, "Broadwell-E (Core i5)" },
|
||||||
{ 6, 15, -1, -1, 79, 4, -1, -1, CORE_BROADWELL5 , 0, "Broadwell-E (Core i5)" },
|
{ 6, 15, -1, -1, 79, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Broadwell-E (Core i5)" },
|
||||||
{ 6, 15, -1, -1, 79, 2, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-E (Core i7)" },
|
{ 6, 15, -1, -1, 79, 2, -1, -1, NC, CORE_|_I_|_7 , 0, "Broadwell-E (Core i7)" },
|
||||||
{ 6, 15, -1, -1, 79, 4, -1, -1, CORE_BROADWELL7 , 0, "Broadwell-E (Core i7)" },
|
{ 6, 15, -1, -1, 79, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Broadwell-E (Core i7)" },
|
||||||
|
|
||||||
/* Skylake CPUs (14nm): */
|
/* Skylake CPUs (14nm): */
|
||||||
{ 6, 14, -1, -1, 94, -1, -1, -1, XEON , 0, "Skylake (Xeon)" },
|
{ 6, 14, -1, -1, 94, -1, -1, -1, NC, XEON_ , 0, "Skylake (Xeon)" },
|
||||||
{ 6, 14, -1, -1, 94, 4, -1, -1, CORE_BROADWELL7 , 0, "Skylake (Core i7)" },
|
{ 6, 14, -1, -1, 94, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Skylake (Core i7)" },
|
||||||
{ 6, 14, -1, -1, 94, 4, -1, -1, CORE_BROADWELL5 , 0, "Skylake (Core i5)" },
|
{ 6, 14, -1, -1, 94, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Skylake (Core i5)" },
|
||||||
{ 6, 14, -1, -1, 94, 2, -1, -1, CORE_BROADWELL3 , 0, "Skylake (Core i3)" },
|
{ 6, 14, -1, -1, 94, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Skylake (Core i3)" },
|
||||||
{ 6, 14, -1, -1, 94, 2, -1, -1, PENTIUM , 0, "Skylake (Pentium)" },
|
{ 6, 14, -1, -1, 94, 2, -1, -1, NC, PENTIUM_ , 0, "Skylake (Pentium)" },
|
||||||
{ 6, 14, -1, -1, 78, 2, -1, -1, PENTIUM , 0, "Skylake (Pentium)" },
|
{ 6, 14, -1, -1, 78, 2, -1, -1, NC, PENTIUM_ , 0, "Skylake (Pentium)" },
|
||||||
{ 6, 14, -1, -1, 94, 2, -1, -1, CELERON , 0, "Skylake (Celeron)" },
|
{ 6, 14, -1, -1, 94, 2, -1, -1, NC, CELERON_ , 0, "Skylake (Celeron)" },
|
||||||
{ 6, 14, -1, -1, 78, 2, -1, -1, CELERON , 0, "Skylake (Celeron)" },
|
{ 6, 14, -1, -1, 78, 2, -1, -1, NC, CELERON_ , 0, "Skylake (Celeron)" },
|
||||||
{ 6, 14, -1, -1, 78, 2, -1, -1, CORE_SKYLAKEM7 , 0, "Skylake (Core m7)" },
|
{ 6, 14, -1, -1, 78, 2, -1, -1, NC, CORE_|_M_|_7 , 0, "Skylake (Core m7)" },
|
||||||
{ 6, 14, -1, -1, 78, 2, -1, -1, CORE_SKYLAKEM5 , 0, "Skylake (Core m5)" },
|
{ 6, 14, -1, -1, 78, 2, -1, -1, NC, CORE_|_M_|_5 , 0, "Skylake (Core m5)" },
|
||||||
{ 6, 14, -1, -1, 78, 2, -1, -1, CORE_SKYLAKEM3 , 0, "Skylake (Core m3)" },
|
{ 6, 14, -1, -1, 78, 2, -1, -1, NC, CORE_|_M_|_3 , 0, "Skylake (Core m3)" },
|
||||||
|
|
||||||
/* Kaby Lake CPUs (14nm): */
|
/* Kaby Lake CPUs (14nm): */
|
||||||
{ 6, 14, -1, -1, 158, 4, -1, -1, CORE_BROADWELL7 , 0, "Kaby Lake (Core i7)" },
|
{ 6, 14, -1, -1, 158, 4, -1, -1, NC, CORE_|_I_|_7 , 0, "Kaby Lake (Core i7)" },
|
||||||
{ 6, 14, -1, -1, 158, 4, -1, -1, CORE_BROADWELL5 , 0, "Kaby Lake (Core i5)" },
|
{ 6, 14, -1, -1, 158, 4, -1, -1, NC, CORE_|_I_|_5 , 0, "Kaby Lake (Core i5)" },
|
||||||
{ 6, 14, -1, -1, 158, 2, -1, -1, CORE_BROADWELL3 , 0, "Kaby Lake (Core i3)" },
|
{ 6, 14, -1, -1, 158, 2, -1, -1, NC, CORE_|_I_|_3 , 0, "Kaby Lake (Core i3)" },
|
||||||
{ 6, 14, -1, -1, 158, 2, -1, -1, PENTIUM , 0, "Kaby Lake (Pentium)" },
|
{ 6, 14, -1, -1, 158, 2, -1, -1, NC, PENTIUM_ , 0, "Kaby Lake (Pentium)" },
|
||||||
{ 6, 14, -1, -1, 158, 2, -1, -1, CELERON , 0, "Kaby Lake (Celeron)" },
|
{ 6, 14, -1, -1, 158, 2, -1, -1, NC, CELERON_ , 0, "Kaby Lake (Celeron)" },
|
||||||
{ 6, 14, -1, -1, 158, 2, -1, -1, CORE_SKYLAKEM3 , 0, "Kaby Lake (Core m3)" },
|
{ 6, 14, -1, -1, 158, 2, -1, -1, NC, CORE_|_M_|_3 , 0, "Kaby Lake (Core m3)" },
|
||||||
|
|
||||||
/* Itaniums */
|
/* Itaniums */
|
||||||
{ 7, -1, -1, -1, -1, 1, -1, -1, NO_CODE , 0, "Itanium" },
|
{ 7, -1, -1, -1, -1, 1, -1, -1, NC, 0 , 0, "Itanium" },
|
||||||
{ 15, -1, -1, 16, -1, 1, -1, -1, NO_CODE , 0, "Itanium 2" },
|
{ 15, -1, -1, 16, -1, 1, -1, -1, NC, 0 , 0, "Itanium 2" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -620,103 +645,79 @@ static void decode_intel_number_of_cores(struct cpu_raw_data_t* raw,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static intel_code_t get_brand_code(struct cpu_id_t* data)
|
static intel_code_and_bits_t get_brand_code_and_bits(struct cpu_id_t* data)
|
||||||
{
|
{
|
||||||
intel_code_t code = (intel_code_t) NO_CODE;
|
intel_code_t code = (intel_code_t) NC;
|
||||||
int i, need_matchtable = 1, core_ix_base = 0;
|
uint64_t bits = 0;
|
||||||
|
int i = 0;
|
||||||
const char* bs = data->brand_str;
|
const char* bs = data->brand_str;
|
||||||
const char* s;
|
const char* s;
|
||||||
const struct { intel_code_t c; const char *search; } matchtable[] = {
|
const struct { intel_code_t c; const char *search; } matchtable[] = {
|
||||||
{ XEONMP, "Xeon MP" },
|
{ PENTIUM_M, "Pentium(R) M" },
|
||||||
{ XEONMP, "Xeon(TM) MP" },
|
|
||||||
{ XEON, "Xeon" },
|
|
||||||
{ CELERON, "Celeron" },
|
|
||||||
{ MOBILE_PENTIUM_M, "Pentium(R) M" },
|
|
||||||
{ CORE_SOLO, "Pentium(R) Dual CPU" },
|
{ CORE_SOLO, "Pentium(R) Dual CPU" },
|
||||||
{ CORE_SOLO, "Pentium(R) Dual-Core" },
|
{ CORE_SOLO, "Pentium(R) Dual-Core" },
|
||||||
{ PENTIUM_D, "Pentium(R) D" },
|
{ PENTIUM_D, "Pentium(R) D" },
|
||||||
{ PENTIUM, "Pentium" },
|
|
||||||
{ CORE_SOLO, "Genuine Intel(R) CPU" },
|
{ CORE_SOLO, "Genuine Intel(R) CPU" },
|
||||||
{ CORE_SOLO, "Intel(R) Core(TM)" },
|
{ CORE_SOLO, "Intel(R) Core(TM)" },
|
||||||
{ ATOM_DIAMONDVILLE, "Atom(TM) CPU [N ][23]## " },
|
{ DIAMONDVILLE, "CPU [N ][23]## " },
|
||||||
{ ATOM_SILVERTHORNE, "Atom(TM) CPU Z" },
|
{ SILVERTHORNE, "CPU Z" },
|
||||||
{ ATOM_PINEVIEW, "Atom(TM) CPU [ND][45]## " },
|
{ PINEVIEW, "CPU [ND][45]## " },
|
||||||
{ ATOM_CEDARVIEW, "Atom(TM) CPU [ND]#### " },
|
{ CEDARVIEW, "CPU [ND]#### " },
|
||||||
{ ATOM_UNKNOWN, "Atom(TM) CPU" },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (strstr(bs, "Mobile")) {
|
const struct { uint64_t bit; const char* search; } bit_matchtable[] = {
|
||||||
need_matchtable = 0;
|
{ XEON_, "Xeon" },
|
||||||
if (strstr(bs, "Celeron"))
|
{ _MP, " MP" },
|
||||||
code = MOBILE_CELERON;
|
{ ATOM_, "Atom(TM) CPU" },
|
||||||
else if (strstr(bs, "Pentium"))
|
{ MOBILE_, "Mobile" },
|
||||||
code = MOBILE_PENTIUM;
|
{ CELERON_, "Celeron" },
|
||||||
|
{ PENTIUM_, "Pentium" },
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i = 0; i < COUNT_OF(bit_matchtable); i++) {
|
||||||
|
if (match_pattern(bs, bit_matchtable[i].search))
|
||||||
|
bits |= bit_matchtable[i].bit;
|
||||||
}
|
}
|
||||||
if ((i = match_pattern(bs, "Core(TM) i[357]")) != 0) {
|
|
||||||
/* Core i3, Core i5 or Core i7 */
|
|
||||||
need_matchtable = 0;
|
|
||||||
|
|
||||||
core_ix_base = CORE_I3;
|
|
||||||
|
|
||||||
/* if it has RdRand, then it is at least Ivy Bridge */
|
|
||||||
/* the second check is to catch a weird case, where an "Core(TM) i3-3220T" apparently
|
|
||||||
* didn't have RdRand, see issue #81 */
|
|
||||||
if (data->flags[CPU_FEATURE_RDRAND] || (data->ext_family == 6 && data->ext_model == 58))
|
|
||||||
core_ix_base = CORE_IVY3;
|
|
||||||
/* if it has FMA, then it is at least Haswell */
|
|
||||||
if (data->flags[CPU_FEATURE_FMA3])
|
|
||||||
core_ix_base = CORE_HASWELL3;
|
|
||||||
/* if it has RTM, then it is at least a Broadwell-E or Skylake */
|
|
||||||
if (data->flags[CPU_FEATURE_RDSEED])
|
|
||||||
core_ix_base = CORE_BROADWELL3;
|
|
||||||
|
|
||||||
|
if ((i = match_pattern(bs, "Core(TM) [im][357]")) != 0) {
|
||||||
|
bits |= CORE_;
|
||||||
|
i--;
|
||||||
switch (bs[i + 9]) {
|
switch (bs[i + 9]) {
|
||||||
case '3': code = core_ix_base + 0; break;
|
case 'i': bits |= _I_; break;
|
||||||
case '5': code = core_ix_base + 1; break;
|
case 'm': bits |= _M_; break;
|
||||||
case '7': code = core_ix_base + 2; break;
|
}
|
||||||
|
switch (bs[i + 10]) {
|
||||||
|
case '3': bits |= _3; break;
|
||||||
|
case '5': bits |= _5; break;
|
||||||
|
case '7': bits |= _7; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((i = match_pattern(bs, "Core(TM) m[357]")) != 0) {
|
|
||||||
/* Core m3, Core m5 or Core m7 */
|
|
||||||
need_matchtable = 0;
|
|
||||||
|
|
||||||
/* introduced in Skylake: Core m3 6Y30, Core m5 6Y54, Core m5 6Y57 and Core m7 6Y75 */
|
|
||||||
core_ix_base = CORE_SKYLAKEM3;
|
|
||||||
|
|
||||||
switch (bs[i + 9]) {
|
|
||||||
case '3': code = core_ix_base + 0; break;
|
|
||||||
case '5': code = core_ix_base + 1; break;
|
|
||||||
case '7': code = core_ix_base + 2; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (need_matchtable) {
|
|
||||||
for (i = 0; i < COUNT_OF(matchtable); i++)
|
for (i = 0; i < COUNT_OF(matchtable); i++)
|
||||||
if (match_pattern(bs, matchtable[i].search)) {
|
if (match_pattern(bs, matchtable[i].search)) {
|
||||||
code = matchtable[i].c;
|
code = matchtable[i].c;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
debugf(2, "intel matchtable result is %d\n", code);
|
debugf(2, "intel matchtable result is %d\n", code);
|
||||||
}
|
if (bits & XEON_) {
|
||||||
if (code == XEON) {
|
|
||||||
if (match_pattern(bs, "W35##") || match_pattern(bs, "[ELXW]75##"))
|
if (match_pattern(bs, "W35##") || match_pattern(bs, "[ELXW]75##"))
|
||||||
code = XEON_I7;
|
bits |= _7;
|
||||||
else if (match_pattern(bs, "[ELXW]55##"))
|
else if (match_pattern(bs, "[ELXW]55##"))
|
||||||
code = XEON_GAINESTOWN;
|
code = GAINESTOWN;
|
||||||
else if (match_pattern(bs, "[ELXW]56##"))
|
else if (match_pattern(bs, "[ELXW]56##"))
|
||||||
code = XEON_WESTMERE;
|
code = WESTMERE;
|
||||||
else if (data->l3_cache > 0 && data->family == 16)
|
else if (data->l3_cache > 0 && data->family == 16)
|
||||||
/* restrict by family, since later Xeons also have L3 ... */
|
/* restrict by family, since later Xeons also have L3 ... */
|
||||||
code = XEON_IRWIN;
|
code = IRWIN;
|
||||||
}
|
}
|
||||||
if (code == XEONMP && data->l3_cache > 0)
|
if (match_all(bits, XEON_ + _MP) && data->l3_cache > 0)
|
||||||
code = XEON_POTOMAC;
|
code = POTOMAC;
|
||||||
if (code == CORE_SOLO) {
|
if (code == CORE_SOLO) {
|
||||||
s = strstr(bs, "CPU");
|
s = strstr(bs, "CPU");
|
||||||
if (s) {
|
if (s) {
|
||||||
s += 3;
|
s += 3;
|
||||||
while (*s == ' ') s++;
|
while (*s == ' ') s++;
|
||||||
if (*s == 'T')
|
if (*s == 'T')
|
||||||
code = (data->num_cores == 1) ? MOBILE_CORE_SOLO : MOBILE_CORE_DUO;
|
bits |= MOBILE_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (code == CORE_SOLO) {
|
if (code == CORE_SOLO) {
|
||||||
|
@ -741,20 +742,19 @@ static intel_code_t get_brand_code(struct cpu_id_t* data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (code == CORE_DUO && data->ext_model >= 23) {
|
if (code == CORE_DUO && (bits & MOBILE_) && data->model != 14) {
|
||||||
code = WOLFDALE;
|
|
||||||
}
|
|
||||||
if (code == PENTIUM_D && data->ext_model >= 23) {
|
|
||||||
code = WOLFDALE;
|
|
||||||
}
|
|
||||||
if (code == MOBILE_CORE_DUO && data->model != 14) {
|
|
||||||
if (data->ext_model < 23) {
|
if (data->ext_model < 23) {
|
||||||
code = MEROM;
|
code = MEROM;
|
||||||
} else {
|
} else {
|
||||||
code = PENRYN;
|
code = PENRYN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return code;
|
if (data->ext_model == 23 &&
|
||||||
|
(code == CORE_DUO || code == PENTIUM_D || (bits & CELERON_))) {
|
||||||
|
code = WOLFDALE;
|
||||||
|
}
|
||||||
|
intel_code_and_bits_t result = { code, bits };
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static intel_model_t get_model_code(struct cpu_id_t* data)
|
static intel_model_t get_model_code(struct cpu_id_t* data)
|
||||||
|
@ -880,7 +880,7 @@ struct cpu_epc_t cpuid_get_epc(int index, const struct cpu_raw_data_t* raw)
|
||||||
|
|
||||||
int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, struct internal_id_info_t* internal)
|
||||||
{
|
{
|
||||||
intel_code_t brand_code;
|
intel_code_and_bits_t brand;
|
||||||
intel_model_t model_code;
|
intel_model_t model_code;
|
||||||
int i;
|
int i;
|
||||||
char* brand_code_str = NULL;
|
char* brand_code_str = NULL;
|
||||||
|
@ -894,21 +894,26 @@ int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, stru
|
||||||
}
|
}
|
||||||
decode_intel_number_of_cores(raw, data);
|
decode_intel_number_of_cores(raw, data);
|
||||||
|
|
||||||
brand_code = get_brand_code(data);
|
brand = get_brand_code_and_bits(data);
|
||||||
model_code = get_model_code(data);
|
model_code = get_model_code(data);
|
||||||
for (i = 0; i < COUNT_OF(intel_bcode_str); i++) {
|
for (i = 0; i < COUNT_OF(intel_bcode_str); i++) {
|
||||||
if (brand_code == intel_bcode_str[i].code) {
|
if (brand.code == intel_bcode_str[i].code) {
|
||||||
brand_code_str = intel_bcode_str[i].str;
|
brand_code_str = intel_bcode_str[i].str;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (brand_code_str)
|
if (brand_code_str)
|
||||||
debugf(2, "Detected Intel brand code: %d (%s)\n", brand_code, brand_code_str);
|
debugf(2, "Detected Intel brand code: %d (%s)\n", brand.code, brand_code_str);
|
||||||
else
|
else
|
||||||
debugf(2, "Detected Intel brand code: %d\n", brand_code);
|
debugf(2, "Detected Intel brand code: %d\n", brand.code);
|
||||||
|
if (brand.bits) {
|
||||||
|
debugf(2, "Detected Intel bits: ");
|
||||||
|
debug_print_lbits(brand.bits, 2);
|
||||||
|
}
|
||||||
debugf(2, "Detected Intel model code: %d\n", model_code);
|
debugf(2, "Detected Intel model code: %d\n", model_code);
|
||||||
|
|
||||||
internal->code.intel = brand_code;
|
internal->code.intel = brand.code;
|
||||||
|
internal->bits = brand.bits;
|
||||||
|
|
||||||
if (data->flags[CPU_FEATURE_SGX]) {
|
if (data->flags[CPU_FEATURE_SGX]) {
|
||||||
debugf(2, "SGX seems to be present, decoding...\n");
|
debugf(2, "SGX seems to be present, decoding...\n");
|
||||||
|
@ -917,7 +922,7 @@ int cpuid_identify_intel(struct cpu_raw_data_t* raw, struct cpu_id_t* data, stru
|
||||||
}
|
}
|
||||||
|
|
||||||
internal->score = match_cpu_codename(cpudb_intel, COUNT_OF(cpudb_intel), data,
|
internal->score = match_cpu_codename(cpudb_intel, COUNT_OF(cpudb_intel), data,
|
||||||
brand_code, model_code);
|
brand.code, brand.bits, model_code);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue