fn is_amd_zen()

in reverie-ptrace/src/validation.rs [329:360]


fn is_amd_zen(cpu_feature: FeatureInfo) -> bool {
    let family_id = cpu_feature.family_id(); // 4 bits
    let model_id = cpu_feature.model_id(); // 4 bits
    let ext_model_id = cpu_feature.extended_model_id(); // 4 bits
    let ext_family_id = cpu_feature.extended_family_id(); // 8 bits

    // This is reconstructing cpu_info.eax & 0xf0ff0
    let cpu_type: u32 =
        ((model_id as u32) << 4) + ((family_id as u32) << 8) + ((ext_model_id as u32) << 16);

    // There are lots of magic numbers here. They come  directly from
    // https://github.com/rr-debugger/rr/blob/master/src/PerfCounters_x86.h
    matches!(
        (cpu_type, ext_family_id),
        (
            0x00f10 // Naples, Whitehaven, Summit Ridge, Snowy Owl (Zen), Milan (Zen 3) (UNTESTED)
            | 0x10f10 // Raven Ridge, Great Horned Owl (Zen) (UNTESTED)
            | 0x10f80 // Banded Kestrel (Zen), Picasso (Zen+) (UNTESTED)
            | 0x20f00 // Dali (Zen) (UNTESTED)
            | 0x00f80 // Colfax, Pinnacle Ridge (Zen+) (UNTESTED)
            | 0x30f10 // Rome, Castle Peak (Zen 2)
            | 0x60f00 // Renoir (Zen 2) (UNTESTED)
            | 0x70f10 // Matisse (Zen 2) (UNTESTED)
            | 0x60f80, // Lucienne
            0x8 | 0xa
        ) | (
            0x20f10 // Vermeer (Zen 3)
            | 0x50f00, // Cezanne (Zen 3)
            0xa
        )
    )
}