Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comprehensive Debug-impls for all structs #49

Merged
merged 5 commits into from Jul 6, 2021

Conversation

phip1611
Copy link
Contributor

@phip1611 phip1611 commented Jul 5, 2021

Hi! In my opinion this crate missed comprehensive debug impls for all structs. I changed all outputs for eax, ebx etc. to hex-based outputs and invoke all important methods for each struct and would like to propose you this MR.

ONLY BLOCKER SO FAR: Similar to the std vector, vec::iter() should print all elements of the iterator when debug-formatted. This is currently not possible, because I didn't found a nice way to solve this in code.

Example debug output of CpuId::new() on my system with the new code:

CpuId {
    vendor: Intel,
    supported_leafs: 0x000000000000001b,
    vendor_info: Some(
        VendorInfo {
            ebx: 0x00000000756e6547,
            edx: 0x0000000049656e69,
            ecx: 0x000000006c65746e,
            brand_string: "GenuineIntel",
        },
    ),
    feature_info: Some(
        FeatureInfo {
            eax: 0x00000000000806c1,
            ebx: 0x0000000001100800,
            edx_ecx: SSE3 | PCLMULQDQ | DTES64 | MONITOR | DSCPL | VMX | EIST | TM2 | SSSE3 | FMA | CMPXCHG16B | PDCM | PCID | SSE41 | SSE42 | X2APIC | MOVBE | POPCNT | TSC_DEADLINE | AESNI | XSAVE | OSXSAVE | AVX | F16C | RDRAND | FPU | VME | DE | PSE | TSC | MSR | PAE | MCE | CX8 | APIC | SEP | MTRR | PGE | MCA | CMOV | PAT | PSE36 | CLFSH | DS | ACPI | MMX | FXSR | SSE | SSE2 | SS | HTT | TM | PBE | 0x0x4800,
        },
    ),
    cache_info: Some(
        CacheInfoIter {
            eax: 0x0000000000feff01,
            ebx: 0x00000000000000f0,
            ecx: 0x0000000000000000,
            edx: 0x0000000000000000,
        },
    ),
    processor_serial: Some(
        ProcessorSerial {
            ecx: 0x0000000000000000,
            edx: 0x0000000000000000,
            serial_lower: 0,
            serial_middle: 0,
            serial_middle: 0,
        },
    ),
    cache_parameters: Some(
        CacheParametersIter,
    ),
    monitor_mwait_info: Some(
        MonitorMwaitInfo {
            eax: 0x0000000000000040,
            ebx: 0x0000000000000040,
            ecx: 0x0000000000000003,
            edx: 0x0000000011121020,
            smallest_monitor_line: 64,
            largest_monitor_line: 64,
            extensions_supported: true,
            interrupts_as_break_event: true,
            supported_c0_states: 0,
            supported_c1_states: 2,
            supported_c2_states: 0,
            supported_c3_states: 1,
            supported_c4_states: 2,
            supported_c5_states: 1,
            supported_c6_states: 1,
            supported_c7_states: 1,
        },
    ),
    thermal_power_info: Some(
        ThermalPowerInfo {
            eax: DTS | TURBO_BOOST | ARAT | PLN | ECMD | PTM | HWP | HWP_NOTIFICATION | HWP_ACTIVITY_WINDOW | HWP_ENERGY_PERFORMANCE_PREFERENCE | HWP_PACKAGE_LEVEL_REQUEST | HDC | TURBO_BOOST_3 | HWP_CAPABILITIES | HWP_PECI_OVERRIDE | FLEXIBLE_HWP | HWP_REQUEST_MSR_FAST_ACCESS | IGNORE_IDLE_PROCESSOR_HWP_REQUEST,
            ebx: 0x0000000000000002,
            ecx: HW_COORD_FEEDBACK | ENERGY_BIAS_PREF,
            edx: 0x0000000000000000,
        },
    ),
    extended_feature_info: Some(
        ExtendedFeatures {
            eax: 0x0000000000000000,
            ebx: FSGSBASE | ADJUST_MSR | BMI1 | AVX2 | FDP | SMEP | BMI2 | REP_MOVSB_STOSB | INVPCID | DEPRECATE_FPU_CS_DS | RDTA | AVX512F | AVX512DQ | RDSEED | ADX | SMAP | AVX512_IFMA | CLFLUSHOPT | CLWB | PROCESSOR_TRACE | AVX512CD | SHA | AVX512BW | AVX512VL,
            ecx: AVX512VBMI | UMIP | PKU | OSPKE | RDPID | 0x0x18805fc0,
            edx: 0x00000000fc100510,
        },
    ),
    direct_cache_access_info: Some(
        DirectCacheAccessInfo {
            eax: 0x0000000000000000,
            dca_cap_value: 0,
        },
    ),
    performance_monitoring_info: Some(
        PerformanceMonitoringInfo {
            eax: 0x0000000008300805,
            eax: (empty),
            ecx: 0x000000000000000f,
            edx: 0x0000000000008604,
            version_id: 5,
            number_of_counters: 8,
            counter_bit_width: 48,
            ebx_length: 8,
            fixed_function_counters: 4,
            fixed_function_counters_bit_width: 48,
        },
    ),
    extended_topology_info: Some(
        ExtendedTopologyIter,
    ),
    extended_state_info: Some(
        ExtendedStateInfo {
            eax: LEGACY_X87 | SSE128 | AVX256 | AVX512_OPMASK | AVX512_ZMM_HI256 | AVX512_ZMM_HI16 | PKRU,
            ebx: 0x0000000000000a88,
            ecx: 0x0000000000000a88,
            edx: 0x0000000000000000,
            eax1: 0x000000000000000f,
            ebx1: 0x0000000000000988,
            ecx1: PT | HDC | 0x0x1800,
            edx1: 0x0000000000000000,
        },
    ),
    rdt_monitoring_info: Some(
        RdtMonitoringInfo {
            ebx: 0x0000000000000000,
            edx: 0x0000000000000000,
            rmid_range: 0,
            l3_monitoring: None,
        },
    ),
    rdt_allocation_info: Some(
        RdtAllocationInfo {
            ebx: 0x0000000000000004,
            l3_cat: None,
            l2_cat: Some(
                L2CatInfo {
                    eax: 0x0000000000000013,
                    ebx: 0x0000000000000000,
                    edx: 0x0000000000000007,
                    capacity_mask_length: 20,
                    isolation_bitmap: 0,
                    highest_cos: 7,
                },
            ),
            memory_bandwidth_allocation: Some(
                MemBwAllocationInfo {
                    eax: 0x0000000000000000,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000000,
                    max_hba_throttling: 1,
                    highest_cos: 0,
                },
            ),
        },
    ),
    sgx_info: None,
    processor_trace_info: Some(
        ProcessorTraceInfo {
            eax: 0x0000000000000001,
            ebx: 0x000000000000004f,
            ecx: 0x0000000000000007,
            edx: 0x0000000000000000,
            leaf1: Some(
                CpuIdResult {
                    eax: 0x0000000002490002,
                    ebx: 0x00000000003f1fff,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000000,
                },
            ),
            configurable_address_ranges: 0x0000000000000002,
            supported_mtc_period_encodings: 0x0000000000000249,
            supported_cycle_threshold_value_encodings: 0x0000000000001fff,
            supported_psb_frequency_encodings: 0x000000000000003f,
        },
    ),
    tsc_info: Some(
        TscInfo {
            eax: 0x0000000000000002,
            ebx: 0x0000000000000092,
            ecx: 0x000000000249f000,
            denominator: 2,
            numerator: 146,
            nominal_frequency: 38400000,
            tsc_frequency: Some(
                2803200000,
            ),
        },
    ),
    processor_frequency_info: Some(
        ProcessorFrequencyInfo {
            eax: 0x0000000000000af0,
            ebx: 0x000000000000125c,
            ecx: 0x0000000000000064,
            processor_base_frequency: 2800,
            processor_max_frequency: 4700,
            bus_frequency: 100,
        },
    ),
    deterministic_address_translation_info: Some(
        DatIter {
            read: CpuIdReader {
                cpuid_fn: 0x000055962cfc5fd0,
            },
            current: 0,
            count: 8,
        },
    ),
    soc_vendor_info: Some(
        SoCVendorInfo {
            eax: 0x0000000000000000,
            ebx: 0x0000000000000000,
            ecx: 0x0000000000000000,
            edx: 0x0000000000000000,
            soc_vendor_id: 0,
            project_id: 0,
            stepping_id: 0,
            vendor_brand: None,
            vendor_attributes: None,
        },
    ),
    hypervisor_info: None,
    extended_function_info: Some(
        ExtendedFunctionInfo {
            max_eax_value: 0x0000000000000008,
            data: [
                CpuIdResult {
                    eax: 0x0000000080000008,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000000,
                },
                CpuIdResult {
                    eax: 0x0000000000000000,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000000000121,
                    edx: 0x000000002c100800,
                },
                CpuIdResult {
                    eax: 0x0000000068743131,
                    ebx: 0x000000006e654720,
                    ecx: 0x00000000746e4920,
                    edx: 0x0000000052286c65,
                },
                CpuIdResult {
                    eax: 0x000000006f432029,
                    ebx: 0x0000000054286572,
                    ecx: 0x000000006920294d,
                    edx: 0x0000000031312d37,
                },
                CpuIdResult {
                    eax: 0x0000000037473536,
                    ebx: 0x0000000032204020,
                    ecx: 0x000000004730382e,
                    edx: 0x0000000000007a48,
                },
                CpuIdResult {
                    eax: 0x0000000000000000,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000000,
                },
                CpuIdResult {
                    eax: 0x0000000000000000,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000001007040,
                    edx: 0x0000000000000000,
                },
                CpuIdResult {
                    eax: 0x0000000000000000,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000100,
                },
                CpuIdResult {
                    eax: 0x0000000000003027,
                    ebx: 0x0000000000000000,
                    ecx: 0x0000000000000000,
                    edx: 0x0000000000000000,
                },
            ],
            processor_brand_string: Some(
                "11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz",
            ),
            extended_signature: Some(
                0,
            ),
            cache_line_size: Some(
                64,
            ),
            l2_associativity: Some(
                Unknown,
            ),
            cache_size: Some(
                256,
            ),
            physical_address_bits: Some(
                39,
            ),
            linear_address_bits: Some(
                48,
            ),
            has_invariant_tsc: true,
            has_lahf_sahf: true,
            has_lzcnt: true,
            has_prefetchw: true,
            has_syscall_sysret: true,
            has_execute_disable: true,
            has_1gib_pages: true,
            has_rdtscp: true,
            has_64bit_mode: true,
        },
    ),
    memory_encryption_info: None,
}

