use crate::{CpuVendor, ProcInfo, CpuCodename, CpuMicroArch, CpuStepping, ProcessNode};
#[cfg(feature = "std")]
use std::fmt;
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::boxed::Box;
impl ProcInfo {
pub(super) fn intel_fam05h(m: u32, s: u32) -> Self {
match m {
0x09 => Self {
codename: CpuCodename::Intel(IntelCodename::Quark_X1000),
archname: CpuMicroArch::Intel(IntelMicroArch::P5C),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(32)),
},
_ => Self {
codename: CpuCodename::Unknown(CpuVendor::GenuineIntel, 0x5, m),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: None,
},
}
}
pub(super) fn intel_fam06h(m: u32, s: u32) -> Self {
match m {
0xE => Self {
codename: CpuCodename::Intel(IntelCodename::Yonah),
archname: CpuMicroArch::Intel(IntelMicroArch::PentiumM),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(90)),
},
0xF | 0x16 => {
let codename = match m {
0xF => IntelCodename::Merom,
0x16 => IntelCodename::Merom_L,
_ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Merom),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(65)),
}
},
0x17 | 0x1D => {
let codename = match m {
0x17 => IntelCodename::Penryn,
0x1D => IntelCodename::Dunnington,
_ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Penryn),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(45)),
}
},
0x1E | 0x1F | 0x1A | 0x2E => {
let codename = match m {
0x1E => IntelCodename::Nehalem,
0x1F => IntelCodename::Nehalem_G,
0x1A => IntelCodename::Nehalem_EP,
0x2E => IntelCodename::Nehalem_EX,
_ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Nehalem),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(45)),
}
},
0x25 | 0x2C | 0x2F => {
let codename = match m {
0x25 => IntelCodename::Westmere,
0x2C => IntelCodename::Westmere_EP,
0x2F => IntelCodename::Westmere_EX,
_ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Westmere),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(32)),
}
},
0x2A => Self {
codename: CpuCodename::Intel(IntelCodename::SandyBridge),
archname: CpuMicroArch::Intel(IntelMicroArch::SandyBridge),
step_info: match s {
0x2 => CpuStepping::B2,
0x3 => CpuStepping::C0,
0x5 => CpuStepping::D0_J0,
0x6 => CpuStepping::D1,
0x7 => CpuStepping::D2_J1_Q0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(32)),
},
0x2D => Self {
codename: CpuCodename::Intel(IntelCodename::SandyBridge_X),
archname: CpuMicroArch::Intel(IntelMicroArch::SandyBridge),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(32)),
},
0x3A => Self {
codename: CpuCodename::Intel(IntelCodename::IvyBridge),
archname: CpuMicroArch::Intel(IntelMicroArch::IvyBridge),
step_info: match s {
0x0 => CpuStepping::A0,
0x2 => CpuStepping::B0,
0x4 => CpuStepping::C0,
0x5 => CpuStepping::K0,
0x6 => CpuStepping::D0,
0x8 => CpuStepping::E0,
0x9 => CpuStepping::E1,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(22)),
},
0x3E => Self {
codename: CpuCodename::Intel(IntelCodename::IvyBridge_X),
archname: CpuMicroArch::Intel(IntelMicroArch::IvyBridge),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(22)),
},
0x3C => Self {
codename: CpuCodename::Intel(IntelCodename::Haswell_X),
archname: CpuMicroArch::Intel(IntelMicroArch::Haswell),
step_info: match s {
0x1 => CpuStepping::A0,
0x2 => CpuStepping::B0,
0x3 => CpuStepping::C0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(22)),
},
0x3F => Self {
codename: CpuCodename::Intel(IntelCodename::Haswell_X),
archname: CpuMicroArch::Intel(IntelMicroArch::Haswell),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(22)),
},
0x45 => Self {
codename: CpuCodename::Intel(IntelCodename::Haswell_L),
archname: CpuMicroArch::Intel(IntelMicroArch::Haswell),
step_info: match s {
0x0 => CpuStepping::B0,
0x1 => CpuStepping::C0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(22)),
},
0x46 => Self {
codename: CpuCodename::Intel(IntelCodename::Haswell_G),
archname: CpuMicroArch::Intel(IntelMicroArch::Haswell),
step_info: match s {
0x0 => CpuStepping::B0,
0x1 => CpuStepping::C0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(22)),
},
0x3D => Self {
codename: CpuCodename::Intel(IntelCodename::Broadwell),
archname: CpuMicroArch::Intel(IntelMicroArch::Broadwell),
step_info: match s {
0x2 => CpuStepping::C0,
0x3 => CpuStepping::D0,
0x4 => CpuStepping::E0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x47 => Self {
codename: CpuCodename::Intel(IntelCodename::Broadwell_G),
archname: CpuMicroArch::Intel(IntelMicroArch::Broadwell),
step_info: match s {
0x1 => CpuStepping::C0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x4F => Self {
codename: CpuCodename::Intel(IntelCodename::Broadwell_X),
archname: CpuMicroArch::Intel(IntelMicroArch::Broadwell),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(14)),
},
0x56 => Self {
codename: CpuCodename::Intel(IntelCodename::Broadwell_D),
archname: CpuMicroArch::Intel(IntelMicroArch::Broadwell),
step_info: match s {
0x3 => CpuStepping::V2_V3,
0x4 => CpuStepping::Y0,
0x5 => CpuStepping::A1, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x4E => Self {
codename: CpuCodename::Intel(IntelCodename::SkyLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info: match s {
0x2 => CpuStepping::C0,
0x3 => CpuStepping::D0, 0x8 => CpuStepping::G0, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x5E => Self {
codename: CpuCodename::Intel(IntelCodename::SkyLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info: match s {
0x1 => CpuStepping::HQ0,
0x3 => CpuStepping::HR0, 0x8 => CpuStepping::HA0, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x55 => {
let (codename, archname, step_info) = match s {
0x6 => (
IntelCodename::CascadeLake_X,
IntelMicroArch::Skylake_AVX512_VNNI,
CpuStepping::B0
),
0x7 => (
IntelCodename::CascadeLake_X,
IntelMicroArch::Skylake_AVX512_VNNI,
CpuStepping::B1
),
0xA => (
IntelCodename::CooperLake_X,
IntelMicroArch::Skylake_AVX512_VNNI_BF16,
CpuStepping::A0
),
0xB => (
IntelCodename::CooperLake_X,
IntelMicroArch::Skylake_AVX512_VNNI_BF16,
CpuStepping::A1
),
_ => (
IntelCodename::SkyLake_X,
IntelMicroArch::Skylake_AVX512,
CpuStepping::Unknown(s)
),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(archname),
step_info,
node: Some(ProcessNode::NM(14)),
}
},
0x8E => {
let (codename, step_info) = match s {
0x9 => (IntelCodename::KabyLake_L, CpuStepping::H0), 0xA => (IntelCodename::KabyLake_L, CpuStepping::Y0),
0xB => (IntelCodename::WhiskeyLake_L, CpuStepping::W0),
0xC => (IntelCodename::WhiskeyLake_L, CpuStepping::V0),
_ => (IntelCodename::KabyLake_L, CpuStepping::Unknown(s)),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info,
node: Some(ProcessNode::NM(14)),
}
},
0x9E => {
let (codename, step_info) = match s {
0x9 => (IntelCodename::KabyLake_S, CpuStepping::HB0),
0xA => (IntelCodename::CoffeeLake_S, CpuStepping::U0),
0xB => (IntelCodename::CoffeeLake_S, CpuStepping::B0),
0xC => (IntelCodename::CoffeeLake_S, CpuStepping::P0),
0xD => (IntelCodename::CoffeeLake_S, CpuStepping::R0),
_ => (IntelCodename::KabyLake_S, CpuStepping::Unknown(s)),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info,
node: Some(ProcessNode::NM(14)),
}
},
0xA5 => Self {
codename: CpuCodename::Intel(IntelCodename::CometLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info: match s {
0x0 => CpuStepping::G0,
0x1 => CpuStepping::P0,
0x2 => CpuStepping::R1,
0x3 => CpuStepping::G1,
0x4 => CpuStepping::P1,
0x5 => CpuStepping::Q0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0xA6 => Self {
codename: CpuCodename::Intel(IntelCodename::CometLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::Skylake),
step_info: match s {
0x0 => CpuStepping::A0,
0x1 => CpuStepping::K1,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x66 => Self {
codename: CpuCodename::Intel(IntelCodename::CannonLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::PalmCove),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(10)),
},
0x6A | 0x6C | 0x7D | 0x7E | 0x9D => Self {
codename: match m {
0x6A => CpuCodename::Intel(IntelCodename::IceLake_X),
0x6C => CpuCodename::Intel(IntelCodename::IceLake_D),
0x7D => CpuCodename::Intel(IntelCodename::IceLake_S),
0x7E => CpuCodename::Intel(IntelCodename::IceLake_L),
0x9D => CpuCodename::Intel(IntelCodename::IceLake_NNPI),
_ => unreachable!(),
},
archname: CpuMicroArch::Intel(IntelMicroArch::SunnyCove),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(10)),
},
0xA7 => Self {
codename: CpuCodename::Intel(IntelCodename::RocketLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::CypressCove),
step_info: match s {
0x1 => CpuStepping::B0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x8C => Self {
codename: CpuCodename::Intel(IntelCodename::TigerLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::WillowCove),
step_info: match s {
0x1 => CpuStepping::B0,
0x2 => CpuStepping::C0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0x8D => Self {
codename: CpuCodename::Intel(IntelCodename::TigerLake_H),
archname: CpuMicroArch::Intel(IntelMicroArch::WillowCove),
step_info: match s {
0x1 => CpuStepping::R0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0x8F => Self {
codename: CpuCodename::Intel(IntelCodename::SapphireRapids_X),
archname: CpuMicroArch::Intel(IntelMicroArch::GoldenCove),
step_info: match s {
0x0 => CpuStepping::A0,
0x1 => CpuStepping::B0,
0x2 => CpuStepping::C0,
0x3 => CpuStepping::D0,
0x4 => CpuStepping::E0,
0x5 => CpuStepping::E2,
0x6 => CpuStepping::E3,
0x7 => CpuStepping::E4,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0xCF => Self {
codename: CpuCodename::Intel(IntelCodename::EmeraldRapids_X),
archname: CpuMicroArch::Intel(IntelMicroArch::GoldenCove),
step_info: CpuStepping::Unknown(s),
node: None,
},
0xAD => Self {
codename: CpuCodename::Intel(IntelCodename::GraniteRapids_X),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::Intel(3)),
},
0xAE => Self {
codename: CpuCodename::Intel(IntelCodename::GraniteRapids_D),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::Intel(3)),
},
0x1C | 0x26 => {
let codename = match m {
0x16 => IntelCodename::Bonnell, 0x26 => IntelCodename::Bonnell_MID, _ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Bonnell),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(45)),
}
},
0x36 | 0x27 | 0x35 => {
let codename = match m {
0x36 => IntelCodename::Saltwell, 0x27 => IntelCodename::Saltwell_MID, 0x35 => IntelCodename::Saltwell_TABLET, _ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Saltwell),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(32)),
}
},
0x37 | 0x4D | 0x4A => {
let codename = match m {
0x37 => IntelCodename::Silvermont, 0x4D => IntelCodename::Silvermont_D, 0x4A => IntelCodename::Silvermont_MID, _ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Silvermont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(22)),
}
},
0x5D => Self {
codename: CpuCodename::Intel(IntelCodename::SoFIA_3G),
archname: CpuMicroArch::Intel(IntelMicroArch::Silvermont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(28)),
},
0x4C => Self {
codename: CpuCodename::Intel(IntelCodename::Airmont), archname: CpuMicroArch::Intel(IntelMicroArch::Airmont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(14)),
},
0x5A => Self {
codename: CpuCodename::Intel(IntelCodename::Airmont_MID), archname: CpuMicroArch::Intel(IntelMicroArch::Airmont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(22)),
},
0x65 | 0x6E => {
let codename = match m {
0x65 => IntelCodename::XMM7272,
0x6E => IntelCodename::CougarMountain,
_ => unreachable!(),
};
Self {
codename: CpuCodename::Intel(codename),
archname: CpuMicroArch::Intel(IntelMicroArch::Airmont),
step_info: CpuStepping::Unknown(s),
node: None,
}
},
0x75 => Self {
codename: CpuCodename::Intel(IntelCodename::Airmont_NP), archname: CpuMicroArch::Intel(IntelMicroArch::Airmont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::NM(14)),
},
0x5C => Self {
codename: CpuCodename::Intel(IntelCodename::ApolloLake),
archname: CpuMicroArch::Intel(IntelMicroArch::Goldmont),
step_info: match s {
0x9 => CpuStepping::D0,
0xA => CpuStepping::E0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x5F => Self {
codename: CpuCodename::Intel(IntelCodename::Denverton),
archname: CpuMicroArch::Intel(IntelMicroArch::Goldmont),
step_info: match s {
0x1 => CpuStepping::B0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x7A => Self {
codename: CpuCodename::Intel(IntelCodename::GeminiLake),
archname: CpuMicroArch::Intel(IntelMicroArch::GoldmontPlus),
step_info: match s {
0x0 => CpuStepping::A0,
0x1 => CpuStepping::B0,
0x8 => CpuStepping::R0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(14)),
},
0x86 => Self {
codename: CpuCodename::Intel(IntelCodename::SnowRidge), archname: CpuMicroArch::Intel(IntelMicroArch::Tremont),
step_info: match s {
0x4 => CpuStepping::B0,
0x5 => CpuStepping::B1,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0x96 => Self {
codename: CpuCodename::Intel(IntelCodename::ElkhartLake),
archname: CpuMicroArch::Intel(IntelMicroArch::Tremont),
step_info: match s {
0x1 => CpuStepping::B1,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0x9C => Self {
codename: CpuCodename::Intel(IntelCodename::JasperLake),
archname: CpuMicroArch::Intel(IntelMicroArch::Tremont),
step_info: match s {
0x0 => CpuStepping::A0_A1,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0xBE => Self {
codename: CpuCodename::Intel(IntelCodename::AlderLake_N),
archname: CpuMicroArch::Intel(IntelMicroArch::Gracemont),
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::Intel(7)),
},
0xAF => Self {
codename: CpuCodename::Intel(IntelCodename::SierraForest_X),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::Intel(3)),
},
0xB6 => Self {
codename: CpuCodename::Intel(IntelCodename::GrandRidge),
archname: CpuMicroArch::Intel(IntelMicroArch::Crestmont),
step_info: CpuStepping::Unknown(s),
node: None,
},
0x8A => Self {
codename: CpuCodename::Intel(IntelCodename::Lakefield),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::SunnyCove,
IntelMicroArch::Tremont
)),
step_info: match s {
0x1 => CpuStepping::B2_B3,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::NM(10)),
},
0x97 => Self {
codename: CpuCodename::Intel(IntelCodename::AlderLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::GoldenCove,
IntelMicroArch::Gracemont
)),
step_info: match s {
0x0 => CpuStepping::A0,
0x1 => CpuStepping::B0,
0x2 => CpuStepping::C0,
0x4 => CpuStepping::G0,
0x5 => CpuStepping::H0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0x9A => Self {
codename: CpuCodename::Intel(IntelCodename::AlderLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::GoldenCove,
IntelMicroArch::Gracemont,
)),
step_info: match s {
0x0 => CpuStepping::J0,
0x1 => CpuStepping::Q0,
0x2 => CpuStepping::K0,
0x3 => CpuStepping::L0,
0x4 => CpuStepping::R0,
_ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0xB7 => Self {
codename: CpuCodename::Intel(IntelCodename::RaptorLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::GoldenCove,
IntelMicroArch::Gracemont,
)),
step_info: match s {
0x1 => CpuStepping::B0, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0xBA => Self {
codename: CpuCodename::Intel(IntelCodename::RaptorLake_P),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::GoldenCove,
IntelMicroArch::Gracemont,
)),
step_info: match s {
0x2 => CpuStepping::J0, 0x3 => CpuStepping::Q0, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0xBF => Self {
codename: CpuCodename::Intel(IntelCodename::RaptorLake_S_BFH),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::GoldenCove,
IntelMicroArch::Gracemont,
)),
step_info: match s {
0x2 | 0x5 => CpuStepping::C0, _ => CpuStepping::Unknown(s),
},
node: Some(ProcessNode::Intel(7)),
},
0xAA => Self {
codename: CpuCodename::Intel(IntelCodename::MeteorLake_S),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::RedwoodCove,
IntelMicroArch::Crestmont,
)),
step_info: CpuStepping::Unknown(s),
node: None,
},
0xAC => Self {
codename: CpuCodename::Intel(IntelCodename::MeteorLake_L),
archname: CpuMicroArch::Intel(IntelMicroArch::hybrid(
IntelMicroArch::RedwoodCove,
IntelMicroArch::Crestmont,
)),
step_info: CpuStepping::Unknown(s),
node: None,
},
0xB5 => Self {
codename: CpuCodename::Intel(IntelCodename::MeteorLake_B5H),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: None,
},
0xBD => Self {
codename: CpuCodename::Intel(IntelCodename::LunarLake_M),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: None,
},
0xC5 => Self {
codename: CpuCodename::Intel(IntelCodename::ArrowLake),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::IntelA(20)),
},
0xC6 => Self {
codename: CpuCodename::Intel(IntelCodename::ArrowLake_S),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: Some(ProcessNode::IntelA(20)),
},
_ => Self {
codename: CpuCodename::Unknown(CpuVendor::GenuineIntel, 0x6, m),
archname: CpuMicroArch::Unknown,
step_info: CpuStepping::Unknown(s),
node: None,
},
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum IntelCodename {
Quark_X1000,
Yonah, Merom, Merom_L, Penryn, Dunnington, Nehalem,
Nehalem_G,
Nehalem_EP,
Nehalem_EX,
Westmere,
Westmere_EP,
Westmere_EX,
SandyBridge,
SandyBridge_X,
IvyBridge,
IvyBridge_X,
Haswell,
Haswell_X,
Haswell_L,
Haswell_G,
Broadwell,
Broadwell_G,
Broadwell_X,
Broadwell_D,
SkyLake_L,
SkyLake_S,
SkyLake_X,
CascadeLake_X,
CooperLake_X,
KabyLake_L,
AmberLake_L,
CoffeeLake_L,
WhiskeyLake_L,
KabyLake_S,
CoffeeLake_S,
CometLake_S,
CometLake_L,
CannonLake_L,
IceLake_L,
IceLake_X,
IceLake_D,
IceLake_S,
IceLake_NNPI,
RocketLake_S,
TigerLake_L,
TigerLake_H,
SapphireRapids_X,
EmeraldRapids_X,
GraniteRapids_X,
GraniteRapids_D,
Bonnell,
Bonnell_MID,
Saltwell,
Saltwell_MID,
Saltwell_TABLET,
Silvermont,
Silvermont_D,
Silvermont_MID,
XMM7272,
CougarMountain,
SoFIA_3G,
Airmont,
Airmont_MID,
Airmont_NP,
ApolloLake,
Denverton,
GeminiLake,
SnowRidge,
ElkhartLake,
JasperLake,
SierraForest_X,
GrandRidge,
Lakefield,
AlderLake_S,
AlderLake_L,
AlderLake_N,
RaptorLake_S,
RaptorLake_P,
RaptorLake_S_BFH,
MeteorLake_S,
MeteorLake_L,
MeteorLake_B5H,
LunarLake_M,
ArrowLake,
ArrowLake_S,
KnightsLanding,
KnightsMill,
}
#[cfg(feature = "std")]
impl fmt::Display for IntelCodename {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum IntelMicroArch {
P5C,
PentiumM,
Merom,
Penryn,
Nehalem,
Westmere,
SandyBridge,
IvyBridge,
Haswell,
Broadwell,
Skylake,
Skylake_AVX512,
Skylake_AVX512_VNNI,
Skylake_AVX512_VNNI_BF16,
PalmCove,
SunnyCove,
CypressCove,
WillowCove,
GoldenCove,
RedwoodCove,
Bonnell,
Saltwell,
Silvermont,
Airmont,
Goldmont,
GoldmontPlus,
Tremont,
Gracemont,
Crestmont,
Hybrid(Box<Self>, Box<Self>),
KnightsLanding,
KnightsMill,
_Reserved,
}
impl IntelMicroArch {
pub(crate) fn hybrid(core: Self, atom: Self) -> Self {
Self::Hybrid(Box::new(core), Box::new(atom))
}
pub fn is_atom(&self) -> bool {
match self {
Self::Bonnell |
Self::Saltwell |
Self::Silvermont |
Self::Airmont |
Self::Goldmont |
Self::GoldmontPlus |
Self::Tremont |
Self::Gracemont |
Self::Crestmont => true,
_ => false,
}
}
pub fn is_core(&self) -> bool {
!self.is_atom() && *self != Self::_Reserved
}
pub fn is_hybrid(&self) -> bool {
if let Self::Hybrid(_, _) = *self {
true
} else {
false
}
}
}
#[cfg(feature = "std")]
impl fmt::Display for IntelMicroArch {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::Hybrid(core, atom) => write!(f, "{core} + {atom}"),
_ => write!(f, "{:?}", self),
}
}
}