Recreating CPUID in Relevance
I’ve spot-checked against at least 20 of my processor models, both Intel and AMD, and so far it looks correct that Model requires a left-shift and Family is just addition.
I’ll split the following into separate properties later, but for now I’m going back to my original task - identify Architecture and Processor Codenames, so when the news says “there’s a firmware for Skylake” I’ll know which systems that covers.
I hope this is helpful for others, AND I hope that others can help me. There are a lot of gaps in the following Family and Model lists. If anyone can add to the list, or tell me which ones I have wrong, I’d appreciate it (all the models in my environment are correct, but I don’t possess every model in this list). I’ll post this on Bigfix.me when I have it a bit more complete.
/* https://software.intel.com/en-us/articles/intel-architecture-and -processor-identification-with-cpuid-model-and-family-numbers */ /* http://www.cpu-world.com*/
(
item 3 of it, item 4 of it
)
of
(
"Example", "Family(hex)", "Model(hex)", "Microarchitecture Codename", "Processor Codename";
"GenuineIntel", "05", "09", "quark", "Clanton" ;
"GenuineIntel", "06", "06", "Pentium II", "Dixon/Mendocino" ;
"GenuineIntel", "06", "07", "Pentium III", "Katmai" ;
"GenuineIntel", "06", "08", "Pentium III", "Coppermine" ;
"GenuineIntel", "06", "09", "Pentium M uarch=modified p6", "Banias" ;
"GenuineIntel", "06", "0B", "Pentium III", "Tualatin" ;
"GenuineIntel", "06", "0D", "Pentium M uarch p6", "Dothan" ;
"GenuineIntel", "06", "0E", "xeon yonah", "Sossaman/Yona" ;
"GenuineIntel", "06", "0F", "Merom", "Clovertown/Conroe/Kentsfield/Merom/Tigerton/Woodcrest" ;
"GenuineIntel", "06", "16", "Merom", "Merom Conroe" ;
"GenuineIntel", "06", "17", "Penryn", "Yorkfield/Wolfdale/Penryn/Harpertown (DP)" ;
"GenuineIntel", "06", "1A", "Nahalem", "Bloomfield/Nehalem EP" ;
"GenuineIntel", "06", "1C", "Atom", "Pineview/Silverthorne" ;
"GenuineIntel", "06", "1D", "Penryn", "Dunnington (MP)" ;
"GenuineIntel", "06", "1E", "Nahalem","Clarksfield/Lynnfield/Jasper Forest" ;
"GenuineIntel", "06", "25", "Westmere", "Arrandale/Clarksdale" ;
"GenuineIntel", "06", "26", "Atom", "Lincroft" ;
"GenuineIntel", "06", "27", "Atom Saltwell Core", "Penwell" ;
"GenuineIntel", "06", "2A", "SandyBridge", "SandyBridge";
"GenuineIntel", "06", "2C", "Westmere", "Gulftown/Westmere EP" ;
"GenuineIntel", "06", "2D", "SandyBridge", "Sandy Bridge E/EN/EP" ;
"GenuineIntel", "06", "2E", "Nahalem", "Nehalem EX" ;
"GenuineIntel", "06", "2F", "Westmere", "Westmere EX" ;
"GenuineIntel", "06", "3A", "IvyBridge", "IvyBridge" ;
"GenuineIntel", "06", "35", "Cloverview", "Cloverview" ;
"GenuineIntel", "06", "36", "Atom", "Cedarview" ;
"GenuineIntel", "06", "37", "Atom SoC Silvermont", "Bay Trail" ;
"GenuineIntel", "06", "3A", "Ivy Bridge", "Ivy Bridge" ;
"GenuineIntel", "06", "3C", "Haswell", "Haswell LGA1150" ;
"GenuineIntel", "06", "3D", "Broadwell", "Broadwell" ;
"GenuineIntel", "06", "3E", "Ivy Bridge", "Ivy Bridge E/EN/EP" ;
"GenuineIntel", "06", "3F", "Haswell E", "Haswell E" ;
"GenuineIntel", "06", "46", "Haswell", "Crystal Well" ;
"GenuineIntel", "06", "4A", "Silvermont", "Merrifield" ;
"GenuineIntel", "06", "4D", "Silvermont", "Avoton/Rangeley" ;
"GenuineIntel", "06", "4f", "Broadwell", "Broadwell E" ;
"GenuineIntel", "06", "5A", "Silvermont", "Moorefield" ;
"GenuineIntel", "06", "5e", "Skylake", "Skylake" ;
"GenuineIntel", "0B", "01", "Xeon Phi", "Knights Corner" ;
"GenuineIntel", "0F", "01", "Pentium 4", "Willamette/Foster" ;
"GenuineIntel", "0F", "02", "Pentium 4", "Gallatin/Northwood/Prestonia" ;
"GenuineIntel", "0F", "03", "Prescott", "Prescott/Nocona/Irwindale" ;
"GenuineIntel", "0F", "04", "Prescott", "Prescott/Nocona/Irwindale" ;
"GenuineIntel", "0F", "06", "Presler", "Cedar Mill/Presler" ;
"GenuineIntel", "0F", "07", "Pentium 4", "Irwindale" ;
"GenuineIntel", "1F", "03", "Itanium-2", "Madison" ;
"GenuineIntel", "20", "00", "Itanium", "Montecito" ;
"GenuineIntel", "20", "01", "Itanium", "Montvale" ;
"GenuineIntel", "20", "02", "Itanium", "Tukwila" ;
"GenuineIntel", "21", "00", "Itanium", "Poulson";
"AuthenticAMD", "06", "0d", "QEMU", "QEMU Virtual Processor";
"AuthenticAMD", "10", "02", "K10", "Opteron Third Generation";
"AuthenticAMD", "10", "09", "K10", "Opteron 6100 series";
"AuthenticAMD", "15", "01", "Bulldozer", "Opteron 6200 series";
"AuthenticAMD", "15", "02", "Piledriver", "Opteron 6300 series";
"AuthenticAMD", "0f", "02", "K10", "Opteron Third Generation";
"AuthenticAMD", "0f", "09", "K10", "Opteron 6100 series";
"PowerPC_POWER6", "", "", "PowerPC", "POWER6";
"PowerPC_POWER7", "", "", "PowerPC", "POWER7"
)
whose
(
(
(
if
exists property "vendor name" of type "processor"
then
unique value of vendor names of processors
else
unique value of families of processors as string
)
= item 0 of it
)
AND
(
item 1 of it = ""
OR
(
if
not exists property "family" of type "processor"
then
false
else
(
(
(
(
(
if
(
exists families
whose
(
it = 15
)
of processors
)
then
(
(
it as integer
)
of
(
unique value of families of processors + unique value of extended families of processors
)
)
else
(
unique value of families of processors
)
)
)
|
(
unique value of families of processors
)
)
= hexadecimal integer
(
item 1 of it
)
)
)
)
)
AND
(
item 2 of it = ""
OR
(
if
not exists property "model" of type "processor"
then
false
else
(
(
(
if
(
exists families
whose
(
it = 6
OR
it = 15
)
of processors
)
then
(
it as integer
)
of
(
(
left shift 4 of
(
it as bit set
)
of unique value of extended models of processors
)
+
(
(
it as bit set
)
of unique value of models of processors
)
)
else
(
unique value of models of processors
)
)
)
|
(
unique value of models of processors
)
)
= hexadecimal integer
(
item 2 of it
)
)
)
)
Edit: Looks like PowerPC doesn’t have a ‘Family’ or ‘Model’ property, will do some more edge-case checks tomorrow.
Edit 2: Updated the query to handle PowerPC, matching the list against “families of processors as string” if the “vendor name of processor” property does not exist.