What do you think? I think this would be pretty useful. I typically like to debug-format structs to see what I can get from them. I think others will benefit from this as well.

PS: I don't know why CI is failing?!

@gz
Copy link
Owner

gz commented Jul 5, 2021

Hi, Yes I like this thanks for improving the debug output! It seems it also sometimes prints the private struct members (eax, ebx etc.) which wouldn't be accessible by the user of the library and I'm not sure if this will be confusing or beneficial (beneficial since it could help a user figure out why some value is like it is, or validating if there is a bug)? Any particular other reason why we should include them?

CI seems to fail because of cargo fmt, it does a /usr/share/rust/.cargo/bin/cargo fmt --all -- --check, sometimes it can fail because your system and CI have different cargo fmt versions.

@phip1611
Copy link
Contributor Author

phip1611 commented Jul 6, 2021

Ah I see, I formatted everything, now it seems to be fine @gz

I'm not sure about eax/ebx/ecx etc. Probably you are right. As long as there is no getter for it nor the member is public, this is an irrelevant information. Should I remove it and then we are ready to go?

@gz
Copy link
Owner

gz commented Jul 6, 2021

Yes let's remove it and then we merge it. IMO if someone wants the register values he can just do cpuid!().

With this commit I add missing debug formatting for a few structs I missed first + all iterators. Raw register values are not debug-formatted now, when there are more valuable getter functions.
Some register values are reserved for future used and currently not used, since they are no longer in the debug output.
@gz gz merged commit bd048e9 into gz:master Jul 6, 2021
@phip1611
Copy link
Contributor Author

