]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/cpuid: Introduce <asm/cpuid/leaf_types.h>
authorAhmed S. Darwish <darwi@linutronix.de>
Fri, 27 Mar 2026 02:15:21 +0000 (03:15 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 8 May 2026 21:10:17 +0000 (23:10 +0200)
To centralize all CPUID access across the x86 subsystem, introduce
<asm/cpuid/leaf_types.h>.  It is generated by the x86-cpuid-db project¹ and
provides C99 bitfield listings for all publicly known CPUID leaves.

¹ https://gitlab.com/x86-cpuid.org/x86-cpuid-db/-/blob/v3.0/CHANGELOG.rst

Suggested-by: Thomas Gleixner <tglx@kernel.org>
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/20260327021645.555257-1-darwi@linutronix.de
MAINTAINERS
arch/x86/include/asm/cpuid/leaf_types.h [new file with mode: 0644]

index 3db882dae3191a835f858f1f4221cb2e18b48bff..c152274a8dc910c493e7fdc1b3f9ef8f53886f51 100644 (file)
@@ -28859,6 +28859,7 @@ R:      Ahmed S. Darwish <darwi@linutronix.de>
 L:     x86-cpuid@lists.linux.dev
 S:     Maintained
 W:     https://x86-cpuid.org
+F:     arch/x86/include/asm/cpuid/leaf_types.h
 F:     tools/arch/x86/kcpuid/
 
 X86 ENTRY CODE
diff --git a/arch/x86/include/asm/cpuid/leaf_types.h b/arch/x86/include/asm/cpuid/leaf_types.h
new file mode 100644 (file)
index 0000000..5b0008e
--- /dev/null
@@ -0,0 +1,2350 @@
+/* SPDX-License-Identifier: MIT */
+/* Generator: x86-cpuid-db v3.0 */
+
+/*
+ * Auto-generated file.
+ * Please submit all updates and bugfixes to https://x86-cpuid.org
+ */
+
+#ifndef _ASM_X86_CPUID_LEAF_TYPES
+#define _ASM_X86_CPUID_LEAF_TYPES
+
+#include <linux/types.h>
+
+/*
+ * Leaf 0x0
+ * Maximum standard leaf + CPU vendor string
+ */
+
+struct leaf_0x0_0 {
+       // eax
+       u32     max_std_leaf                    : 32; // Highest standard CPUID leaf
+       // ebx
+       u32     cpu_vendorid_0                  : 32; // CPU vendor ID string bytes 0 - 3
+       // ecx
+       u32     cpu_vendorid_2                  : 32; // CPU vendor ID string bytes 8 - 11
+       // edx
+       u32     cpu_vendorid_1                  : 32; // CPU vendor ID string bytes 4 - 7
+};
+
+/*
+ * Leaf 0x1
+ * CPU FMS (Family/Model/Stepping) + standard feature flags
+ */
+
+struct leaf_0x1_0 {
+       // eax
+       u32     stepping                        :  4, // Stepping ID
+               base_model                      :  4, // Base CPU model ID
+               base_family_id                  :  4, // Base CPU family ID
+               cpu_type                        :  2, // CPU type
+                                               :  2, // Reserved
+               ext_model                       :  4, // Extended CPU model ID
+               ext_family                      :  8, // Extended CPU family ID
+                                               :  4; // Reserved
+       // ebx
+       u32     brand_id                        :  8, // Brand index
+               clflush_size                    :  8, // CLFLUSH instruction cache line size
+               n_logical_cpu                   :  8, // Logical CPU count
+               local_apic_id                   :  8; // Initial local APIC physical ID
+       // ecx
+       u32     sse3                            :  1, // Streaming SIMD Extensions 3 (SSE3)
+               pclmulqdq                       :  1, // PCLMULQDQ instruction support
+               dtes64                          :  1, // 64-bit DS save area
+               monitor                         :  1, // MONITOR/MWAIT support
+               dscpl                           :  1, // CPL Qualified Debug Store
+               vmx                             :  1, // Virtual Machine Extensions
+               smx                             :  1, // Safer Mode Extensions
+               est                             :  1, // Enhanced Intel SpeedStep
+               tm2                             :  1, // Thermal Monitor 2
+               ssse3                           :  1, // Supplemental SSE3
+               cntxt_id                        :  1, // L1 Context ID
+               sdbg                            :  1, // Silicon Debug
+               fma                             :  1, // FMA extensions using YMM state
+               cx16                            :  1, // CMPXCHG16B instruction support
+               xtpr_update                     :  1, // xTPR Update Control
+               pdcm                            :  1, // Perfmon and Debug Capability
+                                               :  1, // Reserved
+               pcid                            :  1, // Process-context identifiers
+               dca                             :  1, // Direct Cache Access
+               sse4_1                          :  1, // SSE4.1
+               sse4_2                          :  1, // SSE4.2
+               x2apic                          :  1, // X2APIC support
+               movbe                           :  1, // MOVBE instruction support
+               popcnt                          :  1, // POPCNT instruction support
+               tsc_deadline_timer              :  1, // APIC timer one-shot operation
+               aes                             :  1, // AES instructions
+               xsave                           :  1, // XSAVE (and related instructions) support
+               osxsave                         :  1, // XSAVE (and related instructions) are enabled by OS
+               avx                             :  1, // AVX instructions support
+               f16c                            :  1, // Half-precision floating-point conversion support
+               rdrand                          :  1, // RDRAND instruction support
+               guest_status                    :  1; // System is running as guest; (para-)virtualized system
+       // edx
+       u32     fpu                             :  1, // Floating-Point Unit on-chip (x87)
+               vme                             :  1, // Virtual-8086 Mode Extensions
+               de                              :  1, // Debugging Extensions
+               pse                             :  1, // Page Size Extension
+               tsc                             :  1, // Time Stamp Counter
+               msr                             :  1, // Model-Specific Registers (RDMSR and WRMSR support)
+               pae                             :  1, // Physical Address Extensions
+               mce                             :  1, // Machine Check Exception
+               cx8                             :  1, // CMPXCHG8B instruction
+               apic                            :  1, // APIC on-chip
+                                               :  1, // Reserved
+               sep                             :  1, // SYSENTER, SYSEXIT, and associated MSRs
+               mtrr                            :  1, // Memory Type Range Registers
+               pge                             :  1, // Page Global Extensions
+               mca                             :  1, // Machine Check Architecture
+               cmov                            :  1, // Conditional Move Instruction
+               pat                             :  1, // Page Attribute Table
+               pse36                           :  1, // Page Size Extension (36-bit)
+               psn                             :  1, // Processor Serial Number
+               clflush                         :  1, // CLFLUSH instruction
+                                               :  1, // Reserved
+               ds                              :  1, // Debug Store
+               acpi                            :  1, // Thermal monitor and clock control
+               mmx                             :  1, // MMX instructions
+               fxsr                            :  1, // FXSAVE and FXRSTOR instructions
+               sse                             :  1, // SSE instructions
+               sse2                            :  1, // SSE2 instructions
+               selfsnoop                       :  1, // Self Snoop
+               htt                             :  1, // Hyper-threading
+               tm                              :  1, // Thermal Monitor
+               ia64                            :  1, // Legacy IA-64 (Itanium) support bit, now reserved
+               pbe                             :  1; // Pending Break Enable
+};
+
+/*
+ * Leaf 0x2
+ * Intel cache and TLB information one-byte descriptors
+ */
+
+struct leaf_0x2_0 {
+       // eax
+       u32     iteration_count                 :  8, // Number of times this leaf must be queried
+               desc1                           :  8, // Descriptor #1
+               desc2                           :  8, // Descriptor #2
+               desc3                           :  7, // Descriptor #3
+               eax_invalid                     :  1; // Descriptors 1-3 are invalid if set
+       // ebx
+       u32     desc4                           :  8, // Descriptor #4
+               desc5                           :  8, // Descriptor #5
+               desc6                           :  8, // Descriptor #6
+               desc7                           :  7, // Descriptor #7
+               ebx_invalid                     :  1; // Descriptors 4-7 are invalid if set
+       // ecx
+       u32     desc8                           :  8, // Descriptor #8
+               desc9                           :  8, // Descriptor #9
+               desc10                          :  8, // Descriptor #10
+               desc11                          :  7, // Descriptor #11
+               ecx_invalid                     :  1; // Descriptors 8-11 are invalid if set
+       // edx
+       u32     desc12                          :  8, // Descriptor #12
+               desc13                          :  8, // Descriptor #13
+               desc14                          :  8, // Descriptor #14
+               desc15                          :  7, // Descriptor #15
+               edx_invalid                     :  1; // Descriptors 12-15 are invalid if set
+};
+
+/*
+ * Leaf 0x4
+ * Intel deterministic cache parameters
+ */
+
+struct leaf_0x4_n {
+       // eax
+       u32     cache_type                      :  5, // Cache type field
+               cache_level                     :  3, // Cache level (1-based)
+               cache_self_init                 :  1, // Self-initializing cache level
+               fully_associative               :  1, // Fully-associative cache
+                                               :  4, // Reserved
+               num_threads_sharing             : 12, // Number logical CPUs sharing this cache
+               num_cores_on_die                :  6; // Number of cores in the physical package
+       // ebx
+       u32     cache_linesize                  : 12, // System coherency line size (0-based)
+               cache_npartitions               : 10, // Physical line partitions (0-based)
+               cache_nways                     : 10; // Ways of associativity (0-based)
+       // ecx
+       u32     cache_nsets                     : 31, // Cache number of sets (0-based)
+                                               :  1; // Reserved
+       // edx
+       u32     wbinvd_rll_no_guarantee         :  1, // WBINVD/INVD not guaranteed for Remote Lower-Level caches
+               ll_inclusive                    :  1, // Cache is inclusive of Lower-Level caches
+               complex_indexing                :  1, // Not a direct-mapped cache (complex function)
+                                               : 29; // Reserved
+};
+
+#define LEAF_0x4_SUBLEAF_N_FIRST               0
+#define LEAF_0x4_SUBLEAF_N_LAST                        31
+
+/*
+ * Leaf 0x5
+ * MONITOR/MWAIT instructions
+ */
+
+struct leaf_0x5_0 {
+       // eax
+       u32     min_mon_size                    : 16, // Smallest monitor-line size, in bytes
+                                               : 16; // Reserved
+       // ebx
+       u32     max_mon_size                    : 16, // Largest monitor-line size, in bytes
+                                               : 16; // Reserved
+       // ecx
+       u32     mwait_ext                       :  1, // MONITOR/MWAIT extensions
+               mwait_irq_break                 :  1, // Interrupts as a break event for MWAIT
+                                               : 30; // Reserved
+       // edx
+       u32     n_c0_substates                  :  4, // Number of C0 sub C-states
+               n_c1_substates                  :  4, // Number of C1 sub C-states
+               n_c2_substates                  :  4, // Number of C2 sub C-states
+               n_c3_substates                  :  4, // Number of C3 sub C-states
+               n_c4_substates                  :  4, // Number of C4 sub C-states
+               n_c5_substates                  :  4, // Number of C5 sub C-states
+               n_c6_substates                  :  4, // Number of C6 sub C-states
+               n_c7_substates                  :  4; // Number of C7 sub C-states
+};
+
+/*
+ * Leaf 0x6
+ * Thermal and power management
+ */
+
+struct leaf_0x6_0 {
+       // eax
+       u32     digital_temp                    :  1, // Digital temperature sensor
+               turbo_boost                     :  1, // Intel Turbo Boost
+               lapic_timer_always_on           :  1, // Always-Running APIC Timer (not affected by p-state)
+                                               :  1, // Reserved
+               power_limit_event               :  1, // Power Limit Notification (PLN) event
+               ecmd                            :  1, // Clock modulation duty cycle extension
+               package_thermal                 :  1, // Package thermal management
+               hwp_base_regs                   :  1, // HWP (Hardware P-states) base registers
+               hwp_notify                      :  1, // HWP notification (IA32_HWP_INTERRUPT MSR)
+               hwp_activity_window             :  1, // HWP activity window (IA32_HWP_REQUEST[bits 41:32])
+               hwp_energy_perf_pr              :  1, // HWP Energy Performance Preference
+               hwp_package_req                 :  1, // HWP Package Level Request
+                                               :  1, // Reserved
+               hdc_base_regs                   :  1, // HDC base registers
+               turbo_boost_3_0                 :  1, // Intel Turbo Boost Max 3.0
+               hwp_capabilities                :  1, // HWP Highest Performance change
+               hwp_peci_override               :  1, // HWP PECI override
+               hwp_flexible                    :  1, // Flexible HWP
+               hwp_fast                        :  1, // IA32_HWP_REQUEST MSR fast access mode
+               hw_feedback                     :  1, // HW_FEEDBACK MSRs
+               hwp_ignore_idle                 :  1, // Ignoring idle logical CPU HWP request is supported
+                                               :  1, // Reserved
+               hwp_ctl                         :  1, // IA32_HWP_CTL MSR
+               thread_director                 :  1, // Intel thread director
+               therm_interrupt_bit25           :  1, // IA32_THERM_INTERRUPT MSR bit 25
+                                               :  7; // Reserved
+       // ebx
+       u32     n_therm_thresholds              :  4, // Digital thermometer thresholds
+                                               : 28; // Reserved
+       // ecx
+       u32     aperf_mperf                     :  1, // MPERF/APERF MSRs (effective frequency interface)
+                                               :  2, // Reserved
+               energy_perf_bias                :  1, // IA32_ENERGY_PERF_BIAS MSR
+                                               :  4, // Reserved
+               thrd_director_nclasses          :  8, // Number of classes, Intel thread director
+                                               : 16; // Reserved
+       // edx
+       u32     perfcap_reporting               :  1, // Performance capability reporting
+               encap_reporting                 :  1, // Energy efficiency capability reporting
+                                               :  6, // Reserved
+               feedback_sz                     :  4, // Feedback interface structure size, in 4K pages
+                                               :  4, // Reserved
+               this_lcpu_hwfdbk_idx            : 16; // This logical CPU hardware feedback interface index
+};
+
+/*
+ * Leaf 0x7
+ * Extended CPU features
+ */
+
+struct leaf_0x7_0 {
+       // eax
+       u32     leaf7_n_subleaves               : 32; // Number of leaf 0x7 subleaves
+       // ebx
+       u32     fsgsbase                        :  1, // FSBASE/GSBASE read/write
+               tsc_adjust                      :  1, // IA32_TSC_ADJUST MSR
+               sgx                             :  1, // Intel SGX (Software Guard Extensions)
+               bmi1                            :  1, // Bit manipulation extensions group 1
+               hle                             :  1, // Hardware Lock Elision
+               avx2                            :  1, // AVX2 instruction set
+               fdp_excptn_only                 :  1, // FPU Data Pointer updated only on x87 exceptions
+               smep                            :  1, // Supervisor Mode Execution Protection
+               bmi2                            :  1, // Bit manipulation extensions group 2
+               erms                            :  1, // Enhanced REP MOVSB/STOSB
+               invpcid                         :  1, // INVPCID instruction (Invalidate Processor Context ID)
+               rtm                             :  1, // Intel restricted transactional memory
+               pqm                             :  1, // Intel RDT-CMT / AMD Platform-QoS cache monitoring
+               zero_fcs_fds                    :  1, // Deprecated FPU CS/DS (stored as zero)
+               mpx                             :  1, // Intel memory protection extensions
+               rdt_a                           :  1, // Intel RDT / AMD Platform-QoS Enforcement
+               avx512f                         :  1, // AVX-512 foundation instructions
+               avx512dq                        :  1, // AVX-512 double/quadword instructions
+               rdseed                          :  1, // RDSEED instruction
+               adx                             :  1, // ADCX/ADOX instructions
+               smap                            :  1, // Supervisor mode access prevention
+               avx512ifma                      :  1, // AVX-512 integer fused multiply add
+                                               :  1, // Reserved
+               clflushopt                      :  1, // CLFLUSHOPT instruction
+               clwb                            :  1, // CLWB instruction
+               intel_pt                        :  1, // Intel processor trace
+               avx512pf                        :  1, // AVX-512 prefetch instructions
+               avx512er                        :  1, // AVX-512 exponent/reciprocal instructions
+               avx512cd                        :  1, // AVX-512 conflict detection instructions
+               sha                             :  1, // SHA/SHA256 instructions
+               avx512bw                        :  1, // AVX-512 byte/word instructions
+               avx512vl                        :  1; // AVX-512 VL (128/256 vector length) extensions
+       // ecx
+       u32     prefetchwt1                     :  1, // PREFETCHWT1 (Intel Xeon Phi only)
+               avx512vbmi                      :  1, // AVX-512 Vector byte manipulation instructions
+               umip                            :  1, // User mode instruction protection
+               pku                             :  1, // Protection keys for user-space
+               ospke                           :  1, // OS protection keys enable
+               waitpkg                         :  1, // WAITPKG instructions
+               avx512_vbmi2                    :  1, // AVX-512 vector byte manipulation instructions group 2
+               cet_ss                          :  1, // CET shadow stack features
+               gfni                            :  1, // Galois field new instructions
+               vaes                            :  1, // Vector AES instructions
+               vpclmulqdq                      :  1, // VPCLMULQDQ 256-bit instruction
+               avx512_vnni                     :  1, // Vector neural network instructions
+               avx512_bitalg                   :  1, // AVX-512 bitwise algorithms
+               tme                             :  1, // Intel total memory encryption
+               avx512_vpopcntdq                :  1, // AVX-512: POPCNT for vectors of DWORD/QWORD
+                                               :  1, // Reserved
+               la57                            :  1, // 57-bit linear addresses (five-level paging)
+               mawau_val_lm                    :  5, // BNDLDX/BNDSTX MAWAU value in 64-bit mode
+               rdpid                           :  1, // RDPID instruction
+               key_locker                      :  1, // Intel key locker
+               bus_lock_detect                 :  1, // OS bus-lock detection
+               cldemote                        :  1, // CLDEMOTE instruction
+                                               :  1, // Reserved
+               movdiri                         :  1, // MOVDIRI instruction
+               movdir64b                       :  1, // MOVDIR64B instruction
+               enqcmd                          :  1, // Enqueue stores (ENQCMD{,S})
+               sgx_lc                          :  1, // Intel SGX launch configuration
+               pks                             :  1; // Protection keys for supervisor-mode pages
+       // edx
+       u32                                     :  1, // Reserved
+               sgx_keys                        :  1, // Intel SGX attestation services
+               avx512_4vnniw                   :  1, // AVX-512 neural network instructions
+               avx512_4fmaps                   :  1, // AVX-512 multiply accumulation single precision
+               fsrm                            :  1, // Fast short REP MOV
+               uintr                           :  1, // User interrupts
+                                               :  2, // Reserved
+               avx512_vp2intersect             :  1, // VP2INTERSECT{D,Q} instructions
+               srdbs_ctrl                      :  1, // SRBDS mitigation MSR
+               md_clear                        :  1, // VERW MD_CLEAR microcode
+               rtm_always_abort                :  1, // XBEGIN (RTM transaction) always aborts
+                                               :  1, // Reserved
+               tsx_force_abort                 :  1, // MSR TSX_FORCE_ABORT, RTM_ABORT bit
+               serialize                       :  1, // SERIALIZE instruction
+               hybrid_cpu                      :  1, // The CPU is identified as a 'hybrid part'
+               tsxldtrk                        :  1, // TSX suspend/resume load address tracking
+                                               :  1, // Reserved
+               pconfig                         :  1, // PCONFIG instruction
+               arch_lbr                        :  1, // Intel architectural LBRs
+               cet_ibt                         :  1, // CET indirect branch tracking
+                                               :  1, // Reserved
+               amx_bf16                        :  1, // AMX-BF16: tile bfloat16
+               avx512_fp16                     :  1, // AVX-512 FP16 instructions
+               amx_tile                        :  1, // AMX-TILE: tile architecture
+               amx_int8                        :  1, // AMX-INT8: tile 8-bit integer
+               spec_ctrl                       :  1, // Speculation Control (IBRS/IBPB: indirect branch restrictions)
+               intel_stibp                     :  1, // Single thread indirect branch predictors
+               flush_l1d                       :  1, // FLUSH L1D cache: IA32_FLUSH_CMD MSR
+               arch_capabilities               :  1, // Intel IA32_ARCH_CAPABILITIES MSR
+               core_capabilities               :  1, // IA32_CORE_CAPABILITIES MSR
+               spec_ctrl_ssbd                  :  1; // Speculative store bypass disable
+};
+
+struct leaf_0x7_1 {
+       // eax
+       u32                                     :  4, // Reserved
+               avx_vnni                        :  1, // AVX-VNNI instructions
+               avx512_bf16                     :  1, // AVX-512 bfloat16 instructions
+               lass                            :  1, // Linear address space separation
+               cmpccxadd                       :  1, // CMPccXADD instructions
+               arch_perfmon_ext                :  1, // ArchPerfmonExt: leaf 0x23
+                                               :  1, // Reserved
+               fzrm                            :  1, // Fast zero-length REP MOVSB
+               fsrs                            :  1, // Fast short REP STOSB
+               fsrc                            :  1, // Fast Short REP CMPSB/SCASB
+                                               :  4, // Reserved
+               fred                            :  1, // FRED: Flexible return and event delivery transitions
+               lkgs                            :  1, // LKGS: Load 'kernel' (userspace) GS
+               wrmsrns                         :  1, // WRMSRNS instruction (WRMSR-non-serializing)
+               nmi_src                         :  1, // NMI-source reporting with FRED event data
+               amx_fp16                        :  1, // AMX-FP16: FP16 tile operations
+               hreset                          :  1, // HRESET (Thread director history reset)
+               avx_ifma                        :  1, // Integer fused multiply add
+                                               :  2, // Reserved
+               lam                             :  1, // Linear address masking
+               rd_wr_msrlist                   :  1, // RDMSRLIST/WRMSRLIST instructions
+                                               :  4; // Reserved
+       // ebx
+       u32     intel_ppin                      :  1, // Protected processor inventory number (PPIN{,_CTL} MSRs)
+                                               : 31; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     :  4, // Reserved
+               avx_vnni_int8                   :  1, // AVX-VNNI-INT8 instructions
+               avx_ne_convert                  :  1, // AVX-NE-CONVERT instructions
+                                               :  2, // Reserved
+               amx_complex                     :  1, // AMX-COMPLEX instructions (starting from Granite Rapids)
+                                               :  5, // Reserved
+               prefetchit_0_1                  :  1, // PREFETCHIT0/1 instructions
+                                               :  3, // Reserved
+               cet_sss                         :  1, // CET supervisor shadow stacks safe to use
+                                               : 13; // Reserved
+};
+
+struct leaf_0x7_2 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32     intel_psfd                      :  1, // Intel predictive store forward disable
+               ipred_ctrl                      :  1, // MSR bits IA32_SPEC_CTRL.IPRED_DIS_{U,S}
+               rrsba_ctrl                      :  1, // MSR bits IA32_SPEC_CTRL.RRSBA_DIS_{U,S}
+               ddp_ctrl                        :  1, // MSR bit  IA32_SPEC_CTRL.DDPD_U
+               bhi_ctrl                        :  1, // MSR bit  IA32_SPEC_CTRL.BHI_DIS_S
+               mcdt_no                         :  1, // MCDT mitigation not needed
+               uclock_disable                  :  1, // UC-lock disable
+                                               : 25; // Reserved
+};
+
+/*
+ * Leaf 0x9
+ * Intel DCA (Direct Cache Access)
+ */
+
+struct leaf_0x9_0 {
+       // eax
+       u32     dca_enabled_in_bios             :  1, // DCA is enabled in BIOS
+                                               : 31; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0xa
+ * Intel PMU (Performance Monitoring Unit)
+ */
+
+struct leaf_0xa_0 {
+       // eax
+       u32     pmu_version                     :  8, // Performance monitoring unit version ID
+               num_counters_gp                 :  8, // Number of general-purpose PMU counters per logical CPU
+               bit_width_gp                    :  8, // Bitwidth of PMU general-purpose counters
+               events_mask_len                 :  8; // Length of CPUID(0xa).EBX bit vector
+       // ebx
+       u32     no_core_cycle                   :  1, // Core cycle event not available
+               no_instruction_retired          :  1, // Instruction retired event not available
+               no_reference_cycles             :  1, // Reference cycles event not available
+               no_llc_reference                :  1, // LLC-reference event not available
+               no_llc_misses                   :  1, // LLC-misses event not available
+               no_br_insn_retired              :  1, // Branch instruction retired event not available
+               no_br_misses_retired            :  1, // Branch mispredict retired event not available
+               no_topdown_slots                :  1, // Topdown slots event not available
+               no_backend_bound                :  1, // Topdown backend bound not available
+               no_bad_speculation              :  1, // Topdown bad speculation not available
+               no_frontend_bound               :  1, // Topdown frontend bound not available
+               no_retiring                     :  1, // Topdown retiring not available
+               no_lbr_inserts                  :  1, // LBR inserts not available
+                                               : 19; // Reserved
+       // ecx
+       u32     pmu_fcounters_bitmap            : 32; // Fixed-function PMU counters support bitmap
+       // edx
+       u32     num_counters_fixed              :  5, // Number of fixed PMU counters
+               bitwidth_fixed                  :  8, // Bitwidth of PMU fixed counters
+                                               :  2, // Reserved
+               anythread_deprecation           :  1, // AnyThread mode deprecation
+                                               : 16; // Reserved
+};
+
+/*
+ * Leaf 0xb
+ * CPU extended topology v1
+ */
+
+struct leaf_0xb_n {
+       // eax
+       u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
+                                               : 27; // Reserved
+       // ebx
+       u32     domain_lcpus_count              : 16, // Logical CPUs count across all instances of this domain
+                                               : 16; // Reserved
+       // ecx
+       u32     domain_nr                       :  8, // This domain level (subleaf ID)
+               domain_type                     :  8, // This domain type
+                                               : 16; // Reserved
+       // edx
+       u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
+};
+
+#define LEAF_0xb_SUBLEAF_N_FIRST               0
+#define LEAF_0xb_SUBLEAF_N_LAST                        1
+
+/*
+ * Leaf 0xd
+ * CPU extended state
+ */
+
+struct leaf_0xd_0 {
+       // eax
+       u32     xcr0_x87                        :  1, // XCR0.X87
+               xcr0_sse                        :  1, // XCR0.SSE
+               xcr0_avx                        :  1, // XCR0.AVX
+               xcr0_mpx_bndregs                :  1, // XCR0.BNDREGS: MPX BND0-BND3 registers
+               xcr0_mpx_bndcsr                 :  1, // XCR0.BNDCSR: MPX BNDCFGU/BNDSTATUS registers
+               xcr0_avx512_opmask              :  1, // XCR0.OPMASK: AVX-512 k0-k7 registers
+               xcr0_avx512_zmm_hi256           :  1, // XCR0.ZMM_Hi256: AVX-512 ZMM0->ZMM7/15 registers
+               xcr0_avx512_hi16_zmm            :  1, // XCR0.HI16_ZMM: AVX-512 ZMM16->ZMM31 registers
+                                               :  1, // Reserved
+               xcr0_pkru                       :  1, // XCR0.PKRU: XSAVE PKRU registers
+                                               :  1, // Reserved
+               xcr0_cet_u                      :  1, // XCR0.CET_U: CET user state
+               xcr0_cet_s                      :  1, // XCR0.CET_S: CET supervisor state
+                                               :  4, // Reserved
+               xcr0_tileconfig                 :  1, // XCR0.TILECONFIG: AMX can manage TILECONFIG
+               xcr0_tiledata                   :  1, // XCR0.TILEDATA: AMX can manage TILEDATA
+                                               : 13; // Reserved
+       // ebx
+       u32     xsave_sz_xcr0                   : 32; // XSAVE/XRSTOR area byte size, for XCR0 enabled features
+       // ecx
+       u32     xsave_sz_max                    : 32; // XSAVE/XRSTOR area max byte size, all CPU features
+       // edx
+       u32                                     : 30, // Reserved
+               xcr0_lwp                        :  1, // AMD XCR0.LWP: Light-weight Profiling
+                                               :  1; // Reserved
+};
+
+struct leaf_0xd_1 {
+       // eax
+       u32     xsaveopt                        :  1, // XSAVEOPT instruction
+               xsavec                          :  1, // XSAVEC instruction
+               xgetbv1                         :  1, // XGETBV instruction with ECX = 1
+               xsaves                          :  1, // XSAVES/XRSTORS instructions (and XSS MSR)
+               xfd                             :  1, // Extended feature disable
+                                               : 27; // Reserved
+       // ebx
+       u32     xsave_sz_xcr0_xss               : 32; // XSAVES/XSAVEC area byte size, for XCR0|XSS enabled features
+       // ecx
+       u32                                     :  8, // Reserved
+               xss_pt                          :  1, // PT state
+                                               :  1, // Reserved
+               xss_pasid                       :  1, // PASID state
+               xss_cet_u                       :  1, // CET user state
+               xss_cet_p                       :  1, // CET supervisor state
+               xss_hdc                         :  1, // HDC state
+               xss_uintr                       :  1, // UINTR state
+               xss_lbr                         :  1, // LBR state
+               xss_hwp                         :  1, // HWP state
+                                               : 15; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0xd_n {
+       // eax
+       u32     xsave_sz                        : 32; // Subleaf-N feature save area size, in bytes
+       // ebx
+       u32     xsave_offset                    : 32; // Subleaf-N feature save area offset, in bytes
+       // ecx
+       u32     is_xss_bit                      :  1, // Subleaf N describes an XSS bit (otherwise XCR0)
+               compacted_xsave_64byte_aligned  :  1, // When compacted, subleaf-N XSAVE area is 64-byte aligned
+                                               : 30; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+#define LEAF_0xd_SUBLEAF_N_FIRST               2
+#define LEAF_0xd_SUBLEAF_N_LAST                        63
+
+/*
+ * Leaf 0xf
+ * Intel RDT / AMD PQoS resource monitoring
+ */
+
+struct leaf_0xf_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32     core_rmid_max                   : 32; // RMID max within this core (0-based)
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     :  1, // Reserved
+               llc_qos_mon                     :  1, // LLC QoS-monitoring
+                                               : 30; // Reserved
+};
+
+struct leaf_0xf_1 {
+       // eax
+       u32     l3c_qm_bitwidth                 :  8, // L3 QoS-monitoring counter bitwidth (24-based)
+               l3c_qm_overflow_bit             :  1, // QM_CTR MSR bit 61 is an overflow bit
+               io_rdt_cmt                      :  1, // non-CPU agent supporting Intel RDT CMT present
+               io_rdt_mbm                      :  1, // non-CPU agent supporting Intel RDT MBM present
+                                               : 21; // Reserved
+       // ebx
+       u32     l3c_qm_conver_factor            : 32; // QM_CTR MSR conversion factor to bytes
+       // ecx
+       u32     l3c_qm_rmid_max                 : 32; // L3 QoS-monitoring max RMID
+       // edx
+       u32     l3c_qm_occupancy                :  1, // L3 QoS occupancy monitoring
+               l3c_qm_mbm_total                :  1, // L3 QoS total bandwidth monitoring
+               l3c_qm_mbm_local                :  1, // L3 QoS local bandwidth monitoring
+                                               : 29; // Reserved
+};
+
+/*
+ * Leaf 0x10
+ * Intel RDT / AMD PQoS allocation
+ */
+
+struct leaf_0x10_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32                                     :  1, // Reserved
+               cat_l3                          :  1, // L3 Cache Allocation Technology
+               cat_l2                          :  1, // L2 Cache Allocation Technology
+               mba                             :  1, // Memory Bandwidth Allocation
+                                               : 28; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x10_n {
+       // eax
+       u32     cat_cbm_len                     :  5, // L3/L2_CAT capacity bitmask length, minus-one notation
+                                               : 27; // Reserved
+       // ebx
+       u32     cat_units_bitmap                : 32; // L3/L2_CAT allocation units bitmap
+       // ecx
+       u32                                     :  1, // Reserved
+               l3_cat_cos_infreq_updates       :  1, // L3_CAT COS updates should be infrequent
+               cat_cdp_supported               :  1, // L3/L2_CAT Code and Data Prioritization
+               cat_sparse_1s                   :  1, // L3/L2_CAT non-contiguous 1s value
+                                               : 28; // Reserved
+       // edx
+       u32     cat_cos_max                     : 16, // L3/L2_CAT max Class of Service
+                                               : 16; // Reserved
+};
+
+#define LEAF_0x10_SUBLEAF_N_FIRST              1
+#define LEAF_0x10_SUBLEAF_N_LAST               2
+
+struct leaf_0x10_3 {
+       // eax
+       u32     mba_max_delay                   : 12, // Max MBA throttling value; minus-one notation
+                                               : 20; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32     mba_per_thread                  :  1, // Per-thread MBA controls
+                                               :  1, // Reserved
+               mba_delay_linear                :  1, // Delay values are linear
+                                               : 29; // Reserved
+       // edx
+       u32     mba_cos_max                     : 16, // MBA max Class of Service
+                                               : 16; // Reserved
+};
+
+/*
+ * Leaf 0x12
+ * Intel SGX (Software Guard Extensions)
+ */
+
+struct leaf_0x12_0 {
+       // eax
+       u32     sgx1                            :  1, // SGX1 leaf functions
+               sgx2                            :  1, // SGX2 leaf functions
+                                               :  3, // Reserved
+               enclv_leaves                    :  1, // ENCLV leaves
+               encls_leaves                    :  1, // ENCLS leaves
+               enclu_everifyreport2            :  1, // ENCLU leaf EVERIFYREPORT2
+                                               :  2, // Reserved
+               encls_eupdatesvn                :  1, // ENCLS leaf EUPDATESVN
+               enclu_edeccssa                  :  1, // ENCLU leaf EDECCSSA
+                                               : 20; // Reserved
+       // ebx
+       u32     miscselect_exinfo               :  1, // SSA.MISC frame: Enclave #PF and #GP reporting
+               miscselect_cpinfo               :  1, // SSA.MISC frame: Enclave #CP reporting
+                                               : 30; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32     max_enclave_sz_not64            :  8, // Maximum enclave size in non-64-bit mode (log2)
+               max_enclave_sz_64               :  8, // Maximum enclave size in 64-bit mode (log2)
+                                               : 16; // Reserved
+};
+
+struct leaf_0x12_1 {
+       // eax
+       u32     secs_attr_init                  :  1, // Enclave initialized by EINIT
+               secs_attr_debug                 :  1, // Enclave permits debugger read/write
+               secs_attr_mode64bit             :  1, // Enclave runs in 64-bit mode
+                                               :  1, // Reserved
+               secs_attr_provisionkey          :  1, // Provisioning key
+               secs_attr_einittoken_key        :  1, // EINIT token key
+               secs_attr_cet                   :  1, // CET attributes
+               secs_attr_kss                   :  1, // Key Separation and Sharing
+                                               :  2, // Reserved
+               secs_attr_aexnotify             :  1, // Enclave threads: AEX notifications
+                                               : 21; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32     xfrm_x87                        :  1, // Enclave XFRM.X87
+               xfrm_sse                        :  1, // Enclave XFRM.SEE
+               xfrm_avx                        :  1, // Enclave XFRM.AVX
+               xfrm_mpx_bndregs                :  1, // Enclave XFRM.BNDREGS (MPX BND0-BND3 registers)
+               xfrm_mpx_bndcsr                 :  1, // Enclave XFRM.BNDCSR (MPX BNDCFGU/BNDSTATUS registers)
+               xfrm_avx512_opmask              :  1, // Enclave XFRM.OPMASK (AVX-512 k0-k7 registers)
+               xfrm_avx512_zmm_hi256           :  1, // Enclave XFRM.ZMM_Hi256 (AVX-512 ZMM0->ZMM7/15 registers)
+               xfrm_avx512_hi16_zmm            :  1, // Enclave XFRM.HI16_ZMM (AVX-512 ZMM16->ZMM31 registers)
+                                               :  1, // Reserved
+               xfrm_pkru                       :  1, // Enclave XFRM.PKRU (XSAVE PKRU registers)
+                                               :  7, // Reserved
+               xfrm_tileconfig                 :  1, // Enclave XFRM.TILECONFIG (AMX can manage TILECONFIG)
+               xfrm_tiledata                   :  1, // Enclave XFRM.TILEDATA (AMX can manage TILEDATA)
+                                               : 13; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x12_n {
+       // eax
+       u32     subleaf_type                    :  4, // Subleaf type
+                                               :  8, // Reserved
+               epc_sec_base_addr_0             : 20; // EPC section base address, bits[12:31]
+       // ebx
+       u32     epc_sec_base_addr_1             : 20, // EPC section base address, bits[32:51]
+                                               : 12; // Reserved
+       // ecx
+       u32     epc_sec_type                    :  4, // EPC section type / property encoding
+                                               :  8, // Reserved
+               epc_sec_size_0                  : 20; // EPC section size, bits[12:31]
+       // edx
+       u32     epc_sec_size_1                  : 20, // EPC section size, bits[32:51]
+                                               : 12; // Reserved
+};
+
+#define LEAF_0x12_SUBLEAF_N_FIRST              2
+#define LEAF_0x12_SUBLEAF_N_LAST               31
+
+/*
+ * Leaf 0x14
+ * Intel Processor Trace
+ */
+
+struct leaf_0x14_0 {
+       // eax
+       u32     pt_max_subleaf                  : 32; // Maximum leaf 0x14 subleaf
+       // ebx
+       u32     cr3_filtering                   :  1, // IA32_RTIT_CR3_MATCH is accessible
+               psb_cyc                         :  1, // Configurable PSB and cycle-accurate mode
+               ip_filtering                    :  1, // IP/TraceStop filtering; Warm-reset PT MSRs preservation
+               mtc_timing                      :  1, // MTC timing packet; COFI-based packets suppression
+               ptwrite                         :  1, // PTWRITE instruction
+               power_event_trace               :  1, // Power Event Trace
+               psb_pmi_preserve                :  1, // PSB and PMI preservation
+               event_trace                     :  1, // Event Trace packet generation
+               tnt_disable                     :  1, // TNT packet generation disable
+                                               : 23; // Reserved
+       // ecx
+       u32     topa_output                     :  1, // ToPA output scheme
+               topa_multiple_entries           :  1, // ToPA tables can hold multiple entries
+               single_range_output             :  1, // Single-range output
+               trance_transport_output         :  1, // Trace Transport subsystem output
+                                               : 27, // Reserved
+               ip_payloads_lip                 :  1; // IP payloads have LIP values (CS base included)
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x14_1 {
+       // eax
+       u32     num_address_ranges              :  3, // Number of configurable Address Ranges
+                                               : 13, // Reserved
+               mtc_periods_bmp                 : 16; // MTC period encodings bitmap
+       // ebx
+       u32     cycle_thresholds_bmp            : 16, // Cycle Threshold encodings bitmap
+               psb_periods_bmp                 : 16; // Configurable PSB frequency encodings bitmap
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x15
+ * Intel TSC (Time Stamp Counter)
+ */
+
+struct leaf_0x15_0 {
+       // eax
+       u32     tsc_denominator                 : 32; // Denominator of the TSC/'core crystal clock' ratio
+       // ebx
+       u32     tsc_numerator                   : 32; // Numerator of the TSC/'core crystal clock' ratio
+       // ecx
+       u32     cpu_crystal_hz                  : 32; // Core crystal clock nominal frequency, in Hz
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x16
+ * Intel processor frequency
+ */
+
+struct leaf_0x16_0 {
+       // eax
+       u32     cpu_base_mhz                    : 16, // Processor base frequency, in MHz
+                                               : 16; // Reserved
+       // ebx
+       u32     cpu_max_mhz                     : 16, // Processor max frequency, in MHz
+                                               : 16; // Reserved
+       // ecx
+       u32     bus_mhz                         : 16, // Bus reference frequency, in MHz
+                                               : 16; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x17
+ * Intel SoC vendor attributes
+ */
+
+struct leaf_0x17_0 {
+       // eax
+       u32     soc_max_subleaf                 : 32; // Maximum leaf 0x17 subleaf
+       // ebx
+       u32     soc_vendor_id                   : 16, // SoC vendor ID
+               is_vendor_scheme                :  1, // Assigned by industry enumeration scheme (not Intel)
+                                               : 15; // Reserved
+       // ecx
+       u32     soc_proj_id                     : 32; // SoC project ID, assigned by vendor
+       // edx
+       u32     soc_stepping_id                 : 32; // Soc project stepping ID, assigned by vendor
+};
+
+struct leaf_0x17_n {
+       // eax
+       u32     vendor_brand_a                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (0 -> 3)
+       // ebx
+       u32     vendor_brand_b                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (4 -> 7)
+       // ecx
+       u32     vendor_brand_c                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (8 -> 11)
+       // edx
+       u32     vendor_brand_d                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (12 -> 15)
+};
+
+#define LEAF_0x17_SUBLEAF_N_FIRST              1
+#define LEAF_0x17_SUBLEAF_N_LAST               3
+
+/*
+ * Leaf 0x18
+ * Intel deterministic address translation (TLB) parameters
+ */
+
+struct leaf_0x18_n {
+       // eax
+       u32     tlb_max_subleaf                 : 32; // Maximum leaf 0x18 subleaf
+       // ebx
+       u32     tlb_4k_page                     :  1, // TLB supports 4KB-page entries
+               tlb_2m_page                     :  1, // TLB supports 2MB-page entries
+               tlb_4m_page                     :  1, // TLB supports 4MB-page entries
+               tlb_1g_page                     :  1, // TLB supports 1GB-page entries
+                                               :  4, // Reserved
+               hard_partitioning               :  3, // Partitioning between logical CPUs
+                                               :  5, // Reserved
+               n_way_associative               : 16; // Ways of associativity
+       // ecx
+       u32     n_sets                          : 32; // Number of sets
+       // edx
+       u32     tlb_type                        :  5, // Translation cache type (TLB type)
+               tlb_cache_level                 :  3, // Translation cache level (1-based)
+               is_fully_associative            :  1, // Fully-associative
+                                               :  5, // Reserved
+               tlb_max_addressible_ids         : 12, // Max number of addressable IDs - 1
+                                               :  6; // Reserved
+};
+
+#define LEAF_0x18_SUBLEAF_N_FIRST              0
+#define LEAF_0x18_SUBLEAF_N_LAST               31
+
+/*
+ * Leaf 0x19
+ * Intel key locker
+ */
+
+struct leaf_0x19_0 {
+       // eax
+       u32     kl_cpl0_only                    :  1, // CPL0-only key Locker restriction
+               kl_no_encrypt                   :  1, // No-encrypt key locker restriction
+               kl_no_decrypt                   :  1, // No-decrypt key locker restriction
+                                               : 29; // Reserved
+       // ebx
+       u32     aes_keylocker                   :  1, // AES key locker instructions
+                                               :  1, // Reserved
+               aes_keylocker_wide              :  1, // AES wide key locker instructions
+                                               :  1, // Reserved
+               kl_msr_iwkey                    :  1, // Key locker MSRs and IWKEY backups
+                                               : 27; // Reserved
+       // ecx
+       u32     loadiwkey_no_backup             :  1, // LOADIWKEY NoBackup parameter
+               iwkey_rand                      :  1, // IWKEY randomization
+                                               : 30; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x1a
+ * Intel hybrid CPUs identification (e.g. Atom, Core)
+ */
+
+struct leaf_0x1a_0 {
+       // eax
+       u32     core_native_model               : 24, // This core's native model ID
+               core_type                       :  8; // This core's type
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x1b
+ * Intel PCONFIG (Platform configuration)
+ */
+
+struct leaf_0x1b_n {
+       // eax
+       u32     pconfig_subleaf_type            : 12, // CPUID 0x1b subleaf type
+                                               : 20; // Reserved
+       // ebx
+       u32     pconfig_target_id_x             : 32; // A supported PCONFIG target ID
+       // ecx
+       u32     pconfig_target_id_y             : 32; // A supported PCONFIG target ID
+       // edx
+       u32     pconfig_target_id_z             : 32; // A supported PCONFIG target ID
+};
+
+#define LEAF_0x1b_SUBLEAF_N_FIRST              0
+#define LEAF_0x1b_SUBLEAF_N_LAST               31
+
+/*
+ * Leaf 0x1c
+ * Intel LBR (Last Branch Record)
+ */
+
+struct leaf_0x1c_0 {
+       // eax
+       u32     lbr_depth_mask                  :  8, // Max LBR stack depth bitmask
+                                               : 22, // Reserved
+               lbr_deep_c_reset                :  1, // LBRs maybe cleared on MWAIT C-state > C1
+               lbr_ip_is_lip                   :  1; // LBR IP contain Last IP (otherwise effective IP)
+       // ebx
+       u32     lbr_cpl                         :  1, // CPL filtering
+               lbr_branch_filter               :  1, // Branch filtering
+               lbr_call_stack                  :  1, // Call-stack mode
+                                               : 29; // Reserved
+       // ecx
+       u32     lbr_mispredict                  :  1, // Branch misprediction bit
+               lbr_timed_lbr                   :  1, // Timed LBRs (CPU cycles since last LBR entry)
+               lbr_branch_type                 :  1, // Branch type field
+                                               : 13, // Reserved
+               lbr_events_gpc_bmp              :  4, // PMU-events logging support
+                                               : 12; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x1d
+ * Intel AMX (Advanced Matrix Extensions) tile information
+ */
+
+struct leaf_0x1d_0 {
+       // eax
+       u32     amx_max_palette                 : 32; // Highest palette ID / subleaf ID
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x1d_1 {
+       // eax
+       u32     amx_palette_size                : 16, // AMX palette total tiles size, in bytes
+               amx_tile_size                   : 16; // AMX single tile's size, in bytes
+       // ebx
+       u32     amx_tile_row_size               : 16, // AMX tile single row's size, in bytes
+               amx_palette_nr_tiles            : 16; // AMX palette number of tiles
+       // ecx
+       u32     amx_tile_nr_rows                : 16, // AMX tile max number of rows
+                                               : 16; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x1e
+ * Intel TMUL (Tile-matrix Multiply)
+ */
+
+struct leaf_0x1e_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32     tmul_maxk                       :  8, // TMUL unit maximum height, K (rows or columns)
+               tmul_maxn                       : 16, // TMUL unit maximum SIMD dimension, N (column bytes)
+                                               :  8; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x1f
+ * Intel extended topology v2
+ */
+
+struct leaf_0x1f_n {
+       // eax
+       u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
+                                               : 27; // Reserved
+       // ebx
+       u32     domain_lcpus_count              : 16, // Logical CPUs count across all instances of this domain
+                                               : 16; // Reserved
+       // ecx
+       u32     domain_level                    :  8, // This domain level (subleaf ID)
+               domain_type                     :  8, // This domain type
+                                               : 16; // Reserved
+       // edx
+       u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
+};
+
+#define LEAF_0x1f_SUBLEAF_N_FIRST              0
+#define LEAF_0x1f_SUBLEAF_N_LAST               5
+
+/*
+ * Leaf 0x20
+ * Intel HRESET (History Reset)
+ */
+
+struct leaf_0x20_0 {
+       // eax
+       u32     hreset_nr_subleaves             : 32; // CPUID 0x20 max subleaf + 1
+       // ebx
+       u32     hreset_thread_director          :  1, // Intel thread director HRESET
+                                               : 31; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x21
+ * Intel TD (Trust Domain)
+ */
+
+struct leaf_0x21_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32     tdx_vendorid_0                  : 32; // TDX vendor ID string bytes 0 - 3
+       // ecx
+       u32     tdx_vendorid_2                  : 32; // CPU vendor ID string bytes 8 - 11
+       // edx
+       u32     tdx_vendorid_1                  : 32; // CPU vendor ID string bytes 4 - 7
+};
+
+/*
+ * Leaf 0x23
+ * Intel Architectural Performance Monitoring Extended (ArchPerfmonExt)
+ */
+
+struct leaf_0x23_0 {
+       // eax
+       u32     subleaf_0                       :  1, // Subleaf 0, this subleaf
+               counters_subleaf                :  1, // Subleaf 1, PMU counter bitmaps
+               acr_subleaf                     :  1, // Subleaf 2, Auto Counter Reload bitmaps
+               events_subleaf                  :  1, // Subleaf 3, PMU event bitmaps
+               pebs_caps_subleaf               :  1, // Subleaf 4, PEBS capabilities
+               pebs_subleaf                    :  1, // Subleaf 5, Arch PEBS bitmaps
+                                               : 26; // Reserved
+       // ebx
+       u32     unitmask2                       :  1, // IA32_PERFEVTSELx MSRs UnitMask2 bit
+               eq                              :  1, // IA32_PERFEVTSELx MSRs EQ bit
+               rdpmc_user_disable              :  1, // RDPMC userspace disable
+                                               : 29; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x23_1 {
+       // eax
+       u32     gp_counters                     : 32; // Bitmap of general-purpose PMU counters
+       // ebx
+       u32     fixed_counters                  : 32; // Bitmap of fixed PMU counters
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x23_2 {
+       // eax
+       u32     acr_gp_reload                   : 32; // Bitmap of general-purpose counters that can be reloaded
+       // ebx
+       u32     acr_fixed_reload                : 32; // Bitmap of fixed counters that can be reloaded
+       // ecx
+       u32     acr_gp_trigger                  : 32; // Bitmap of general-purpose counters that can trigger reloads
+       // edx
+       u32     acr_fixed_trigger               : 32; // Bitmap of fixed counters that can trigger reloads
+};
+
+struct leaf_0x23_3 {
+       // eax
+       u32     core_cycles_evt                 :  1, // Core cycles event
+               insn_retired_evt                :  1, // Instructions retired event
+               ref_cycles_evt                  :  1, // Reference cycles event
+               llc_refs_evt                    :  1, // Last-level cache references event
+               llc_misses_evt                  :  1, // Last-level cache misses event
+               br_insn_ret_evt                 :  1, // Branch instruction retired event
+               br_mispr_evt                    :  1, // Branch mispredict retired event
+               td_slots_evt                    :  1, // Topdown slots event
+               td_backend_bound_evt            :  1, // Topdown backend bound event
+               td_bad_spec_evt                 :  1, // Topdown bad speculation event
+               td_frontend_bound_evt           :  1, // Topdown frontend bound event
+               td_retiring_evt                 :  1, // Topdown retiring event
+                                               : 20; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x23_4 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32                                     :  3, // Reserved
+               allow_in_record                 :  1, // ALLOW_IN_RECORD bit in MSRs
+               counters_gp                     :  1, // Counters group sub-group general-purpose counters
+               counters_fixed                  :  1, // Counters group sub-group fixed-function counters
+               counters_metrics                :  1, // Counters group sub-group performance metrics
+                                               :  1, // Reserved
+               lbr                             :  2, // LBR group
+                                               :  6, // Reserved
+               xer                             :  8, // XER group
+                                               :  5, // Reserved
+               gpr                             :  1, // GPR group
+               aux                             :  1, // AUX group
+                                               :  1; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x23_5 {
+       // eax
+       u32     pebs_gp                         : 32; // Architectural PEBS general-purpose counters
+       // ebx
+       u32     pebs_pdist_gp                   : 32; // Architectural PEBS PDIST general-purpose counters
+       // ecx
+       u32     pebs_fixed                      : 32; // Architectural PEBS fixed counters
+       // edx
+       u32     pebs_pdist_fixed                : 32; // Architectural PEBS PDIST fixed counters
+};
+
+/*
+ * Leaf 0x40000000
+ * Maximum hypervisor leaf + hypervisor vendor string
+ */
+
+struct leaf_0x40000000_0 {
+       // eax
+       u32     max_hyp_leaf                    : 32; // Maximum hypervisor leaf
+       // ebx
+       u32     hypervisor_id_0                 : 32; // Hypervisor ID string bytes 0 - 3
+       // ecx
+       u32     hypervisor_id_1                 : 32; // Hypervisor ID string bytes 4 - 7
+       // edx
+       u32     hypervisor_id_2                 : 32; // Hypervisor ID string bytes 8 - 11
+};
+
+/*
+ * Leaf 0x4c780001
+ * Linux-defined synthetic feature flags
+ */
+
+struct leaf_0x4c780001_0 {
+       // eax
+       u32     cxmmx                           :  1, // Cyrix MMX extensions
+               k6_mtrr                         :  1, // AMD K6 nonstandard MTRRs
+               cyrix_arr                       :  1, // Cyrix ARRs (= MTRRs)
+               centaur_mcr                     :  1, // Centaur MCRs (= MTRRs)
+               k8                              :  1, // Opteron, Athlon64
+               zen5                            :  1, // CPU based on Zen5 micro-architecture
+               zen6                            :  1, // CPU based on Zen6 micro-architecture
+                                               :  1, // Reserved
+               constant_tsc                    :  1, // TSC ticks at a constant rate
+               up                              :  1, // SMP kernel running on UP
+               art                             :  1, // Always running timer (ART)
+               arch_perfmon                    :  1, // Intel Architectural PerfMon
+               pebs                            :  1, // Precise-Event Based Sampling
+               bts                             :  1, // Branch Trace Store
+               syscall32                       :  1, // SYSCALL in IA32 userspace
+               sysenter32                      :  1, // SYSENTER in IA32 userspace
+               rep_good                        :  1, // REP microcode works well
+               amd_lbr_v2                      :  1, // AMD Last Branch Record Extension version 2
+               clear_cpu_buf                   :  1, // Clear CPU buffers using VERW
+               acc_power                       :  1, // AMD Accumulated Power Mechanism
+               nopl                            :  1, // The NOPL instructions
+               always                          :  1, // Always-present feature
+               xtopology                       :  1, // CPU topology enumeration extensions
+               tsc_reliable                    :  1, // TSC is known to be reliable
+               nonstop_tsc                     :  1, // TSC does not stop in C states
+               cpuid                           :  1, // CPU has the CPUID instruction
+               extd_apicid                     :  1, // Extended APIC ID (8 bits)
+               amd_dcm                         :  1, // AMD multi-node processor
+               aperfmperf                      :  1, // APERF/MPERF MSRs: P-State hardware coordination feedback
+               rapl                            :  1, // AMD/Hygon RAPL interface
+               nonstop_tsc_s3                  :  1, // TSC does not stop in S3 state
+               tsc_known_freq                  :  1; // TSC has known frequency
+       // ebx
+       u32     ring3mwait                      :  1, // Ring 3 MONITOR/MWAIT instructions
+               cpuid_fault                     :  1, // Intel CPUID faulting
+               cpb                             :  1, // AMD Core Performance Boost
+               epb                             :  1, // IA32_ENERGY_PERF_BIAS support
+               cat_l3                          :  1, // Cache Allocation Technology L3
+               cat_l2                          :  1, // Cache Allocation Technology L2
+               cdp_l3                          :  1, // Code and Data Prioritization L3
+               tdx_host_platform               :  1, // Platform supports being a TDX host
+               hw_pstate                       :  1, // AMD Hardware P-state control
+               proc_feedback                   :  1, // AMD Processor Feedback Interface
+               xcompacted                      :  1, // Use compacted XSTATE (XSAVES or XSAVEC)
+               pti                             :  1, // Kernel Page Table Isolation enabled
+               kernel_ibrs                     :  1, // Set/clear IBRS on kernel entry/exit
+               rsb_vmexit                      :  1, // Fill RSB on VM-Exit
+               intel_ppin                      :  1, // Intel Processor Inventory Number
+               cdp_l2                          :  1, // Code and Data Prioritization L2
+               msr_spec_ctrl                   :  1, // MSR SPEC_CTRL is implemented
+               ssbd                            :  1, // Speculative Store Bypass Disable
+               mba                             :  1, // Memory Bandwidth Allocation
+               rsb_ctxsw                       :  1, // Fill RSB on context switches
+               perfmon_v2                      :  1, // AMD Performance Monitoring Version 2
+                                               :  1, // Reserved
+               use_ibrs_fw                     :  1, // Use IBRS during runtime firmware calls
+               ss_bypass_disable               :  1, // Disable Speculative Store Bypass
+               ls_cfg_ssbd                     :  1, // AMD SSBD implementation via LS_CFG MSR
+               ibrs                            :  1, // Indirect Branch Restricted Speculation
+               ibpb                            :  1, // Indirect Branch Prediction Barrier (without RSB flush guarantee)
+               stibp                           :  1, // Single Thread Indirect Branch Predictors
+               zen                             :  1, // Generic flag for all Zen and newer
+               l1tf_pteinv                     :  1, // L1TF workaround PTE inversion
+               ibrs_enhanced                   :  1, // Enhanced IBRS
+               msr_ia32_feat_ctl               :  1; // MSR IA32_FEAT_CTL configured
+       // ecx
+       u32     tpr_shadow                      :  1, // Intel TPR Shadow
+               flexpriority                    :  1, // Intel FlexPriority
+               ept                             :  1, // Intel Extended Page Table
+               vpid                            :  1, // Intel Virtual Processor ID
+               coherency_sfw_no                :  1, // SNP cache coherency software work around not needed
+                                               : 10, // Reserved
+               vmmcall                         :  1, // Prefer VMMCALL to VMCALL
+               xenpv                           :  1, // Xen paravirtual guest
+               ept_ad                          :  1, // Intel Extended Page Table access-dirty bit
+               VMCALL                          :  1, // Hypervisor supports the VMCALL instruction
+               vmw_vmmcall                     :  1, // VMware prefers the VMMCALL instruction
+               pvunlock                        :  1, // PV unlock function
+               vcpupreempt                     :  1, // PV vcpu_is_preempted function
+               tdx_guest                       :  1, // Intel Trust Domain Extensions Guest
+                                               :  9; // Reserved
+       // edx
+       u32     cqm_llc                         :  1, // LLC QoS
+               cqm_occup_llc                   :  1, // LLC occupancy monitoring
+               cqm_mbm_total                   :  1, // LLC Total MBM monitoring
+               cqm_mbm_local                   :  1, // LLC Local MBM monitoring
+               fence_swapgs_user               :  1, // LFENCE in user entry SWAPGS path
+               fence_swapgs_kernel             :  1, // LFENCE in kernel entry SWAPGS path
+               split_lock_detect               :  1, // #AC for split lock
+               per_thread_mba                  :  1, // Per-thread Memory Bandwidth Allocation
+               sgx1                            :  1, // SGX Basic
+               sgx2                            :  1, // SGX Enclave Dynamic Memory Management (EDMM)
+               entry_ibpb                      :  1, // Issue an IBPB on kernel entry
+               rrsba_ctrl                      :  1, // RET prediction control
+               retpoline                       :  1, // Generic Retpoline mitigation for Spectre variant 2
+               retpoline_lfence                :  1, // Use LFENCE for Spectre variant 2
+               rethunk                         :  1, // Use Return THUNK
+               unret                           :  1, // AMD BTB untrain return
+               use_ibpb_fw                     :  1, // Use IBPB during runtime firmware calls
+               rsb_vmexit_lite                 :  1, // Fill RSB on VM exit when EIBRS is enabled
+               sgx_edeccssa                    :  1, // SGX EDECCSSA user leaf function
+               call_depth                      :  1, // Call depth tracking for RSB stuffing
+               msr_tsx_ctrl                    :  1, // MSR IA32_TSX_CTRL (Intel) implemented
+               smba                            :  1, // Slow Memory Bandwidth Allocation
+               bmec                            :  1, // Bandwidth Monitoring Event Configuration
+               user_shstk                      :  1, // Shadow stack support for user mode applications
+               srso                            :  1, // AMD BTB untrain RETs
+               srso_alias                      :  1, // AMD BTB untrain RETs through aliasing
+               ibpb_on_vmexit                  :  1, // Issue an IBPB only on VMEXIT
+               apic_msrs_fence                 :  1, // IA32_TSC_DEADLINE and X2APIC MSRs need fencing
+               zen2                            :  1, // CPU based on Zen2 microarchitecture
+               zen3                            :  1, // CPU based on Zen3 microarchitecture
+               zen4                            :  1, // CPU based on Zen4 microarchitecture
+               zen1                            :  1; // CPU based on Zen1 microarchitecture
+};
+
+struct leaf_0x4c780001_1 {
+       // eax
+       u32     overflow_recov                  :  1, // MCA overflow recovery support
+               succor                          :  1, // Uncorrectable error containment and recovery
+                                               :  1, // Reserved
+               smca                            :  1, // Scalable MCA
+                                               : 28; // Reserved
+       // ebx
+       u32     amd_lbr_pmc_freeze              :  1, // AMD LBR and PMC Freeze
+               clear_bhb_loop                  :  1, // Clear branch history at SYSCALL entry using SW loop
+               bhi_ctrl                        :  1, // BHI_DIS_S HW control available
+               clear_bhb_hw                    :  1, // BHI_DIS_S HW control enabled
+               clear_bhb_vmexit                :  1, // Clear branch history at VMEXIT using SW loop
+               amd_fast_cppc                   :  1, // AMD fast Collaborative Processor Performance Control
+               amd_htr_cores                   :  1, // Heterogeneous Core Topology
+               amd_workload_class              :  1, // Workload Classification
+               prefer_ymm                      :  1, // Avoid ZMM registers due to downclocking
+               apx                             :  1, // Advanced Performance Extensions
+               indirect_thunk_its              :  1, // Use thunk for indirect branches in lower half of cache line
+               tsa_sq_no                       :  1, // AMD CPU not vulnerable to TSA-SQ
+               tsa_l1_no                       :  1, // AMD CPU not vulnerable to TSA-L1
+               clear_cpu_buf_vm                :  1, // Clear CPU buffers using VERW before VMRUN
+               ibpb_exit_to_user               :  1, // Use IBPB on exit-to-userspace, see VMSCAPE bug
+                                               : 17; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x4c780002
+ * Linux-defined synthetic CPU bug flags
+ */
+
+struct leaf_0x4c780002_0 {
+       // eax
+       u32     f00f                            :  1, // Intel F00F
+               fdiv                            :  1, // FPU FDIV
+               coma                            :  1, // Cyrix 6x86 coma
+               amd_tlb_mmatch                  :  1, // AMD Erratum 383
+               amd_apic_c1e                    :  1, // AMD Erratum 400
+               bug_11ap                        :  1, // Bad local APIC aka 11AP
+               fxsave_leak                     :  1, // FXSAVE leaks FOP/FIP/FOP
+               clflush_monitor                 :  1, // AAI65, CLFLUSH required before MONITOR
+               sysret_ss_attrs                 :  1, // SYSRET does not fix up SS attributes
+               espfix                          :  1, // IRET to 16-bit SS corrupts ESP/RSP high bits (x86-32)
+               null_seg                        :  1, // Setting a selector to NULL preserves the base
+               swapgs_fence                    :  1, // SWAPGS without input dep on GS
+               monitor                         :  1, // IPI required to wake up remote CPU
+               amd_e400                        :  1, // CPU is among the affected by Erratum 400
+               cpu_meltdown                    :  1, // CPU affected by meltdown; needs kernel page table isolation
+               spectre_v1                      :  1, // CPU affected by Spectre variant 1 with conditional branches
+               specture_v2                     :  1, // CPU affected by Spectre variant 2 with indirect branches
+               spec_store_bypass               :  1, // CPU affected by speculative store bypass attack
+               l1tf                            :  1, // CPU affected by L1 Terminal Fault
+               mds                             :  1, // CPU affected by Microarchitectural data sampling
+               msbds_only                      :  1, // Microarchitectural data sampling: CPU only affected by the MSDBS variant
+               swapgs                          :  1, // CPU affected by speculation through SWAPGS
+               taa                             :  1, // CPU is affected by TSX Async Abort (TAA)
+               itlb_multihit                   :  1, // CPU may incur MCE during certain page attribute changes
+               srbds                           :  1, // CPU may leak RNG bits if not mitigated
+               mmio_stale_data                 :  1, // CPU affected by Processor MMIO Stale Data vulnerabilities
+                                               :  1, // Reserved
+               retbleed                        :  1, // CPU affected by Retbleed
+               eibrs_pbrsb                     :  1, // EIBRS is vulnerable to Post Barrier RSB Predictions
+               smt_rsb                         :  1, // CPU vulnerable to Cross-Thread Return Address Predictions
+               gds                             :  1, // CPU affected by Gather Data Sampling
+               tdx_pw_mce                      :  1; // CPU may incur #MC if non-TD software does partial write to TDX private memory
+       // ebx
+       u32     srso                            :  1, // AMD SRSO bug
+               div0                            :  1, // AMD DIV0 speculation bug
+               rfds                            :  1, // CPU vulnerable to Register File Data Sampling
+               bhi                             :  1, // CPU affected by Branch History Injection
+               ibpb_no_ret                     :  1, // IBPB omits return target predictions
+               spectre_v2_user                 :  1, // CPU affected by Spectre variant 2 between user processes
+               old_microcode                   :  1, // CPU has old microcode; it must be vulnerable to something
+               its                             :  1, // CPU affected by Indirect Target Selection
+               its_native_only                 :  1, // CPU affected by ITS; VMX is not affected
+               tsa                             :  1, // CPU affected by Transient Scheduler Attacks
+               vmscape                         :  1, // CPU affected by VMSCAPE attacks from guests
+                                               : 21; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80000000
+ * Maximum extended leaf + CPU vendor string
+ */
+
+struct leaf_0x80000000_0 {
+       // eax
+       u32     max_ext_leaf                    : 32; // Maximum extended CPUID leaf
+       // ebx
+       u32     cpu_vendorid_0                  : 32; // Vendor ID string bytes 0 - 3
+       // ecx
+       u32     cpu_vendorid_2                  : 32; // Vendor ID string bytes 8 - 11
+       // edx
+       u32     cpu_vendorid_1                  : 32; // Vendor ID string bytes 4 - 7
+};
+
+/*
+ * Leaf 0x80000001
+ * Extended CPU features
+ */
+
+struct leaf_0x80000001_0 {
+       // eax
+       u32     e_stepping_id                   :  4, // Stepping ID
+               e_base_model                    :  4, // Base processor model
+               e_base_family                   :  4, // Base processor family
+               e_base_type                     :  2, // Base processor type (Transmeta)
+                                               :  2, // Reserved
+               e_ext_model                     :  4, // Extended processor model
+               e_ext_family                    :  8, // Extended processor family
+                                               :  4; // Reserved
+       // ebx
+       u32     brand_id                        : 16, // Brand ID
+                                               : 12, // Reserved
+               pkg_type                        :  4; // Package type
+       // ecx
+       u32     lahf_lm                         :  1, // LAHF and SAHF in 64-bit mode
+               cmp_legacy                      :  1, // Multi-processing legacy mode (No HT)
+               svm                             :  1, // Secure Virtual Machine
+               extapic                         :  1, // Extended APIC space
+               cr8_legacy                      :  1, // LOCK MOV CR0 means MOV CR8
+               lzcnt_abm                       :  1, // LZCNT advanced bit manipulation
+               sse4a                           :  1, // SSE4A support
+               misaligned_sse                  :  1, // Misaligned SSE mode
+               _3dnow_prefetch                 :  1, // 3DNow PREFETCH/PREFETCHW support
+               osvw                            :  1, // OS visible workaround
+               ibs                             :  1, // Instruction based sampling
+               xop                             :  1, // XOP: extended operation (AVX instructions)
+               skinit                          :  1, // SKINIT/STGI support
+               wdt                             :  1, // Watchdog timer support
+                                               :  1, // Reserved
+               lwp                             :  1, // Lightweight profiling
+               fma4                            :  1, // 4-operand FMA instruction
+               tce                             :  1, // Translation cache extension
+                                               :  1, // Reserved
+               nodeid_msr                      :  1, // NodeId MSR (0xc001100c)
+                                               :  1, // Reserved
+               tbm                             :  1, // Trailing bit manipulations
+               topoext                         :  1, // Topology Extensions (leaf 0x8000001d)
+               perfctr_core                    :  1, // Core performance counter extensions
+               perfctr_nb                      :  1, // NB/DF performance counter extensions
+                                               :  1, // Reserved
+               data_bp_ext                     :  1, // Data access breakpoint extension
+               perf_tsc                        :  1, // Performance time-stamp counter
+               perfctr_llc                     :  1, // LLC (L3) performance counter extensions
+               mwaitx                          :  1, // MWAITX/MONITORX support
+               addr_mask_ext                   :  1, // Breakpoint address mask extension (to bit 31)
+                                               :  1; // Reserved
+       // edx
+       u32     e_fpu                           :  1, // Floating-Point Unit on-chip (x87)
+               e_vme                           :  1, // Virtual-8086 Mode Extensions
+               e_de                            :  1, // Debugging Extensions
+               e_pse                           :  1, // Page Size Extension
+               e_tsc                           :  1, // Time Stamp Counter
+               e_msr                           :  1, // Model-Specific Registers (RDMSR and WRMSR support)
+               pae                             :  1, // Physical Address Extensions
+               mce                             :  1, // Machine Check Exception
+               cx8                             :  1, // CMPXCHG8B instruction
+               apic                            :  1, // APIC on-chip
+                                               :  1, // Reserved
+               syscall                         :  1, // SYSCALL and SYSRET instructions
+               mtrr                            :  1, // Memory Type Range Registers
+               pge                             :  1, // Page Global Extensions
+               mca                             :  1, // Machine Check Architecture
+               cmov                            :  1, // Conditional Move Instruction
+               pat                             :  1, // Page Attribute Table
+               pse36                           :  1, // Page Size Extension (36-bit)
+                                               :  1, // Reserved
+               obsolete_mp_bit                 :  1, // Out-of-spec AMD Multiprocessing bit
+               nx                              :  1, // No-execute page protection
+                                               :  1, // Reserved
+               mmxext                          :  1, // AMD MMX extensions
+               e_mmx                           :  1, // MMX instructions
+               e_fxsr                          :  1, // FXSAVE and FXRSTOR instructions
+               fxsr_opt                        :  1, // FXSAVE and FXRSTOR optimizations
+               page1gb                         :  1, // 1-GB large page support
+               rdtscp                          :  1, // RDTSCP instruction
+                                               :  1, // Reserved
+               lm                              :  1, // Long mode (x86-64, 64-bit support)
+               _3dnowext                       :  1, // AMD 3DNow extensions
+               _3dnow                          :  1; // 3DNow instructions
+};
+
+/*
+ * Leaf 0x80000002
+ * CPU brand ID string, bytes 0 - 15
+ */
+
+struct leaf_0x80000002_0 {
+       // eax
+       u32     cpu_brandid_0                   : 32; // CPU brand ID string, bytes 0 - 3
+       // ebx
+       u32     cpu_brandid_1                   : 32; // CPU brand ID string, bytes 4 - 7
+       // ecx
+       u32     cpu_brandid_2                   : 32; // CPU brand ID string, bytes 8 - 11
+       // edx
+       u32     cpu_brandid_3                   : 32; // CPU brand ID string, bytes 12 - 15
+};
+
+/*
+ * Leaf 0x80000003
+ * CPU brand ID string, bytes 16 - 31
+ */
+
+struct leaf_0x80000003_0 {
+       // eax
+       u32     cpu_brandid_4                   : 32; // CPU brand ID string bytes, 16 - 19
+       // ebx
+       u32     cpu_brandid_5                   : 32; // CPU brand ID string bytes, 20 - 23
+       // ecx
+       u32     cpu_brandid_6                   : 32; // CPU brand ID string bytes, 24 - 27
+       // edx
+       u32     cpu_brandid_7                   : 32; // CPU brand ID string bytes, 28 - 31
+};
+
+/*
+ * Leaf 0x80000004
+ * CPU brand ID string, bytes 32 - 47
+ */
+
+struct leaf_0x80000004_0 {
+       // eax
+       u32     cpu_brandid_8                   : 32; // CPU brand ID string, bytes 32 - 35
+       // ebx
+       u32     cpu_brandid_9                   : 32; // CPU brand ID string, bytes 36 - 39
+       // ecx
+       u32     cpu_brandid_10                  : 32; // CPU brand ID string, bytes 40 - 43
+       // edx
+       u32     cpu_brandid_11                  : 32; // CPU brand ID string, bytes 44 - 47
+};
+
+/*
+ * Leaf 0x80000005
+ * AMD/Transmeta L1 cache and TLB
+ */
+
+struct leaf_0x80000005_0 {
+       // eax
+       u32     l1_itlb_2m_4m_nentries          :  8, // L1 ITLB #entries, 2M and 4M pages
+               l1_itlb_2m_4m_assoc             :  8, // L1 ITLB associativity, 2M and 4M pages
+               l1_dtlb_2m_4m_nentries          :  8, // L1 DTLB #entries, 2M and 4M pages
+               l1_dtlb_2m_4m_assoc             :  8; // L1 DTLB associativity, 2M and 4M pages
+       // ebx
+       u32     l1_itlb_4k_nentries             :  8, // L1 ITLB #entries, 4K pages
+               l1_itlb_4k_assoc                :  8, // L1 ITLB associativity, 4K pages
+               l1_dtlb_4k_nentries             :  8, // L1 DTLB #entries, 4K pages
+               l1_dtlb_4k_assoc                :  8; // L1 DTLB associativity, 4K pages
+       // ecx
+       u32     l1_dcache_line_size             :  8, // L1 dcache line size, in bytes
+               l1_dcache_nlines                :  8, // L1 dcache lines per tag
+               l1_dcache_assoc                 :  8, // L1 dcache associativity
+               l1_dcache_size_kb               :  8; // L1 dcache size, in KB
+       // edx
+       u32     l1_icache_line_size             :  8, // L1 icache line size, in bytes
+               l1_icache_nlines                :  8, // L1 icache lines per tag
+               l1_icache_assoc                 :  8, // L1 icache associativity
+               l1_icache_size_kb               :  8; // L1 icache size, in KB
+};
+
+/*
+ * Leaf 0x80000006
+ * (Mostly AMD) L2/L3 cache and TLB
+ */
+
+struct leaf_0x80000006_0 {
+       // eax
+       u32     l2_itlb_2m_4m_nentries          : 12, // L2 iTLB #entries, 2M and 4M pages
+               l2_itlb_2m_4m_assoc             :  4, // L2 iTLB associativity, 2M and 4M pages
+               l2_dtlb_2m_4m_nentries          : 12, // L2 dTLB #entries, 2M and 4M pages
+               l2_dtlb_2m_4m_assoc             :  4; // L2 dTLB associativity, 2M and 4M pages
+       // ebx
+       u32     l2_itlb_4k_nentries             : 12, // L2 iTLB #entries, 4K pages
+               l2_itlb_4k_assoc                :  4, // L2 iTLB associativity, 4K pages
+               l2_dtlb_4k_nentries             : 12, // L2 dTLB #entries, 4K pages
+               l2_dtlb_4k_assoc                :  4; // L2 dTLB associativity, 4K pages
+       // ecx
+       u32     l2_line_size                    :  8, // L2 cache line size, in bytes
+               l2_nlines                       :  4, // L2 cache number of lines per tag
+               l2_assoc                        :  4, // L2 cache associativity
+               l2_size_kb                      : 16; // L2 cache size, in KB
+       // edx
+       u32     l3_line_size                    :  8, // L3 cache line size, in bytes
+               l3_nlines                       :  4, // L3 cache number of lines per tag
+               l3_assoc                        :  4, // L3 cache associativity
+                                               :  2, // Reserved
+               l3_size_range                   : 14; // L3 cache size range
+};
+
+/*
+ * Leaf 0x80000007
+ * CPU power management (mostly AMD) and AMD RAS
+ */
+
+struct leaf_0x80000007_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32     mca_overflow_recovery           :  1, // MCA overflow conditions not fatal
+               succor                          :  1, // Software containment of uncorrectable errors
+               hw_assert                       :  1, // Hardware assert MSRs
+               scalable_mca                    :  1, // Scalable MCA (MCAX MSRs)
+                                               : 28; // Reserved
+       // ecx
+       u32     cpu_pwr_sample_ratio            : 32; // CPU power sample time ratio
+       // edx
+       u32     digital_temp                    :  1, // Digital temperature sensor
+               powernow_freq_id                :  1, // PowerNOW! frequency scaling
+               powernow_volt_id                :  1, // PowerNOW! voltage scaling
+               thermal_trip                    :  1, // THERMTRIP (Thermal Trip)
+               hw_thermal_control              :  1, // Hardware thermal control
+               sw_thermal_control              :  1, // Software thermal control
+               _100mhz_steps                   :  1, // 100 MHz multiplier control
+               hw_pstate                       :  1, // Hardware P-state control
+               constant_tsc                    :  1, // TSC ticks at constant rate across all P and C states
+               core_perf_boost                 :  1, // Core performance boost
+               eff_freq_ro                     :  1, // Read-only effective frequency interface
+               proc_feedback                   :  1, // Processor feedback interface (deprecated)
+               proc_power_reporting            :  1, // Processor power reporting interface
+               connected_standby               :  1, // CPU Connected Standby support
+               rapl_interface                  :  1, // Runtime Average Power Limit interface
+                                               : 17; // Reserved
+};
+
+/*
+ * Leaf 0x80000008
+ * CPU capacity parameters and extended feature flags (mostly AMD)
+ */
+
+struct leaf_0x80000008_0 {
+       // eax
+       u32     phys_addr_bits                  :  8, // Max physical address bits
+               virt_addr_bits                  :  8, // Max virtual address bits
+               guest_phys_addr_bits            :  8, // Max nested-paging guest physical address bits
+                                               :  8; // Reserved
+       // ebx
+       u32     clzero                          :  1, // CLZERO instruction
+               insn_retired_perf               :  1, // Instruction retired counter MSR
+               xsave_err_ptr                   :  1, // XSAVE/XRSTOR always saves/restores FPU error pointers
+               invlpgb                         :  1, // INVLPGB broadcasts a TLB invalidate
+               rdpru                           :  1, // RDPRU (Read Processor Register at User level)
+                                               :  1, // Reserved
+               mba                             :  1, // Memory Bandwidth Allocation (AMD bit)
+                                               :  1, // Reserved
+               mcommit                         :  1, // MCOMMIT instruction
+               wbnoinvd                        :  1, // WBNOINVD instruction
+                                               :  2, // Reserved
+               ibpb                            :  1, // Indirect Branch Prediction Barrier
+               wbinvd_int                      :  1, // Interruptible WBINVD/WBNOINVD
+               ibrs                            :  1, // Indirect Branch Restricted Speculation
+               stibp                           :  1, // Single Thread Indirect Branch Prediction mode
+               ibrs_always_on                  :  1, // IBRS always-on preferred
+               stibp_always_on                 :  1, // STIBP always-on preferred
+               ibrs_fast                       :  1, // IBRS is preferred over software solution
+               ibrs_same_mode                  :  1, // IBRS provides same mode protection
+               no_efer_lmsle                   :  1, // Long-Mode Segment Limit Enable unsupported
+               tlb_flush_nested                :  1, // INVLPGB RAX[5] bit can be set
+                                               :  1, // Reserved
+               amd_ppin                        :  1, // Protected Processor Inventory Number
+               amd_ssbd                        :  1, // Speculative Store Bypass Disable
+               virt_ssbd                       :  1, // virtualized SSBD (Speculative Store Bypass Disable)
+               amd_ssb_no                      :  1, // SSBD is not needed (fixed in hardware)
+               cppc                            :  1, // Collaborative Processor Performance Control
+               amd_psfd                        :  1, // Predictive Store Forward Disable
+               btc_no                          :  1, // CPU not affected by Branch Type Confusion
+               ibpb_ret                        :  1, // IBPB clears RSB/RAS too
+               branch_sampling                 :  1; // Branch Sampling
+       // ecx
+       u32     cpu_nthreads                    :  8, // Number of physical threads - 1
+                                               :  4, // Reserved
+               apicid_coreid_len               :  4, // Number of thread core ID bits (shift) in APIC ID
+               perf_tsc_len                    :  2, // Performance time-stamp counter size
+                                               : 14; // Reserved
+       // edx
+       u32     invlpgb_max_pages               : 16, // INVLPGB maximum page count
+               rdpru_max_reg_id                : 16; // RDPRU max register ID (ECX input)
+};
+
+/*
+ * Leaf 0x8000000a
+ * AMD SVM (Secure Virtual Machine)
+ */
+
+struct leaf_0x8000000a_0 {
+       // eax
+       u32     svm_version                     :  8, // SVM revision number
+                                               : 24; // Reserved
+       // ebx
+       u32     svm_nasid                       : 32; // Number of address space identifiers (ASID)
+       // ecx
+       u32                                     :  4, // Reserved
+               pml                             :  1, // Page Modification Logging (PML)
+                                               : 27; // Reserved
+       // edx
+       u32     nested_pt                       :  1, // Nested paging
+               lbr_virt                        :  1, // LBR virtualization
+               svm_lock                        :  1, // SVM lock
+               nrip_save                       :  1, // NRIP save support on #VMEXIT
+               tsc_rate_msr                    :  1, // MSR based TSC rate control
+               vmcb_clean                      :  1, // VMCB clean bits support
+               flush_by_asid                   :  1, // Flush by ASID + Extended VMCB TLB_Control
+               decode_assists                  :  1, // Decode Assists support
+                                               :  2, // Reserved
+               pause_filter                    :  1, // Pause intercept filter
+                                               :  1, // Reserved
+               pf_threshold                    :  1, // Pause filter threshold
+               avic                            :  1, // Advanced virtual interrupt controller
+                                               :  1, // Reserved
+               v_vmsave_vmload                 :  1, // Virtual VMSAVE/VMLOAD (nested virtualization)
+               v_gif                           :  1, // Virtualize the Global Interrupt Flag
+               gmet                            :  1, // Guest mode execution trap
+               x2avic                          :  1, // Virtual x2APIC
+               sss_check                       :  1, // Supervisor Shadow Stack restrictions
+               v_spec_ctrl                     :  1, // Virtual SPEC_CTRL
+               ro_gpt                          :  1, // Read-Only guest page table support
+                                               :  1, // Reserved
+               h_mce_override                  :  1, // Host MCE override
+               tlbsync_int                     :  1, // TLBSYNC intercept + INVLPGB/TLBSYNC in VMCB
+               nmi_virt                        :  1, // NMI virtualization
+               ibs_virt                        :  1, // IBS Virtualization
+               ext_lvt_off_chg                 :  1, // Extended LVT offset fault change
+               svme_addr_chk                   :  1, // Guest SVME address check
+                                               :  3; // Reserved
+};
+
+/*
+ * Leaf 0x80000019
+ * AMD TLB characteristics for 1GB pages
+ */
+
+struct leaf_0x80000019_0 {
+       // eax
+       u32     l1_itlb_1g_nentries             : 12, // L1 iTLB #entries, 1G pages
+               l1_itlb_1g_assoc                :  4, // L1 iTLB associativity, 1G pages
+               l1_dtlb_1g_nentries             : 12, // L1 dTLB #entries, 1G pages
+               l1_dtlb_1g_assoc                :  4; // L1 dTLB associativity, 1G pages
+       // ebx
+       u32     l2_itlb_1g_nentries             : 12, // L2 iTLB #entries, 1G pages
+               l2_itlb_1g_assoc                :  4, // L2 iTLB associativity, 1G pages
+               l2_dtlb_1g_nentries             : 12, // L2 dTLB #entries, 1G pages
+               l2_dtlb_1g_assoc                :  4; // L2 dTLB associativity, 1G pages
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x8000001a
+ * AMD instruction optimizations
+ */
+
+struct leaf_0x8000001a_0 {
+       // eax
+       u32     fp_128                          :  1, // Internal FP/SIMD exec data path is 128-bits wide
+               movu_preferred                  :  1, // SSE: MOVU* better than MOVL*/MOVH*
+               fp_256                          :  1, // internal FP/SSE exec data path is 256-bits wide
+                                               : 29; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x8000001b
+ * AMD IBS (Instruction-Based Sampling)
+ */
+
+struct leaf_0x8000001b_0 {
+       // eax
+       u32     ibs_flags                       :  1, // IBS feature flags
+               ibs_fetch_sampling              :  1, // IBS fetch sampling
+               ibs_op_sampling                 :  1, // IBS execution sampling
+               ibs_rdwr_op_counter             :  1, // IBS read/write of op counter
+               ibs_op_count                    :  1, // IBS OP counting mode
+               ibs_branch_target               :  1, // IBS branch target address reporting
+               ibs_op_counters_ext             :  1, // IBS IbsOpCurCnt/IbsOpMaxCnt extend by 7 bits
+               ibs_rip_invalid_chk             :  1, // IBS invalid RIP indication
+               ibs_op_branch_fuse              :  1, // IBS fused branch micro-op indication
+               ibs_fetch_ctl_ext               :  1, // IBS Fetch Control Extended MSR
+               ibs_op_data_4                   :  1, // IBS op data 4 MSR
+               ibs_l3_miss_filter              :  1, // IBS L3-miss filtering (Zen4+)
+                                               : 20; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x8000001c
+ * AMD LWP (Lightweight Profiling)
+ */
+
+struct leaf_0x8000001c_0 {
+       // eax
+       u32     os_lwp_avail                    :  1, // OS: LWP is available to application programs
+               os_lpwval                       :  1, // OS: LWPVAL instruction
+               os_lwp_ire                      :  1, // OS: Instructions Retired Event
+               os_lwp_bre                      :  1, // OS: Branch Retired Event
+               os_lwp_dme                      :  1, // OS: Dcache Miss Event
+               os_lwp_cnh                      :  1, // OS: CPU Clocks Not Halted event
+               os_lwp_rnh                      :  1, // OS: CPU Reference clocks Not Halted event
+                                               : 22, // Reserved
+               os_lwp_cont                     :  1, // OS: LWP sampling in continuous mode
+               os_lwp_ptsc                     :  1, // OS: Performance Time Stamp Counter in event records
+               os_lwp_int                      :  1; // OS: Interrupt on threshold overflow
+       // ebx
+       u32     lwp_lwpcb_sz                    :  8, // Control Block size, in quadwords
+               lwp_event_sz                    :  8, // Event record size, in bytes
+               lwp_max_events                  :  8, // Max EventID supported
+               lwp_event_offset                :  8; // Control Block events area offset
+       // ecx
+       u32     lwp_latency_max                 :  5, // Cache latency counters number of bits
+               lwp_data_addr                   :  1, // Cache miss events report data cache address
+               lwp_latency_rnd                 :  3, // Cache latency rounding amount
+               lwp_version                     :  7, // LWP version
+               lwp_buf_min_sz                  :  8, // LWP event ring buffer min size, 32 event records units
+                                               :  4, // Reserved
+               lwp_branch_predict              :  1, // Branches Retired events can be filtered
+               lwp_ip_filtering                :  1, // IP filtering (IPI, IPF, BaseIP, and LimitIP @ LWPCP)
+               lwp_cache_levels                :  1, // Cache-related events: filter by cache level
+               lwp_cache_latency               :  1; // Cache-related events: filter by latency
+       // edx
+       u32     hw_lwp_avail                    :  1, // HW: LWP available
+               hw_lpwval                       :  1, // HW: LWPVAL available
+               hw_lwp_ire                      :  1, // HW: Instructions Retired Event
+               hw_lwp_bre                      :  1, // HW: Branch Retired Event
+               hw_lwp_dme                      :  1, // HW: Dcache Miss Event
+               hw_lwp_cnh                      :  1, // HW: Clocks Not Halted event
+               hw_lwp_rnh                      :  1, // HW: Reference clocks Not Halted event
+                                               : 22, // Reserved
+               hw_lwp_cont                     :  1, // HW: LWP sampling in continuous mode
+               hw_lwp_ptsc                     :  1, // HW: Performance Time Stamp Counter in event records
+               hw_lwp_int                      :  1; // HW: Interrupt on threshold overflow
+};
+
+/*
+ * Leaf 0x8000001d
+ * AMD deterministic cache parameters
+ */
+
+struct leaf_0x8000001d_n {
+       // eax
+       u32     cache_type                      :  5, // Cache type field
+               cache_level                     :  3, // Cache level (1-based)
+               cache_self_init                 :  1, // Self-initializing cache level
+               fully_associative               :  1, // Fully-associative cache
+                                               :  4, // Reserved
+               num_threads_sharing             : 12, // Number of logical CPUs sharing cache
+                                               :  6; // Reserved
+       // ebx
+       u32     cache_linesize                  : 12, // System coherency line size (0-based)
+               cache_npartitions               : 10, // Physical line partitions (0-based)
+               cache_nways                     : 10; // Ways of associativity (0-based)
+       // ecx
+       u32     cache_nsets                     : 31, // Cache number of sets (0-based)
+                                               :  1; // Reserved
+       // edx
+       u32     wbinvd_rll_no_guarantee         :  1, // WBINVD/INVD not guaranteed for Remote Lower-Level caches
+               ll_inclusive                    :  1, // Cache is inclusive of Lower-Level caches
+                                               : 30; // Reserved
+};
+
+#define LEAF_0x8000001d_SUBLEAF_N_FIRST                0
+#define LEAF_0x8000001d_SUBLEAF_N_LAST         31
+
+/*
+ * Leaf 0x8000001e
+ * AMD CPU topology
+ */
+
+struct leaf_0x8000001e_0 {
+       // eax
+       u32     ext_apic_id                     : 32; // Extended APIC ID
+       // ebx
+       u32     core_id                         :  8, // Unique per-socket logical core unit ID
+               core_nthreads                   :  8, // #Threads per core (zero-based)
+                                               : 16; // Reserved
+       // ecx
+       u32     node_id                         :  8, // Node (die) ID of invoking logical CPU
+               nnodes_per_socket               :  3, // #nodes in invoking logical CPU's package/socket
+                                               : 21; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x8000001f
+ * AMD encrypted memory capabilities (SME/SEV)
+ */
+
+struct leaf_0x8000001f_0 {
+       // eax
+       u32     sme                             :  1, // Secure Memory Encryption
+               sev                             :  1, // Secure Encrypted Virtualization
+               vm_page_flush                   :  1, // VM Page Flush MSR
+               sev_encrypted_state             :  1, // SEV Encrypted State
+               sev_nested_paging               :  1, // SEV secure nested paging
+               vm_permission_levels            :  1, // VMPL
+               rpmquery                        :  1, // RPMQUERY instruction
+               vmpl_sss                        :  1, // VMPL supervisor shadow stack
+               secure_tsc                      :  1, // Secure TSC
+               virt_tsc_aux                    :  1, // Hardware virtualizes TSC_AUX
+               sme_coherent                    :  1, // Cache coherency enforcement across encryption domains
+               req_64bit_hypervisor            :  1, // SEV guest mandates 64-bit hypervisor
+               restricted_injection            :  1, // Restricted Injection supported
+               alternate_injection             :  1, // Alternate Injection supported
+               debug_swap                      :  1, // SEV-ES: Full debug state swap
+               disallow_host_ibs               :  1, // SEV-ES: Disallowing IBS use by the host
+               virt_transparent_enc            :  1, // Virtual Transparent Encryption
+               vmgexit_parameter               :  1, // SEV_FEATURES: VmgexitParameter
+               virt_tom_msr                    :  1, // Virtual TOM MSR
+               virt_ibs                        :  1, // SEV-ES guests: IBS state virtualization
+                                               :  4, // Reserved
+               vmsa_reg_protection             :  1, // VMSA register protection
+               smt_protection                  :  1, // SMT protection
+                                               :  2, // Reserved
+               svsm_page_msr                   :  1, // SVSM communication page MSR
+               nested_virt_snp_msr             :  1, // VIRT_RMPUPDATE/VIRT_PSMASH MSRs
+                                               :  2; // Reserved
+       // ebx
+       u32     pte_cbit_pos                    :  6, // PTE bit number to enable memory encryption
+               phys_addr_reduction_nbits       :  6, // Reduction of phys address space in bits
+               vmpl_count                      :  4, // Number of VM permission levels (VMPL)
+                                               : 16; // Reserved
+       // ecx
+       u32     enc_guests_max                  : 32; // Max number of simultaneous encrypted guests
+       // edx
+       u32     min_sev_asid_no_sev_es          : 32; // Minimum ASID for SEV-enabled SEV-ES-disabled guest
+};
+
+/*
+ * Leaf 0x80000020
+ * AMD PQoS (Platform QoS) extended features
+ */
+
+struct leaf_0x80000020_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32                                     :  1, // Reserved
+               mba                             :  1, // Memory Bandwidth Allocation support
+               smba                            :  1, // Slow Memory Bandwidth Allocation support
+               bmec                            :  1, // Bandwidth Monitoring Event Configuration support
+               l3rr                            :  1, // L3 Range Reservation support
+               abmc                            :  1, // Assignable Bandwidth Monitoring Counters
+               sdciae                          :  1, // Smart Data Cache Injection (SDCI) Allocation Enforcement
+                                               : 25; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+struct leaf_0x80000020_1 {
+       // eax
+       u32     mba_limit_len                   : 32; // MBA enforcement limit size
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32     mba_cos_max                     : 32; // MBA max Class of Service number (zero-based)
+};
+
+struct leaf_0x80000020_2 {
+       // eax
+       u32     smba_limit_len                  : 32; // SMBA enforcement limit size
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32     smba_cos_max                    : 32; // SMBA max Class of Service number (zero-based)
+};
+
+struct leaf_0x80000020_3 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32     bmec_num_events                 :  8, // BMEC number of bandwidth events available
+                                               : 24; // Reserved
+       // ecx
+       u32     bmec_local_reads                :  1, // Local NUMA reads can be tracked
+               bmec_remote_reads               :  1, // Remote NUMA reads can be tracked
+               bmec_local_nontemp_wr           :  1, // Local NUMA non-temporal writes can be tracked
+               bmec_remote_nontemp_wr          :  1, // Remote NUMA non-temporal writes can be tracked
+               bmec_local_slow_mem_rd          :  1, // Local NUMA slow-memory reads can be tracked
+               bmec_remote_slow_mem_rd         :  1, // Remote NUMA slow-memory reads can be tracked
+               bmec_all_dirty_victims          :  1, // Dirty QoS victims to all types of memory can be tracked
+                                               : 25; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80000021
+ * AMD extended CPU features 2
+ */
+
+struct leaf_0x80000021_0 {
+       // eax
+       u32     no_nested_data_bp               :  1, // No nested data breakpoints
+               fsgs_non_serializing            :  1, // WRMSR to {FS,GS,KERNEL_GS}_BASE is non-serializing
+               lfence_serializing              :  1, // LFENCE always serializing / synchronizes RDTSC
+               smm_page_cfg_lock               :  1, // SMM paging configuration lock
+                                               :  2, // Reserved
+               null_sel_clr_base               :  1, // Null selector clears base
+               upper_addr_ignore               :  1, // EFER MSR Upper Address Ignore
+               auto_ibrs                       :  1, // EFER MSR Automatic IBRS
+               no_smm_ctl_msr                  :  1, // SMM_CTL MSR not available
+               fsrs                            :  1, // Fast Short Rep STOSB
+               fsrc                            :  1, // Fast Short Rep CMPSB
+                                               :  1, // Reserved
+               prefetch_ctl_msr                :  1, // Prefetch control MSR
+                                               :  2, // Reserved
+               opcode_reclaim                  :  1, // Reserves opcode space
+               user_cpuid_disable              :  1, // #GP when executing CPUID at CPL > 0
+               epsf                            :  1, // Enhanced Predictive Store Forwarding
+                                               :  3, // Reserved
+               wl_feedback                     :  1, // Workload-based heuristic feedback to OS
+                                               :  1, // Reserved
+               eraps                           :  1, // Enhanced Return Address Predictor Security
+                                               :  2, // Reserved
+               sbpb                            :  1, // Selective Branch Predictor Barrier
+               ibpb_brtype                     :  1, // Branch predictions flushed from CPU branch predictor
+               srso_no                         :  1, // No SRSO vulnerability
+               srso_uk_no                      :  1, // No SRSO at user-kernel boundary
+               srso_msr_fix                    :  1; // MSR BP_CFG[BpSpecReduce] SRSO mitigation
+       // ebx
+       u32     microcode_patch_size            : 16, // Microcode patch size, in 16-byte units
+               rap_size                        :  8, // Return Address Predictor size
+                                               :  8; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80000022
+ * AMD extended performance monitoring
+ */
+
+struct leaf_0x80000022_0 {
+       // eax
+       u32     perfmon_v2                      :  1, // Performance monitoring v2
+               lbr_v2                          :  1, // Last Branch Record v2 extensions (LBR Stack)
+               lbr_pmc_freeze                  :  1, // Freezing core performance counters / LBR Stack
+                                               : 29; // Reserved
+       // ebx
+       u32     n_pmc_core                      :  4, // Number of core performance counters
+               lbr_v2_stack_size               :  6, // Number of LBR stack entries
+               n_pmc_northbridge               :  6, // Number of northbridge performance counters
+               n_pmc_umc                       :  6, // Number of UMC performance counters
+                                               : 10; // Reserved
+       // ecx
+       u32     active_umc_bitmask              : 32; // Active UMCs bitmask
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80000023
+ * AMD multi-key encrypted memory
+ */
+
+struct leaf_0x80000023_0 {
+       // eax
+       u32     mem_hmk_mode                    :  1, // MEM-HMK encryption mode
+                                               : 31; // Reserved
+       // ebx
+       u32     mem_hmk_avail_keys              : 16, // Total number of available encryption keys
+                                               : 16; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80000026
+ * AMD extended CPU topology
+ */
+
+struct leaf_0x80000026_n {
+       // eax
+       u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
+                                               : 24, // Reserved
+               core_has_pwreff_ranking         :  1, // This core has a power efficiency ranking
+               domain_has_hybrid_cores         :  1, // This domain level has hybrid (E, P) cores
+               domain_core_count_asymm         :  1; // The 'Core' domain has asymmetric cores count
+       // ebx
+       u32     domain_lcpus_count              : 16, // Number of logical CPUs at this domain instance
+               core_pwreff_ranking             :  8, // This core's static power efficiency ranking
+               core_native_model_id            :  4, // This core's native model ID
+               core_type                       :  4; // This core's type
+       // ecx
+       u32     domain_level                    :  8, // This domain level (subleaf ID)
+               domain_type                     :  8, // This domain type
+                                               : 16; // Reserved
+       // edx
+       u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
+};
+
+#define LEAF_0x80000026_SUBLEAF_N_FIRST                0
+#define LEAF_0x80000026_SUBLEAF_N_LAST         3
+
+/*
+ * Leaf 0x80860000
+ * Maximum Transmeta leaf + CPU vendor string
+ */
+
+struct leaf_0x80860000_0 {
+       // eax
+       u32     max_tra_leaf                    : 32; // Maximum Transmeta leaf
+       // ebx
+       u32     cpu_vendorid_0                  : 32; // Transmeta Vendor ID string bytes 0 - 3
+       // ecx
+       u32     cpu_vendorid_2                  : 32; // Transmeta Vendor ID string bytes 8 - 11
+       // edx
+       u32     cpu_vendorid_1                  : 32; // Transmeta Vendor ID string bytes 4 - 7
+};
+
+/*
+ * Leaf 0x80860001
+ * Transmeta extended CPU features
+ */
+
+struct leaf_0x80860001_0 {
+       // eax
+       u32     stepping                        :  4, // Stepping ID
+               base_model                      :  4, // Base CPU model ID
+               base_family_id                  :  4, // Base CPU family ID
+               cpu_type                        :  2, // CPU type
+                                               : 18; // Reserved
+       // ebx
+       u32     cpu_rev_mask_minor              :  8, // CPU revision ID, mask minor
+               cpu_rev_mask_major              :  8, // CPU revision ID, mask major
+               cpu_rev_minor                   :  8, // CPU revision ID, minor
+               cpu_rev_major                   :  8; // CPU revision ID, major
+       // ecx
+       u32     cpu_base_mhz                    : 32; // CPU nominal frequency, in MHz
+       // edx
+       u32     recovery                        :  1, // Recovery CMS is active (after bad flush)
+               longrun                         :  1, // LongRun power management capabilities
+                                               :  1, // Reserved
+               lrti                            :  1, // LongRun Table Interface
+                                               : 28; // Reserved
+};
+
+/*
+ * Leaf 0x80860002
+ * Transmeta CMS (Code Morphing Software)
+ */
+
+struct leaf_0x80860002_0 {
+       // eax
+       u32     cpu_rev_id                      : 32; // CPU revision ID
+       // ebx
+       u32     cms_rev_mask_2                  :  8, // CMS revision ID, mask component 2
+               cms_rev_mask_1                  :  8, // CMS revision ID, mask component 1
+               cms_rev_minor                   :  8, // CMS revision ID, minor
+               cms_rev_major                   :  8; // CMS revision ID, major
+       // ecx
+       u32     cms_rev_mask_3                  : 32; // CMS revision ID, mask component 3
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0x80860003
+ * Transmeta CPU information string, bytes 0 - 15
+ */
+
+struct leaf_0x80860003_0 {
+       // eax
+       u32     cpu_info_0                      : 32; // CPU info string bytes 0 - 3
+       // ebx
+       u32     cpu_info_1                      : 32; // CPU info string bytes 4 - 7
+       // ecx
+       u32     cpu_info_2                      : 32; // CPU info string bytes 8 - 11
+       // edx
+       u32     cpu_info_3                      : 32; // CPU info string bytes 12 - 15
+};
+
+/*
+ * Leaf 0x80860004
+ * Transmeta CPU information string, bytes 16 - 31
+ */
+
+struct leaf_0x80860004_0 {
+       // eax
+       u32     cpu_info_4                      : 32; // CPU info string bytes 16 - 19
+       // ebx
+       u32     cpu_info_5                      : 32; // CPU info string bytes 20 - 23
+       // ecx
+       u32     cpu_info_6                      : 32; // CPU info string bytes 24 - 27
+       // edx
+       u32     cpu_info_7                      : 32; // CPU info string bytes 28 - 31
+};
+
+/*
+ * Leaf 0x80860005
+ * Transmeta CPU information string, bytes 32 - 47
+ */
+
+struct leaf_0x80860005_0 {
+       // eax
+       u32     cpu_info_8                      : 32; // CPU info string bytes 32 - 35
+       // ebx
+       u32     cpu_info_9                      : 32; // CPU info string bytes 36 - 39
+       // ecx
+       u32     cpu_info_10                     : 32; // CPU info string bytes 40 - 43
+       // edx
+       u32     cpu_info_11                     : 32; // CPU info string bytes 44 - 47
+};
+
+/*
+ * Leaf 0x80860006
+ * Transmeta CPU information string, bytes 48 - 63
+ */
+
+struct leaf_0x80860006_0 {
+       // eax
+       u32     cpu_info_12                     : 32; // CPU info string bytes 48 - 51
+       // ebx
+       u32     cpu_info_13                     : 32; // CPU info string bytes 52 - 55
+       // ecx
+       u32     cpu_info_14                     : 32; // CPU info string bytes 56 - 59
+       // edx
+       u32     cpu_info_15                     : 32; // CPU info string bytes 60 - 63
+};
+
+/*
+ * Leaf 0x80860007
+ * Transmeta live CPU information
+ */
+
+struct leaf_0x80860007_0 {
+       // eax
+       u32     cpu_cur_mhz                     : 32; // Current CPU frequency, in MHz
+       // ebx
+       u32     cpu_cur_voltage                 : 32; // Current CPU voltage, in millivolts
+       // ecx
+       u32     cpu_cur_perf_pctg               : 32; // Current CPU performance percentage, 0 - 100
+       // edx
+       u32     cpu_cur_gate_delay              : 32; // Current CPU gate delay, in femtoseconds
+};
+
+/*
+ * Leaf 0xc0000000
+ * Maximum Centaur/Zhaoxin leaf
+ */
+
+struct leaf_0xc0000000_0 {
+       // eax
+       u32     max_cntr_leaf                   : 32; // Maximum Centaur/Zhaoxin leaf
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32                                     : 32; // Reserved
+};
+
+/*
+ * Leaf 0xc0000001
+ * Centaur/Zhaoxin extended CPU features
+ */
+
+struct leaf_0xc0000001_0 {
+       // eax
+       u32                                     : 32; // Reserved
+       // ebx
+       u32                                     : 32; // Reserved
+       // ecx
+       u32                                     : 32; // Reserved
+       // edx
+       u32     ccs_sm2                         :  1, // CCS SM2 instructions
+               ccs_sm2_en                      :  1, // CCS SM2 enabled
+               rng                             :  1, // Random Number Generator
+               rng_en                          :  1, // RNG enabled
+               ccs_sm3_sm4                     :  1, // CCS SM3 and SM4 instructions
+               ccs_sm3_sm4_en                  :  1, // CCS SM3/SM4 enabled
+               ace                             :  1, // Advanced Cryptography Engine
+               ace_en                          :  1, // ACE enabled
+               ace2                            :  1, // Advanced Cryptography Engine v2
+               ace2_en                         :  1, // ACE v2 enabled
+               phe                             :  1, // PadLock Hash Engine
+               phe_en                          :  1, // PHE enabled
+               pmm                             :  1, // PadLock Montgomery Multiplier
+               pmm_en                          :  1, // PMM enabled
+                                               :  2, // Reserved
+               parallax                        :  1, // Parallax auto adjust processor voltage
+               parallax_en                     :  1, // Parallax enabled
+                                               :  2, // Reserved
+               tm3                             :  1, // Thermal Monitor v3
+               tm3_en                          :  1, // TM v3 enabled
+                                               :  3, // Reserved
+               phe2                            :  1, // PadLock Hash Engine v2 (SHA384/SHA512)
+               phe2_en                         :  1, // PHE v2 enabled
+               rsa                             :  1, // RSA instructions (XMODEXP/MONTMUL2)
+               rsa_en                          :  1, // RSA instructions enabled
+                                               :  3; // Reserved
+};
+
+#endif /* _ASM_X86_CPUID_LEAF_TYPES */