# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [11.1.0] - 2024-07-17 - Support for more AVX512 Extended Features ## [11.0.2] - 2024-04-29 - Fix bug in `has_waitpkg` using wrong bit flag. ## [11.0.1] - 2023-05-03 - Fix a regression from v10.7.0. CpuIdReader was falsely required to implement Debug for `CpuId::debug()` which is too strict. ## [11.0.0] - 2023-04-17 ### Breaking changes - The `CpuId` type now takes a generic reader argument `CpuId`: which allows for more flexibility on how cpuid is queried and better support for using the library on non-x86 targets. This is a breaking change for users of `with_cpuid_fn` and potentially when specifying `CpuId` as a type argument somewhere. To make existing code compile again, whenever a generic type argument for CpuId is needed, you can use the `cpuid::NativeCpuIdReader` type which provides the default behavior of execution the `cpuid` instruction. For example, in your code there might be cases where the compiler now asks you to specify the generic type of CpuId: e.g., `fn take_cpuid(cpuid: CpuId)` would become: `fn take_cpuid(cpuid: CpuId)` See also [#140](https://github.com/gz/rust-cpuid/pull/140) and [#138](https://github.com/gz/rust-cpuid/pull/138) for the original discussion. - If you're using the `serialization` feature: It go revamped by fixing some long-standing problems with it that made it difficult to use [#87](https://github.com/gz/rust-cpuid/issues/87). All types except `CpuIdResult` types lost their `Serialize` and `Deserialize` derives. Check the [new example](examples/serialize_deserialize.rs) on how to serialize and deserialize cpuid information. ## Other changes - Updated bitflags to v2. ## [10.7.0] - 2023-02-27 - Include the pretty printing code in the library (instead of only having it in the binary) ([#137](https://github.com/gz/rust-cpuid/pull/137)) This introduces a new (optional) `display` feature. `display` will also enable `std` so it can't be used in `no_std` environments. ## [10.6.1] - 2023-02-03 - Fix potential overflow during formatting when using the in cpuid binary to display cache information. ([#133](https://github.com/gz/rust-cpuid/issues/133)) ## [10.6.0] - 2022-09-12 - Updated termimad to 0.20 (only affects `cpuid` binary version) - Add support for AMD leaf `0x8000_001E` - Add support for AMD leaf `0x8000_0019` - Updated `ExtendedFeatures` to include new features ## [10.5.0] - 2022-08-17 - Updated phf to 0.11 (only affects `cfg(test)`) - Add support for AMD leaf `0x8000_001D` - Add support for AMD leaf `0x8000_001A` ## [10.4.0] - 2022-08-01 - Added support for cpuid leaf 0x1f (Extended Topology Information v2) - Improved debug formatting for `ProcessorCapacityAndFeatureInfo` ## [10.3.0] - 2022-03-15 ### Added - Added ExtendedFeatures::has_avx512vnni(). - Allow to build/use the crate even if `native_cpuid` is not available on the target (one can still instantiate CpuId using `with_cpuid_fn` in this case). ## Changed - Updated clap dependency. ## [10.2.0] - 2021-07-30 ### Added - Fix Cache and TLB (leaf 0x02) formatting in cpuid binary. ## Changed - Added JSON and raw formatting to cpuid binary. ## [10.1.0] - 2021-07-30 ### Added - AMD SVM feature leaf (0x8000_000A) - Added methods to display upper 64-96 bits of processor serial number (`serial_all`, `serial_upper`) - Implement `Display` for `CacheType` - Implement `Display` for `TopologyType` - Implement `Display` for `DatType` - Implement `Display` for `Associativity` - Added `location()` method for `ExtendedState` as an alternative for `is_in_ia32_xss` and `is_in_xcr0`. - Added new `register()` method for `ExtendedState` to identify which register this instance refers to. ## Changed - Better formatting for cpuid binary. ## [10.0.0] - 2021-07-14 ### Breaking changes for v10 - Removed `get_extended_function_info` / `ExtendedFunctionInfo` due to added AMD support: Use `get_processor_brand_string`, `get_extended_processor_and_feature_identifiers`, `get_l1_cache_and_tlb_info`, `get_l2_l3_cache_and_tlb_info`, `get_advanced_power_mgmt_info`, `get_processor_capacity_feature_info` instead: Migration guide for replacing `get_extended_function_info` / `ExtendedFunctionInfo`: | <= v9 | >= v10 | | -------------------------- | ------------------------------------------------------------------------------ | | `processor_brand_string()` | `CpuId.get_processor_brand_string` | | `cache_line_size()` | `Cpuid.get_l2_l3_cache_and_tlb_info().l2cache_line_size()` | | `l2_associativity()` | `Cpuid.get_l2_l3_cache_and_tlb_info().l2cache_associativity()` | | `cache_size()` | `Cpuid.get_l2_l3_cache_and_tlb_info().l2cache_size()` | | `physical_address_bits()` | `CpuId.get_processor_capacity_feature_info().physical_address_bits()` | | `linear_address_bits()` | `CpuId.get_processor_capacity_feature_info().linear_address_bits()` | | `has_invariant_tsc()` | `CpuId.get_advanced_power_mgmt_info.has_invariant_tsc()` | | `has_lahf_sahf()` | `CpuId.get_extended_processor_and_feature_identifiers().has_lahf_sahf()` | | `has_lzcnt()` | `CpuId.get_extended_processor_and_feature_identifiers().has_lzcnt()` | | `has_prefetchw()` | `CpuId.get_extended_processor_and_feature_identifiers().has_prefetchw()` | | `has_syscall_sysret()` | `CpuId.get_extended_processor_and_feature_identifiers().has_syscall_sysret()` | | `has_execute_disable()` | `CpuId.get_extended_processor_and_feature_identifiers().has_execute_disable()` | | `has_1gib_pages()` | `CpuId.get_extended_processor_and_feature_identifiers().has_1gib_pages()` | | `has_rdtscp()` | `CpuId.get_extended_processor_and_feature_identifiers().has_rdtscp()` | | `has_64bit_mode()` | `CpuId.get_extended_processor_and_feature_identifiers().has_64bit_mode()` | - Removed `CpuId.deterministic_address_translation_info`. Use `CpuId.get_deterministic_address_translation_info` instead. - Renamed `model_id` and `family_id` to `base_model_id` and `base_family_id` in `FeatureInfo`. Added new `family_id` and `model_id` functions that compute the actual model and family according to the spec by joining base and extended family/model. - Extend Hypervisor enum with more variants ([#50](https://github.com/gz/rust-cpuid/pull/50)) - Remove `has_rdseet` function (deprecated since 3.2), clients should use the correctly named `has_rdseed` function instead. Migration guide for `cpuid.get_feature_info()`: | <= v9 | >= v10 | | ----------- | ----------- | | `has_rdseet()` | `has_rdseed()` | - Removed `Default` traits for most structs. `default()` should not be used anymore. ### Changes - Updated Debug trait for SGX iterators. - Make CpuId derive Clone and Copy ([#53](https://github.com/gz/rust-cpuid/pull/53)) - Improved documentation in some places by adding leaf numbers. - Updated AMD leaf 0x8000_001f (Encrypted Memory) to latest manual. - `ProcessorBrandString.as_str()` now trims the returned string. - Fix `RdtAllocationInfo.memory_bandwidth_allocation()` which was using l2cat availability to determine if it exists. ### Added - Added AMD support for leaf 0x8000_0001 - Added AMD support for leaf 0x8000_0005 - Added AMD support for leaf 0x8000_0006 - Added AMD support for leaf 0x8000_0007 - Added AMD support for leaf 0x8000_0008 ### Deprecated - `VendorInfo.as_string()` is deprecated in favor of `VendorInfo.as_str()` - `SoCVendorBrand.as_string()` is deprecated in favor of `SoCVendorBrand.as_str()` ## [9.1.1] - 2021-07-06 ### Changed - Use more idiomatic rust code in readme/doc.rs example. - Use `str::from_utf8` instead of `str::from_utf8_unchecked` to avoid potential panics with the Deserialize trait ([#43](https://github.com/gz/rust-cpuid/issues/43)). - More extensive Debug trait implementation ([#49](https://github.com/gz/rust-cpuid/pull/49)) - Fix 2 clippy warnings ## [9.1.0] - 2021-07-03 ### Added - A `CpuId::with_cpuid_fn` that allows to override the default cpuid function. ### Changed - Fixed `RdtAllocationInfo.has_memory_bandwidth_allocation`: was using the wrong bit - Fixed `capacity_mask_length` in `L3CatInfo` and `L2CatInfo`: add +1 to returned value - Fixed `MemBwAllocationInfo.max_hba_throttling`: add +1 to returned value - Refactored tests into a module. - Started to add tests for Ryzen/AMD.