phip1611 commented Jul 6, 2021

@gz I removed the debug-format for register values at all places (except CpuIdResult). Furthermore I found out that I missed the output of some fields/methods, because they are created by macros - I fixed it. I'm confident that the debug-formatting includes now all important fields+methods. Furthermore the debug-fmt of Iterators works now.

Current debug-fmt output of CpuId::new():

PS: If you want to, I can squash my commits and force push the branch.
Seems you was faster :)

CpuId {
    vendor: Intel,
    vendor_info: Some(
        VendorInfo {
            brand_string: "GenuineIntel",
        },
    ),
    feature_info: Some(
        FeatureInfo {
            extended_family_id: 0,
            extended_model_id: 8,
            family_id: 6,
            model_id: 12,
            stepping_id: 1,
            brand_index: 0,
            cflush_cache_line_size: 8,
            initial_local_apic_id: 3,
            max_logical_processor_ids: 16,
            edx_ecx: SSE3 | PCLMULQDQ | DTES64 | MONITOR | DSCPL | VMX | EIST | TM2 | SSSE3 | FMA | CMPXCHG16B | PDCM | PCID | SSE41 | SSE42 | X2APIC | MOVBE | POPCNT | TSC_DEADLINE | AESNI | XSAVE | OSXSAVE | AVX | F16C | RDRAND | FPU | VME | DE | PSE | TSC | MSR | PAE | MCE | CX8 | APIC | SEP | MTRR | PGE | MCA | CMOV | PAT | PSE36 | CLFSH | DS | ACPI | MMX | FXSR | SSE | SSE2 | SS | HTT | TM | PBE | 0x0x4800,
        },
    ),
    cache_info: Some(
        [
            CacheInfo {
                typ: Prefetch,
                desc: "64-Byte prefetching",
            },
            CacheInfo {
                typ: General,
                desc: "CPUID leaf 2 does not report cache descriptor information, use CPUID leaf 4 to query cache parameters",
            },
            CacheInfo {
                typ: General,
                desc: "CPUID leaf 2 does not report TLB descriptor information; use CPUID leaf 18H to query TLB and other address translation parameters.",
            },
        ],
    ),
    processor_serial: Some(
        ProcessorSerial {
            serial_lower: 0,
            serial_middle: 0,
            serial_middle: 0,
        },
    ),
    cache_parameters: Some(
        [
            CacheParameter {
                cache_type: Data,
                level: 1,
                is_self_initializing: true,
                is_fully_associative: false,
                max_cores_for_cache: 2,
                max_cores_for_package: 8,
                coherency_line_size: 64,
                physical_line_partitions: 1,
                associativity: 12,
                sets: 64,
                is_write_back_invalidate: false,
                is_inclusive: false,
                has_complex_indexing: false,
            },
            CacheParameter {
                cache_type: Instruction,
                level: 1,
                is_self_initializing: true,
                is_fully_associative: false,
                max_cores_for_cache: 2,
                max_cores_for_package: 8,
                coherency_line_size: 64,
                physical_line_partitions: 1,
                associativity: 8,
                sets: 64,
                is_write_back_invalidate: false,
                is_inclusive: false,
                has_complex_indexing: false,
            },
            CacheParameter {
                cache_type: Unified,
                level: 2,
                is_self_initializing: true,
                is_fully_associative: false,
                max_cores_for_cache: 2,
                max_cores_for_package: 8,
                coherency_line_size: 64,
                physical_line_partitions: 1,
                associativity: 20,
                sets: 1024,
                is_write_back_invalidate: false,
                is_inclusive: false,
                has_complex_indexing: false,
            },
            CacheParameter {
                cache_type: Unified,
                level: 3,
                is_self_initializing: true,
                is_fully_associative: false,
                max_cores_for_cache: 16,
                max_cores_for_package: 8,
                coherency_line_size: 64,
                physical_line_partitions: 1,
                associativity: 12,
                sets: 16384,
                is_write_back_invalidate: false,
                is_inclusive: false,
                has_complex_indexing: true,
            },
        ],
    ),
    monitor_mwait_info: Some(
        MonitorMwaitInfo {
            smallest_monitor_line: 64,
            largest_monitor_line: 64,
            extensions_supported: true,
            interrupts_as_break_event: true,
            supported_c0_states: 0,
            supported_c1_states: 2,
            supported_c2_states: 0,
            supported_c3_states: 1,
            supported_c4_states: 2,
            supported_c5_states: 1,
            supported_c6_states: 1,
            supported_c7_states: 1,
        },
    ),
    thermal_power_info: Some(
        ThermalPowerInfo {
            dts_irq_threshold: 2,
            has_dts: true,
            has_arat: true,
            has_pln: true,
            has_ecmd: true,
            has_ptm: true,
            has_hwp: true,
            has_hwp_notification: true,
            has_hwp_activity_window: true,
            has_hwp_energy_performance_preference: true,
            has_hwp_package_level_request: true,
            has_hdc: true,
            has_turbo_boost3: true,
            has_hwp_capabilities: true,
            has_hwp_peci_override: true,
            has_flexible_hwp: true,
            has_hwp_fast_access_mode: true,
            has_ignore_idle_processor_hwp_request: true,
            has_hw_coord_feedback: true,
            has_energy_bias_pref: true,
        },
    ),
    extended_feature_info: Some(
        ExtendedFeatures {
            ebx: FSGSBASE | ADJUST_MSR | BMI1 | AVX2 | FDP | SMEP | BMI2 | REP_MOVSB_STOSB | INVPCID | DEPRECATE_FPU_CS_DS | RDTA | AVX512F | AVX512DQ | RDSEED | ADX | SMAP | AVX512_IFMA | CLFLUSHOPT | CLWB | PROCESSOR_TRACE | AVX512CD | SHA | AVX512BW | AVX512VL,
            ecx: AVX512VBMI | UMIP | PKU | OSPKE | RDPID | 0x0x18805fc0,
            mawau_value: 0,
        },
    ),
    direct_cache_access_info: Some(
        DirectCacheAccessInfo {
            dca_cap_value: 0,
        },
    ),
    performance_monitoring_info: Some(
        PerformanceMonitoringInfo {
            version_id: 5,
            number_of_counters: 8,
            counter_bit_width: 48,
            ebx_length: 8,
            fixed_function_counters: 4,
            fixed_function_counters_bit_width: 48,
        },
    ),
    extended_topology_info: Some(
        [
            ExtendedTopologyLevel {
                processors: 2,
                number: 0,
                type: SMT,
                x2apic_id: 3,
                next_apic_id: 1,
            },
            ExtendedTopologyLevel {
                processors: 8,
                number: 1,
                type: Core,
                x2apic_id: 3,
                next_apic_id: 4,
            },
        ],
    ),
    extended_state_info: Some(
        ExtendedStateInfo {
            eax: LEGACY_X87 | SSE128 | AVX256 | AVX512_OPMASK | AVX512_ZMM_HI256 | AVX512_ZMM_HI16 | PKRU,
            ecx1: PT | HDC | 0x0x1800,
            xsave_area_size_enabled_features: 2696,
            xsave_area_size_supported_features: 2696,
            has_xsaveopt: true,
            has_xsavec: true,
            has_xgetbv: true,
            has_xsaves_xrstors: true,
            xsave_size: 2440,
            extended_state_iter: [
                ExtendedState {
                    size: 256,
                    offset: 576,
                    is_in_ia32_xss: false,
                    is_in_xcr0: true,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 64,
                    offset: 1088,
                    is_in_ia32_xss: false,
                    is_in_xcr0: true,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 512,
                    offset: 1152,
                    is_in_ia32_xss: false,
                    is_in_xcr0: true,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 1024,
                    offset: 1664,
                    is_in_ia32_xss: false,
                    is_in_xcr0: true,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 128,
                    offset: 0,
                    is_in_ia32_xss: true,
                    is_in_xcr0: false,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 8,
                    offset: 2688,
                    is_in_ia32_xss: false,
                    is_in_xcr0: true,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 16,
                    offset: 0,
                    is_in_ia32_xss: true,
                    is_in_xcr0: false,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 24,
                    offset: 0,
                    is_in_ia32_xss: true,
                    is_in_xcr0: false,
                    is_compacted_format: false,
                },
                ExtendedState {
                    size: 8,
                    offset: 0,
                    is_in_ia32_xss: true,
                    is_in_xcr0: false,
                    is_compacted_format: false,
                },
            ],
        },
    ),
    rdt_monitoring_info: Some(
        RdtMonitoringInfo {
            rmid_range: 0,
            l3_monitoring: None,
        },
    ),
    rdt_allocation_info: Some(
        RdtAllocationInfo {
            l3_cat: None,
            l2_cat: Some(
                L2CatInfo {
                    capacity_mask_length: 20,
                    isolation_bitmap: 0,
                    highest_cos: 7,
                },
            ),
            memory_bandwidth_allocation: Some(
                MemBwAllocationInfo {
                    max_hba_throttling: 1,
                    highest_cos: 0,
                    has_linear_response_delay: false,
                },
            ),
        },
    ),
    sgx_info: None,
    processor_trace_info: Some(
        ProcessorTraceInfo {
            configurable_address_ranges: 2,
            supported_mtc_period_encodings: 585,
            supported_cycle_threshold_value_encodings: 8191,
            supported_psb_frequency_encodings: 63,
        },
    ),
    tsc_info: Some(
        TscInfo {
            denominator: 2,
            numerator: 146,
            nominal_frequency: 38400000,
            tsc_frequency: Some(
                2803200000,
            ),
        },
    ),
    processor_frequency_info: Some(
        ProcessorFrequencyInfo {
            processor_base_frequency: 2800,
            processor_max_frequency: 4700,
            bus_frequency: 100,
        },
    ),
    deterministic_address_translation_info: Some(
        [
            DatInfo {
                has_4k_entries: true,
                has_2mb_entries: false,
                has_4mb_entries: false,
                has_1gb_entries: false,
                is_fully_associative: false,
            },
            DatInfo {
                has_4k_entries: false,
                has_2mb_entries: true,
                has_4mb_entries: true,
                has_1gb_entries: false,
                is_fully_associative: false,
            },
            DatInfo {
                has_4k_entries: true,
                has_2mb_entries: true,
                has_4mb_entries: true,
                has_1gb_entries: true,
                is_fully_associative: true,
            },
            DatInfo {
                has_4k_entries: true,
                has_2mb_entries: false,
                has_4mb_entries: false,
                has_1gb_entries: false,
                is_fully_associative: false,
            },
            DatInfo {
                has_4k_entries: false,
                has_2mb_entries: true,
                has_4mb_entries: true,
                has_1gb_entries: false,
                is_fully_associative: false,
            },
            DatInfo {
                has_4k_entries: false,
                has_2mb_entries: false,
                has_4mb_entries: false,
                has_1gb_entries: true,
                is_fully_associative: true,
            },
            DatInfo {
                has_4k_entries: true,
                has_2mb_entries: true,
                has_4mb_entries: true,
                has_1gb_entries: false,
                is_fully_associative: false,
            },
            DatInfo {
                has_4k_entries: true,
                has_2mb_entries: false,
                has_4mb_entries: false,
                has_1gb_entries: true,
                is_fully_associative: false,
            },
        ],
    ),
    soc_vendor_info: Some(
        SoCVendorInfo {
            soc_vendor_id: 0,
            project_id: 0,
            stepping_id: 0,
            vendor_brand: None,
            vendor_attributes: None,
        },
    ),
    hypervisor_info: None,
    extended_function_info: Some(
        ExtendedFunctionInfo {
            processor_brand_string: Some(
                "11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz",
            ),
            extended_signature: Some(
                0,
            ),
            cache_line_size: Some(
                64,
            ),
            l2_associativity: Some(
                Unknown,
            ),
            cache_size: Some(
                256,
            ),
            physical_address_bits: Some(
                39,
            ),
            linear_address_bits: Some(
                48,
            ),
            has_invariant_tsc: true,
            has_lahf_sahf: true,
            has_lzcnt: true,
            has_prefetchw: true,
            has_syscall_sysret: true,
            has_execute_disable: true,
            has_1gib_pages: true,
            has_rdtscp: true,
            has_64bit_mode: true,
        },
    ),
    memory_encryption_info: None,
}

@gz
Copy link
Owner

gz commented Jul 6, 2021

Merged thanks for all the work on this!

@gz
Copy link
Owner

gz commented Jul 6, 2021

Released as 9.1.1

@phip1611 phip1611 deleted the comprehensive-debug-impls-for-all-structs branch July 7, 2021 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants