Fact-checked by Grok 2 weeks ago

CPUID

CPUID is a supplementary instruction in the x86 that enables software to query a for detailed about its , supported features, and capabilities, such as vendor string, family, model, stepping, cache parameters, and extensions like MMX, , and AVX. Introduced by in 1993 with the to facilitate software compatibility across evolving architectures, it was subsequently adopted by starting with the Am486 DX4 in 1994 and has become a standard mechanism for enumeration in x86-compatible systems from multiple vendors. The instruction operates by loading a function code, or "leaf," into the register (with ECX sometimes serving as a sub-leaf selector) prior to execution; it then returns data in the , EBX, ECX, and registers, serializing the state to ensure consistent results. Standard functions, accessible via values from 0 to the maximum basic function (queried with =0), provide core identification details like the vendor ID ("GenuineIntel" for or "AuthenticAMD" for ) and legacy feature flags in (e.g., FPU, MMX) and ECX (e.g., , ). Extended functions, starting from =8000_0000H on processors or specific leaves like 7H and 0DH on , reveal vendor-specific extensions such as AMD's 3DNow! or SVM virtualization, topology, extended state management for , and power management capabilities. Beyond basic identification, CPUID plays a critical role in modern computing by allowing operating systems, applications, and firmware to detect hardware support for optimizations, features (e.g., SGX or SEV), and multi-core configurations, ensuring portability and across diverse x86 processors. Its extensible design accommodates ongoing architectural advancements, with new leaves added in successive processor generations to report evolving capabilities like accelerations or enhanced mitigations.

Introduction and History

Introduction to the CPUID Instruction

The is a supplementary x86 designed to return detailed information about the 's identification, supported features, and configuration parameters. It operates by loading a code into the as input, which selects the specific type of data to retrieve, and then populates the , EBX, ECX, and with the corresponding output values upon execution. This allows software to directly query the underlying capabilities of x86-compatible processors, bypassing the need for operating mediation and enabling portable detection of features such as set extensions or configurations. Its execution ensures that the query completes as a single, uninterruptible operation, providing reliable results even in multithreaded environments. Introduced by in 1993 alongside the processor, CPUID has been available on all subsequent x86 processors, marking its role in standardizing hardware introspection. In terms of register conventions, serves as the primary input selector for the main function (or "leaf"), while ECX can specify sub-functions (or "sub-leaves") within certain leaves to access more granular details. Understanding CPUID requires familiarity with basic x86 assembly concepts, such as using the to prepare the value and the CPUID (0F A2) to invoke it, though the itself handles the data transfer implicitly. Historically, CPUID was developed to supplant inconsistent, vendor-proprietary techniques for feature detection, such as timing-based probes or analysis, thereby promoting cross-processor compatibility in .

Historical Development and Evolution

The CPUID instruction was introduced by in 1993 alongside the (codenamed P5) and certain SL-enhanced 486 variants, primarily to enable software detection of the , , model, and basic feature flags through initial function leaves =0 (vendor identification and maximum function) and =1 ( identification and features). This marked a shift from earlier x86 identification methods, such as fixed flags in the , providing a standardized mechanism for runtime enumeration in an era of evolving architectures. Subsequent expansions occurred with the Pentium Pro processor in 1995, which added EAX=2 for cache and TLB descriptor information to address the growing complexity of on-chip caching hierarchies. The EAX=3 leaf for processor serial number was introduced later with the Pentium III in 1999, allowing unique hardware identification but was deprecated and disabled in subsequent processors around 2000 due to privacy concerns over unique tracking capabilities. AMD adopted CPUID starting with the Am486 DX4 processor in 1994, with the K5 in 1996 providing further compatibility and the K6 in 1997 introducing the extended function range beginning at EAX=80000000h for vendor-specific features, including early support for 3DNow! extensions. This range later supported AMD64 64-bit architecture enumeration with the Athlon 64 in 2003. Key evolutions in the mid-2000s reflected multicore and advanced feature proliferation: Intel's Core microarchitecture in 2006 introduced EAX=4 for deterministic cache parameters, offering more precise and structured cache hierarchy details compared to the legacy EAX=2 descriptors. The Nehalem microarchitecture in 2008 added EAX=0Bh for extended topology enumeration, enabling software to query core, thread, and cache topology in multicore systems. This was further enhanced in 2013 with the Haswell microarchitecture's EAX=7 leaf for structured extended feature enumeration, providing a scalable way to enumerate instruction set extensions like AES-NI and AVX without fragmenting the feature space. Recent developments continue to adapt CPUID for emerging workloads. In 2024, introduced EAX=24 for AVX10 ( 10) enumeration, simplifying detection of converged vector ISAs with versioned sub-leaves for granular feature support across 128-bit, 256-bit, and 512-bit widths. AMD's microarchitecture, launched in 2024, extends the 80000000h range with new leaves for advanced enumeration supporting optimizations in hybrid core topologies. 's Software Developer's Manual updates through March 2025 incorporate precursors for features like TMUL (tensor multiply) and ChkTag (tag check) in extended leaves, aligning with APX (Advanced Performance Extensions) for enhanced security and vector processing. These evolutions have significantly impacted , enabling operating system kernels like to dynamically configure features via /proc/cpuinfo based on CPUID queries, and libraries to detect SIMD capabilities for optimized code paths without hardcoded assumptions.

Invoking CPUID

Basic Calling Mechanism

The CPUID instruction is invoked in by first loading the desired main function code (leaf) into the register, followed by execution of the opcode, after which the results are retrieved from the , EBX, ECX, and registers. This process provides processor-specific information without operands, as the instruction is self-contained and serializes execution to ensure prior instructions complete. For functions that support sub-leaves, such as leaf 4 (deterministic cache parameters) or leaf 7 (extended features), the ECX register must be set to the sub-leaf index (e.g., 0 for the base sub-leaf) before executing CPUID to access additional levels of detail. The outputs from these sub-leaves follow the same register format but provide progressively more specific data, with invalid sub-leaf indices typically resulting in all output registers being set to zero. Each output register holds a 32-bit value, where the interpretation of individual bits or fields depends on the selected ; for instance, in leaf 0, the EBX, , and ECX registers collectively form a 12-character ASCII when concatenated. These 32-bit outputs are standardized across x86 processors from and , though the specific data encodings may vary by for certain leaves. Specifying an invalid main —such as a value in exceeding the maximum supported —does not raise an exception but instead returns the results as if the maximum supported was requested, with containing the maximum value and EBX, ECX, containing the corresponding data for that . To prevent such cases, software must first execute CPUID with =0 to retrieve the maximum basic in , ensuring subsequent calls remain within supported bounds. The range 40000000H to 4FFFFFFFH is reserved for hypervisor-specific leaves. Software should detect the presence of a (e.g., via bit 31 of ECX in leaf 1) before accessing this range; otherwise, it will be treated as an invalid input and return maximum basic data. Leaves in this range should generally be avoided in bare-metal environments. In environments, CPUID operates using the 64-bit general-purpose registers RAX, RBX, RCX, and RDX, but it processes and returns only 32-bit values, clearing the upper 32 bits of these registers upon completion. This maintains with 32-bit modes, and a prefix may be used if the instruction accesses extended registers, though the core mechanism remains a legacy 32-bit operation. The following pseudocode illustrates a basic invocation for leaf 0 to obtain the maximum function and vendor information:
function_value ← 0
EAX ← function_value
CPUID
max_function ← EAX
vendor_part1 ← EBX
vendor_part2 ← ECX
vendor_part3 ← EDX
This sequence sets EAX to the maximum basic leaf supported and populates the other registers with vendor string components.

Usage Guidelines and Safety

The CPUID instruction requires careful invocation to ensure compatibility and avoid across processor generations and vendors. Software must first execute CPUID with EAX set to 0 to retrieve the maximum supported basic function in EAX, as well as the vendor identification string in EBX, ECX, and EDX; this step is essential before querying any higher function codes, which could otherwise result in reserved or invalid returns. Similarly, for extended functions, EAX=80000000h must be used to determine the maximum extended leaf, preventing attempts to access unsupported ranges that may return arbitrary data. CPUID operates at all privilege levels in , including ring 3 (user mode), without requiring elevated privileges, enabling its use in for feature detection. However, in virtualized environments, hypervisors such as may intercept the and modify outputs; for instance, when EAX=1, bit 31 in ECX (hypervisor bit) is set to indicate , and specific bits (e.g., bits 29-30) may expose vendor details like . Developers should verify physical hardware contexts when results impact security or performance assumptions. The instruction is per , providing inherent thread-safety for individual executions, but feature flags and information can vary across cores in multi-socket or heterogeneous systems; thus, detection should occur once during system initialization or , with results cached for use rather than repeated queries. Vendor-specific behaviors pose common pitfalls, such as differing maximum function values—maximum function values vary by processor generation and vendor; for example, modern and processors support basic leaves up to 0x24 or higher as of 2025—and deprecated leaves like =3 (processor serial number), which often return undefined or zeroed values on modern CPUs and should not be relied upon. Although CPUID executes quickly (typically 10-20 cycles), it serializes instruction fetch and should be avoided in hot code paths or loops to prevent bottlenecks; caching results at startup mitigates this while ensuring accuracy for static characteristics. From a perspective, avoid depending on potentially spoofable like serial numbers (EAX=3), especially in virtual machines where can alter outputs; always cross-check indicators to detect virtualized environments. In recent architectures like (Family 1Ah), new extended leaves for features such as monitoring require validation of the extended maximum function (EAX=80000000h) to confirm support.

Core Standard Functions

EAX=0: Vendor Identification and Maximum Function

The CPUID instruction, when invoked with set to 0, serves as the initial query for identifying the vendor and determining the highest supported function leaf in the standard range (0 to the returned maximum). This leaf outputs the maximum value for in subsequent calls, allowing software to bound its enumeration of capabilities without invoking unsupported functions. The instruction requires ECX to be 0; values greater than 0 in ECX are ignored for this leaf. Unlike other leaves, no feature bits are returned here, focusing solely on identification and scoping. Upon execution, receives the largest valid input value for basic CPUID functions, typically ranging from 1 on early supported processors to higher values like 0x1A on modern implementations, indicating support for leaves up to that number (for example, a maximum of signals availability of the extended feature leaf EAX=7). The vendor identification , a 12-character ASCII , is distributed across EBX, , and ECX as four-byte little-endian words, which must be concatenated in the order EBX + EDX + ECX to form the readable . Each holds the bytes such that extracting from low to high byte order yields the correct : for instance, on processors, EBX=0x756E6547 (bytes 'G','e','n','u'), EDX=0x49656E69 (bytes 'i','n','e','I'), and ECX=0x6C65746E (bytes 'n','t','e','l'), yielding "GenuineIntel". Common vendor strings include "GenuineIntel" for processors, "AuthenticAMD" for processors (e.g., EBX=0x68747541 for bytes 'A','u','t','h'; EDX=0x444D4163 for 'c','A','M','D'; ECX=0x69746E65 for 'e','n','t','i'), and "CentaurHauls" for (VIA) processors. This leaf is essential as the first invocation in any CPUID routine, enabling vendor-specific handling and preventing invalid queries that could return undefined results. Historically, the CPUID was introduced with the processor in 1993; on pre-Pentium x86 processors like the 486, executing CPUID triggers an invalid exception (#UD), while early supported models return 0 in to indicate no additional basic functions beyond vendor identification.

EAX=1: Processor Identification and Basic Features

When the CPUID instruction is executed with set to 1, it returns detailed identification and basic feature information in the general-purpose registers. This provides the processor's version details in , a and related parameters in EBX, and feature indication bit vectors in ECX (bits 0-31) and (bits 0-31, corresponding to features 32-63 in the overall set). The value returned in encodes the 's stepping, model, family, and extended identifiers. Bits 3:0 hold the stepping ID, bits 7:4 and 11:8 provide the base model (with bits 19:16 as the extended model for families 6, 15, or higher), bits 15:12 indicate the type (e.g., 0 for the original OEM ), bits 27:20 supply the extended family, and the remaining bits are reserved. To decode the effective family ID, software computes base = ( >> 8) & 0xF; extended = ( >> 20) & 0xFF; effective family = base + (base == 0xF ? extended : 0). Similarly, the full model is (( >> 16) & 0xF) << 4 | (( >> 4) & 0xF) when applicable for extended models. This decoding allows operating systems to identify the generation precisely during initialization. EBX returns auxiliary information, including bits 7:0 as the brand index (deprecated since in favor of extended leaves for name strings), bits 15:8 as the cache line size for CLFLUSH in bytes (typically or 128), bits 23:16 as the number of logical s sharing the core's ( for single-threaded, higher for ), and bits 31:24 as the initial local APIC ID. The brand index, when non-zero, historically pointed to a brand string via EAX=0's maximum sub-leaf, but modern s return 0 here and provide names through other mechanisms. ECX and EDX contain bit flags indicating support for core x86 features, with each bit set to 1 denoting availability. These flags are crucial for software to enable or disable instruction sets and capabilities at runtime. The following tables summarize key bits; full lists are defined per vendor, with some AMD-specific flags like 3DNow! in extended leaves.
ECX BitFeature NameDescription
0Streaming SIMD Extensions 3 support.
1PCLMULQDQCarry-less for AES-GCM.
3MONITOR/MWAIT for lightweight sleeping.
5VMXIntel VT-x for .
9Supplemental Streaming SIMD Extensions 3.
13CMPXCHG16B128-bit compare-and-swap.
19SSE4.1Streaming SIMD Extensions 4.1.
21x2APICExtended xAPIC mode.
22MOVBEMOV with byte-order reversal.
23POPCNTPopulation count instruction.
25AESNIAES new instructions.
28Advanced Vector Extensions (precursor to later SIMD expansions).
29Half-precision floating-point conversion.
30Hardware random number generator.
EDX BitFeature NameDescription
0On-chip .
1Virtual-8086 mode enhancements.
2DEI/O extensions.
3PSE4-MB size support.
4TSC.
5MSRRDMSR/WRMSR support.
6PAE for 36-bit addressing.
7MCE.
8CX8CMPXCHG8B instruction.
9APICOn-chip APIC hardware.
11SEPSYSENTER/SYSEXIT fast system calls.
12MTRRMemory type range registers.
15CMOVConditional move instructions.
16PATPage attribute table.
19CLFLUSHCache line flush instruction.
23MMXMultimedia extensions.
24FXSRFXSAVE/FXRSTOR and CR4.OSFXSR.
25.
26 (required for ).
28HTT Technology (multi-threading).
29TMThermal Monitor clock modulation.
For basic identification, software uses sub-leaf ECX=0; higher values of ECX (1 through 3 on processors) return components of the brand string in /EBX/ECX/, but this mechanism is deprecated post-2008, with modern systems relying on extended function 80000002h-80000004h instead. This leaf is essential for operating system bootstrapping, as it enables detection of fundamental capabilities like ( bit 26), which indicates x86-64 mode support when combined with vendor identification from =0.

EAX=2: Cache and TLB Descriptors

When the instruction is executed with set to 2, it returns information about the processor's internal s and translation lookaside buffers (TLBs) in the form of compact descriptor bytes encoded in the , EBX, ECX, and registers. This function was introduced to allow software to discover memory subsystem characteristics without relying on vendor-specific assumptions, enabling optimized code for different processor generations. Each of the four 32-bit registers contains up to four 8-bit descriptor values, treated as a flat byte array across all registers. The least significant byte of is the first descriptor, followed by the remaining bytes of , then EBX, ECX, and . A descriptor value of 00H signals the end of valid information in the current execution, requiring additional invocations of CPUID with =2 to retrieve further descriptors if needed. On some , bit 31 of each register indicates validity (1 for valid, 0 for invalid), and software must ignore invalid registers; additionally, the least significant byte of may return 01H, which should be disregarded as it does not represent a meaningful descriptor. Descriptors are unordered and may repeat or vary by model, so enumeration involves collecting and decoding all non-zero bytes until 00H is encountered across multiple calls. The descriptor bytes encode specific attributes of caches and TLBs, such as size, associativity, line length, and entry counts, using standardized codes defined by . For example, the code 06H typically describes an 8 KiB, 4-way set associative instruction with 32-byte lines, while 50H might indicate a 64-entry, 4-way TLB for 4 KiB pages. Another representative encoding, 2CH, denotes a 32 KiB, 8-way first-level with 64-byte lines. These codes prioritize brevity for software but lack the of leaves, often requiring lookup tables for decoding. A value of FFH in a descriptor signals that detailed cache parameters should instead be queried using CPUID with =4. This function is primarily relevant to Intel processors and has been deprecated in favor of more structured enumerations like =4 (deterministic parameters) on processors supporting 64 architecture, as the original descriptors can be ambiguous or processor-specific. On processors (Family 0Fh and later), =2 is reserved, returning undefined or zeroed values in all registers, with and TLB details instead provided via extended functions such as =80000005H (L1 details) and =80000006H ( details). Software targeting cross-vendor compatibility must therefore detect the vendor via =0 and fallback to appropriate leaves.

EAX=3: Processor Serial Number

When the CPUID is executed with set to 3, it returns portions of a 96-bit serial number on supported hardware. Specifically, holds bits 31–0, holds bits 63–32, and ECX holds bits 95–64 of the serial number, while EBX is reserved. Support for this feature is indicated by bit 18 (PSN) in the register from the EAX=1 . Introduced with the processor in 1999, the serial number was intended for applications such as anti-piracy protection, digital content authentication, and . The unique identifier was programmed into the processor at manufacturing and could be read by software, extending basic processor identification. The feature quickly drew criticism for risks, as it allowed websites and applications to retrieve a persistent hardware identifier, potentially enabling user tracking across sessions without consent. Organizations like the highlighted these dangers, stating that the risks outweighed potential security benefits. advocates, including Junkbusters, called for a , amplifying concerns over implications. In response, disabled the serial number by default via settings starting in late 1999 and fully phased it out by 2001 in subsequent processors like the Pentium 4. If disabled—typically controlled by a bit—the instruction returns all zeros in , ECX, and EDX. Modern and processors deprecate this leaf entirely, returning zeros with no sub-leaves available. Due to its obsolescence and privacy issues, software developers are advised to avoid querying EAX=3.

Cache, Topology, and Performance Leaves

EAX=4: Deterministic Cache Parameters

The CPUID instruction with set to 4 provides a standardized, deterministic method to enumerate the parameters of a processor's , allowing software to query detailed attributes for each cache level through sub-leaves indexed by ECX. This leaf was introduced to offer more precise and consistent information compared to earlier mechanisms, enabling better cache-aware optimizations in applications such as compilers and operating systems. When invoked, the outputs in , EBX, ECX, and describe the cache type, size components, sharing characteristics, and behavioral flags for the specified sub-leaf. For sub-leaf 0 (ECX=0), the instruction returns the maximum valid sub-leaf index in bits 31:26 (adding 1 to the value), indicating the number of cache levels available for ; subsequent sub-leaves (ECX=1, 2, etc.) describe individual s until a entry is encountered. The cache type is encoded in bits 4:0, where 0 denotes a (invalid) entry, 1 indicates a data cache, 2 an instruction cache, and 3 a unified cache that handles both data and instructions. bits 7:5 specify the cache level (starting from 1 for L1), while bit 8 flags a self-initializing cache (requiring no software initialization), and bits 25:14 report the number of logical processors (threads) sharing the cache (adding 1 to the value). Additionally, bits 31:26 in valid sub-leaves indicate the maximum number of cores sharing the cache (adding 1). The EBX register provides key sizing parameters: bits 11:0 give the system coherency line in bytes (adding 1), bits 21:12 the physical line partitions (adding 1), and bits 31:22 the ways of associativity (adding 1). ECX bits 31:0 represent the number of sets in the (adding 1 to compute the full count). These values allow calculation of the total in bytes as (ways of associativity + 1) × (physical partitions + 1) × (coherency line + 1) × (number of sets + 1), offering a complete picture of capacity without ambiguity. bits 0:2 further detail : bit 0 indicates write-back invalidate propagation to lower levels, bit 1 denotes inclusivity (where higher levels include all lower-level contents), and bit 2 flags complex indexing (beyond simple direct mapping). The remaining bits in are reserved. This is fully supported on processors starting from , where, for example, sub-leaf 1 typically describes an 8-way associative, 4-partitioned L1 data of 32 KB (with 64-byte lines and 64 sets), while higher sub-leaves cover L2 unified caches (e.g., 256 KB per core) and shared L3 caches (e.g., 8 MB with 16 ways). provides partial support for leaf 4 on Zen-based processors and later, using it alongside extended leaves for complete , though some parameters may rely on or vendor-specific queries for full accuracy. Enumeration via this leaf facilitates optimizations like data alignment to cache lines or prefetching strategies, and it supersedes the packed descriptors from the EAX=2 leaf by providing indexed, hierarchical details. It primarily targets caches but can indirectly inform on translation lookaside buffers (TLBs) in implementations where they share similar hierarchical traits.

EAX=B: Thread and Core Topology

The CPUID leaf B (hexadecimal 0BH, decimal 11) provides information on processor topology, enabling software to enumerate relationships between logical processors, physical cores, and higher-level domains such as processor packages. This leaf was introduced with the Intel Nehalem microarchitecture in 2008 and is supported on subsequent Intel 64 processors. To invoke it, software sets EAX to 0BH and uses ECX to specify a sub-leaf index corresponding to a topology level, starting from 0 and incrementing until an invalid level is reached. The outputs in EAX, EBX, ECX, and EDX describe the properties of the current level, including the number of logical processors within it and identifiers for mapping the hierarchy. The register outputs for a valid sub-leaf are detailed as follows:
RegisterBitsField NameDescription
4:0Level Shift WidthNumber of bits to shift right the x2APIC ID to obtain the ID of the next higher-level domain (e.g., from thread to ). Reserved on invalid levels.
31:5ReservedAlways 0.
EBX15:0Logical ProcessorsNumber of logical processors at this topology level minus 1 (e.g., value 1 indicates 2 logical processors).
EBX31:16ReservedAlways 0.
ECX7:0Sub-leaf IndexThe input sub-leaf value (matches ECX input).
ECX15:8Level TypeEncodes the topology domain: 1 for (, or logical processor level), 2 for (physical core level). Values 0 and 3-255 indicate invalid or reserved levels.
ECX31:16ReservedAlways 0.
EDX31:0x2APIC IDThe 32-bit x2APIC ID of the current logical processor, used for identifying and mapping processors in multi-socket systems.
These fields allow derivation of bit masks for extracting sub-IDs (e.g., ID from low bits of x2APIC, core ID from subsequent bits) to build the full hierarchy. In 64-bit mode, software should use the full 64-bit registers (RAX, , RCX, ) to capture the complete 32-bit values without truncation. Enumeration begins by executing CPUID with EAX=0BH and ECX=0 to query the lowest level (typically ), then increments ECX for subsequent levels (e.g., at ECX=1) until EBX[15:0] returns 0, indicating an invalid sub-leaf. Each valid level provides the shift width in [4:0] to distinguish entities at that scope from lower ones, assuming symmetric across . For example, on a with , the level (type 1) might report EBX[15:0]=1 (2 threads per ), and the level (type 2) might report EBX[15:0]=3 (4 cores per package), allowing computation of total logical processors as the product across levels: ( + 1) × ( + 1) = 2 × 4 = 8. This process supports up to three primary domains (, , package) but may include reserved types for future extensions like modules. This topology data is essential for NUMA-aware scheduling in operating systems and applications, where x2APIC IDs help map threads to nearby cores or packages to minimize in multi-socket systems. It complements sharing information from leaf 4 by providing hierarchical processor relationships rather than just parameters. Software must first verify support via CPUID leaf 1 (e.g., checking ECX for x2APIC) before using leaf B. Limitations include lack of support on pre-Nehalem processors (e.g., those before 2010, which return invalid results), and the enumeration assumes uniform topology, requiring additional handling for asymmetric configurations. Leaf B has been largely superseded by the more flexible leaf 1FH for extended topologies in modern processors.

EAX=15 and EAX=16: Clock Frequencies

CPUID leaves 15H and 16H provide information on processor clock frequencies, enabling software to determine nominal rates for the Time Stamp Counter (TSC), core crystal, base processor, maximum turbo, and bus reference clocks. These leaves were introduced in Intel's Skylake microarchitecture in 2015 and are supported on subsequent Intel Core and Xeon processors. They return data in the general-purpose registers following execution of the CPUID instruction with EAX set to 15H or 16H and ECX=0 for the primary subleaf.

Leaf 15H: TSC and Core Crystal Clock Information

When =15H and ECX=0, the leaf returns parameters for calculating the TSC relative to the nominal core crystal clock. The registers are populated as follows:
RegisterBitsValue
31:0Denominator of the TSC/core crystal clock ratio (non-zero value; 1 if the ratio is not enumerated)
EBX31:0Numerator of the TSC/core crystal clock ratio (non-zero value; 1 if the ratio is not enumerated)
ECX31:0Nominal core crystal clock in Hz (non-zero if enumerated; typically 24 MHz or 25 MHz; 0 if not available)
EDX31:0Reserved (returns 0)
The TSC frequency can be computed as the core crystal clock frequency multiplied by the ratio of numerator to denominator: TSC frequency (Hz) = ECX × (EBX / ). If EBX=0, the ratio is not enumerated by the . For the subleaf with ECX=1, the registers provide the TSC to bus reference clock ratio: =0, EBX=denominator, ECX=numerator, and =bus reference clock frequency in kHz (all reserved or zero if not supported). This leaf is enumerated as supported via CPUID leaf 7H (ECX=0), where bit 15 of EBX indicates availability for 15H. These values are useful for calibrating the TSC in performance analysis tools and counters, as the TSC increments at a constant rate tied to the core crystal but independent of dynamic frequency scaling. However, the returned frequencies represent nominal specifications and do not reflect actual operating frequencies, which may vary due to turbo boost or power management states.

Leaf 16H: Base, Maximum, and Bus Frequencies

When EAX=16H and ECX=0, the leaf returns nominal processor frequency information in MHz units for diagnostic and display purposes. The registers are populated as follows:
RegisterBitsValue
EAX15:0Processor base frequency in MHz (0 if not supported)
EAX31:16Reserved (returns 0)
EBX15:0Maximum efficiency frequency or turbo frequency in MHz (0 if not supported)
EBX31:16Reserved (returns 0)
ECX15:0Bus (reference) frequency in MHz (0 if not supported)
ECX31:16Reserved (returns 0)
EDX31:0Reserved (returns 0)
No additional calculations are required, as frequencies are directly encoded in the lower 16 bits of EAX, EBX, and ECX. This leaf is enumerated as supported via CPUID leaf 7H (ECX=0), where bit 16 of EBX indicates availability for 16H. Like leaf 15H, the data pertains to nominal values from the processor specification sheet and should not be used for real-time performance monitoring, where actual frequencies can exceed the base due to turbo modes. For dynamic event-based monitoring, software may cross-reference these with architectural performance counters from leaf 0AH.

EAX=23: Architectural Performance Monitoring

The CPUID =23H provides detailed enumeration of architectural performance monitoring (APM) capabilities on supported x86 processors, allowing software to query the version, configuration, and features of performance counters for optimizing workload analysis and . This extends the foundational performance monitoring support from earlier leaves like =0AH by offering subleaf-specific details on general-purpose () counters, fixed-function counters, supported events, and advanced sampling mechanisms such as Precise Event-Based Sampling (PEBS). It is accessible only if the extended architectural performance monitoring feature is enabled, indicated by CPUID.(=07H, ECX=0H):=1. To invoke this leaf, software sets to 23H and ECX to the desired subleaf index, with results returned in , EBX, ECX, and registers. Subleaf 0 delivers core architectural information: [7:0] specifies the version ID (e.g., 1 for initial implementations), [15:8] reports the number of GP counters per logical (typically 4-8), [23:16] indicates the bit width of those counters (e.g., 48 bits for high-resolution counting), and [31:24] denotes the length of the EBX bit vector for event support. EBX serves as a bit vector enumerating supported architectural events, such as core cycles (bit 0) or instructions retired (bit 1), enabling software to identify available metrics without vendor-specific assumptions. ECX[7:0] provides the number of execution slots per cycle (multiplied by core cycles for total throughput estimation), while ECX[15:8] counts fixed-function counters; [4:0] similarly tallies fixed counters (often 3-4 for uncore events), with [12:5] giving their bit width and signaling deprecation of AnyThread sampling modes. Higher subleaves (ECX=1 through 5) extend this granularity: for instance, subleaf 1 provides bitmaps of supported GP and fixed counters, subleaf 3 lists event bitmaps, and subleaves 4-5 detail PEBS configurations, including support for Architectural PEBS (APEBS) via bitmaps of compatible counters and features like counter groups (e.g., METRICS, FIXED, GPR) and PEBS with Processor Distributor (PDIST). This leaf facilitates detection of both programmable (variable) GP counters for custom events and fixed counters for invariant metrics like total cycles or reference cycles, crucial for tools such as the perf subsystem to dynamically configure monitoring without hardcoded assumptions. By querying subleaf 0's EBX[7:0] for GP counter count and EBX[15:8] for bit width (noting EBX here aligns with general counter properties in some implementations), software can allocate resources efficiently and avoid overflows in long-running traces. Features like PEBS (EDX bits in subleaf 0) enable low-overhead, precise sampling of events, with EDX indicating basic PEBS support and higher bits for extensions like APEBS, which uses dedicated MSRs (e.g., IA32_PEBS_BASE) for record buffering. Introduced as an extension for modern architectures, =23H saw significant enhancements in 2024 with Intel's Granite Rapids processors (Family 06H, Models ADH/AEH), adding subleaves 4 and 5 for APEBS bitmaps, expanded event support (e.g., over 100 architectural events including new branch and cache metrics), and counter group configurations via MSRs like IA32_PMC_GPn_CFG for including subgroups (e.g., LBR, AUX) in PEBS records. AMD's architecture (e.g., 9000 series, released 2024) similarly bolstered performance monitoring with additional events tailored to its wider dispatch (up to 6 ) and improved branch prediction, integrated into the perf framework via kernel patches for Zen 5-specific counter decoding, though AMD primarily leverages extended leaves like 80000022H for analogous discovery. These updates bridge gaps in prior generations, providing more events for hybrid core analysis and energy efficiency tracking without relying on clock frequencies from leaves like =15H/16H.
Subleaf (ECX)Key FocusRepresentative Outputs
0General APM infoEAX: Version, GP count/width; EBX: Event vector; ECX/EDX: Fixed counters/slots
1Counter supportEAX: GP bitmap; EBX: Fixed bitmap
2Auto Counter Reload (ACR)EAX/EBX: GP/fixed ACR bitmaps; ECX/EDX: Reload-trigger bitmaps
3Event enumerationEAX: Supported events bitmap (e.g., cycles, retired instructions)
4PEBS capabilitiesEBX: Groups (e.g., bit 3: ALLOW_IN_RECORD; bits 7:4: subgroups)
5APEBS/PEBS details (Granite Rapids+)EAX/ECX: APEBS GP/fixed bitmaps; EBX/EDX: PDIST support
This structure ensures comprehensive, processor-agnostic discovery while prioritizing scalability for tools analyzing multi-core workloads.

Power, Thermal, and Specialized Features

EAX=5: MONITOR and MWAIT Capabilities

CPUID leaf 5, accessed by loading with the value 5 prior to executing the CPUID , provides parameters related to the and MWAIT instructions, which enable efficient thread synchronization and by allowing a core to wait for specific memory events while entering low-power states. The instruction arms the to detect writes to a specified , defined in terms of monitor-line sizes, while MWAIT causes to enter an implementation-dependent optimized state—typically a light sleep corresponding to C-states—until a monitored event occurs or another break condition is met. These instructions are particularly useful for hinting the about periods, allowing it to reduce consumption more granularly than the HLT . The monitor-line sizes returned indicate the for the , which must align with line boundaries to ensure correct operation and avoid false wakeups or missed events. Upon execution, the registers return the following information:
RegisterBitsDescription
15:0Smallest monitor-line size in bytes (typically , matching the processor's line granularity).
31:16Reserved (must be 0).
EBX15:0Largest monitor-line size in bytes (a power-of-2 multiple of the value in ).
31:16Reserved (must be 0).
ECX0MONITOR/MWAIT extensions supported (1 indicates support for advanced features).
1Interrupts as break events for MWAIT supported even when interrupts are disabled (IF=0 in EFLAGS).
31:2Reserved.
EDX3:0Number of C0 sub C-states supported using MWAIT.
7:4Number of C1 sub C-states supported using MWAIT.
11:8Number of sub C-states supported using MWAIT.
15:12Number of sub C-states supported using MWAIT.
19:16Number of sub C-states supported using MWAIT.
23:20Number of C5 sub C-states supported using MWAIT.
27:24Number of C6 sub C-states supported using MWAIT.
31:28Number of C7 sub C-states supported using MWAIT.
The extensions in ECX bit 0 enable additional MWAIT capabilities, such as sub-C-state , while bit 1 allows interrupts to reliably wake the processor from MWAIT even in non-maskable configurations, enhancing responsiveness in interrupt-driven environments. The register details the supported sub-C-states (implementation-specific hints for deeper levels), with values indicating how many variants of each C-state (from C0, the active , to C7, a deeper ) can be requested via MWAIT encodings. No sub-leaves are defined for this function, as ECX must be 0 on input. Support for leaf 5 is indicated by the feature flag in CPUID leaf 1 (ECX bit 3 = 1) and has been available since processors implementing (), starting with the Prescott-core family in 2004. In practice, operating systems use these parameters in loops to select appropriate monitor-line sizes and C-state hints, ensuring the waiting core aligns with coherency domains for optimal power savings without excessive . For example, kernels query these values to configure per-core polling, balancing with quick resumption on events like interrupts. These leaves are primarily defined for processors; uses extended leaves for similar monitoring capabilities.

EAX=6: Thermal and

The with set to 6 enumerates key thermal and management features available on processors, enabling software to detect capabilities for monitoring, scaling, and efficiency optimizations. This leaf returns values in the , EBX, ECX, and registers that describe support for on-die sensors, timer behaviors, and hardware feedback mechanisms essential for managing thermal throttling and limits. Introduced with in 2006, it has no sub-leaves and is executed in or without affecting processor state. The EAX register primarily flags core thermal and power features. Bit 0 (DTS) indicates support for the Digital Thermal Sensor, an on-die mechanism that provides temperature readings relative to a throttling threshold via the IA32_THERM_STATUS MSR, allowing software to detect and respond to thermal conditions before throttling occurs. Bit 1 signals availability of dynamic performance states, such as Intel Turbo Boost Technology, for opportunistic frequency increases within power budgets. Bit 7 (HW P-state) denotes support for Hardware P-states (HWP), where the processor autonomously adjusts performance levels based on workload hints from the OS, reducing software overhead in power management. Bit 8 indicates HWP Notification support (IA32_HWP_INTERRUPT MSR), facilitating interrupt-based feedback on performance state changes. Other bits in EAX, such as bit 2 (ARAT), confirm the Always Running APIC Timer, ensuring the local APIC timer operates at a bus-independent constant rate (typically TSC frequency) even during frequency scaling or power states, which aids precise timing in virtualized or multi-threaded environments.
EAX BitFeatureDescription
0DTSDigital Thermal Sensor support for on-die temperature monitoring.
1Performance StatesSupport for like Turbo Boost.
2ARATAlways Running APIC Timer for constant-rate operation.
7HW P-stateHardware P-states (HWP) for autonomous performance control.
8HWP NotificationSupport for IA32_HWP_INTERRUPT MSR for HWP .
The EBX register reports the number of interrupt thresholds supported by the DTS in bits 0-3, allowing of multiple temperature alert levels for proactive thermal management; higher bits are reserved. ECX details processor-wide cycle counters and capabilities, with bit 0 indicating hardware coordination for energy-efficient scheduling and bits 8-15 specifying the number of performance classes for thread director features in architectures. EDX focuses on domain performance metrics, including bits 0-7 for hardware interface (HFI) capabilities that provide utilization data across disaggregated domains (e.g., compute, ), bits 8-11 for the size of the structure (in 4 pages plus one), and bits 16-31 for the logical processor's row index in that structure, enabling fine-grained allocation in multi-domain SoCs. These features are particularly useful for detecting thermal throttling risks, as DTS readings can trigger OS interventions like or speed adjustments before hardware-enforced limits activate. The ARAT , for instance, ensures reliable delivery without TSC synchronization issues during power transitions, complementing wait mechanisms like MWAIT from CPUID 5. In modern implementations, such as successors to (e.g., Lunar Lake and Arrow Lake architectures released around 2024), 6 enhancements extend HFI reporting to new power domains, including low-power islands and integrated accelerators, improving efficiency in scenarios with up to 20% better power granularity over prior generations. These leaves are primarily defined for processors; uses extended leaves (e.g., EAX=80000007h for and invariant TSC) for similar features.

EAX=7: Structured Extended Feature Enumeration

The CPUID instruction with EAX set to 7 enables structured extended feature enumeration, a mechanism introduced in Intel processors starting with the Haswell microarchitecture to systematically report support for advanced instruction sets, security features, and hardware capabilities that extend beyond the unstructured flags in leaf 1. Unlike earlier leaves, this leaf organizes information across multiple sub-leaves indexed by the ECX input register, where ECX=0 provides the primary set of features, and higher values (up to the maximum indicated in EAX bits 7:0 for ECX=0) offer additional details for evolving architectures. Software typically queries sub-leaf 0 first to determine the highest valid sub-leaf, then probes subsequent ones to enable conditional use of instructions like AVX2 or AVX-512 variants, often in conjunction with OS support for state management via XGETBV. This structured approach facilitates forward compatibility, allowing detection of features like vector extensions and power management without relying on legacy bitmasks. For sub-leaf 0 (ECX=0), the EBX enumerates foundational extended features, focusing on base address management, processing, and security primitives. Key bits include bit 0 (FSGSBASE) for instructions that read/write FS and GS segment bases without full context switches, bit 5 (AVX2) for 256-bit integer and floating-point operations, and bit 16 (AVX512F) signaling the foundation for 512-bit computations when combined with appropriate XCR0 state. The ECX for this sub-leaf covers advanced manipulations and protection mechanisms, such as bit 1 (AVX512VBMI) for byte-level instructions and bit 3 (PKU) for user-mode keys, which require OS enablement via bit 4 (OSPKE). The EDX reports architectural capabilities, including bit 0 (LA57) for 57-bit linear address support in 64-bit mode and bit 2 (ARCH_CAPABILITIES) indicating the presence of an MSR for mitigations. Additional features include EDX bit 4 (AVX512VP2INTERSECT) for intersection operations and bit 22 (AVX512BF16) for bfloat16 support in AI workloads.
RegisterBitFeatureDescription
EBX0FSGSBASESupports RDFSBASE, RDGSBASE, WRFSBASE, WRGSBASE instructions for efficient segment base access.
EBX5AVX2Supports 2 for enhanced 256-bit SIMD operations.
EBX7SMEPSupports Execution Prevention to restrict execution of pages.
EBX16AVX512FSupports Foundation for 512-bit processing (requires XCR0 enablement).
EBX19ADXSupports multi-precision arithmetic with ADCX and ADOX instructions.
EBX29AVX512BWSupports Byte and Word operations for finer-grained handling.
ECX0PREFETCHWT1Supports PREFETCHWT1 for write-combining cache hints.
ECX1AVX512VBMISupports byte manipulation for and .
ECX3PKUSupports Protection Keys for User-mode pages to control access permissions.
ECX5WAITPKGSupports TPAUSE, UMONITOR, UMWAIT for lightweight waiting mechanisms.
ECX8GFNISupports Galois Field instructions for efficient and .
ECX9VAESSupports vectorized instructions for accelerated .
ECX24BUS_LOCK_DETECTDetects and enumerates bus lock events for optimization.
ECX27MOVDIRISupports direct store of immediate values to memory, bypassing caches.
ECX28MOVDIR64BSupports 64-byte direct stores for bulk data transfer.
EDX0LA57Supports 57-bit linear addresses for expanded .
EDX2ARCH_CAPABILITIESIndicates support for IA32_ARCH_CAPABILITIES MSR detailing side-channel mitigations.
EDX4AVX512VP2INTERSECTSupports intersect instructions for set operations in databases.
EDX10MD_CLEARSupports VERW instruction for microarchitectural data clearing.
EDX22AVX512BF16Supports bfloat16 instructions for low-precision computations.
Sub-leaf 1 (ECX=1), available on processors supporting at least this index (as reported in for sub-leaf 0), primarily uses the EBX to detail specialized features building on prior capabilities. As of 2025 architectures, bit 3 (RAO-INT) enumerates for remote atomic operations on integers, enabling instructions like AADD, AAND, AOR, and AXOR for scenarios without full overhead. Other bits cover features like Last Branch Records and core capabilities. Higher bits in EBX may cover emerging features like linear separation (LASS), but ECX and EDX are typically reserved or zero for this sub-leaf.
RegisterBitFeatureDescription
EBX3RAO-INTSupports remote operations (AADD, AAND, etc.) for scalable .
Sub-leaf 2 (ECX=2), supported on select recent processors, extends to performance and I/O optimizations, with features reported mainly in EBX or depending on . This sub-leaf aids in enabling instructions for high-throughput data movement and performance monitoring, such as architectural performance counters, while ensuring compatibility with prior sub-leaves. The maximum sub-leaf value in allows software to probe up to the processor's capability, typically 2 or higher in 2024-2025 models, promoting efficient without unnecessary queries. These leaves are primarily defined for processors; has vendor-specific extensions in other ranges.
RegisterBitFeatureDescription
EBX0-31Performance MonitoringBitmap for architectural performance counters and extensions.

EAX=D: XSAVE and Extended States

CPUID leaf D (EAX=0DH) enumerates the processor's support for the XSAVE feature set, which enables software to save and restore extended processor states beyond the traditional x87 FPU and SSE registers, such as those introduced by AVX and later extensions. This leaf is accessed by setting EAX to 0DH and using ECX to specify a sub-leaf index, with outputs returned in EAX, EBX, ECX, and EDX providing details on supported state components, their sizes, offsets, and operational capabilities. The XSAVE feature set is initially indicated by bit 26 (XSAVE) in EDX from CPUID leaf 1 and further enabled via bit 27 (OSXSAVE) in ECX from the same leaf, allowing use of XGETBV/XSETBV to manage the XCR0 register. For sub-leaf 0 (ECX=0), the outputs provide foundational information on the XSAVE area: returns the maximum supported sub-leaf index or the maximum size of the XSAVE area in bytes; EBX indicates the size in bytes of the XSAVE area required for features enabled in XCR0; ECX serves as a of valid XSAVE feature bits corresponding to XCR0 (with bit 0 for FPU/MMX , bit 1 for , bit 2 for AVX YMM , and higher bits for extensions like components); and EDX returns the upper 32 bits of supported XCR0 features. Sub-leaf 1 (ECX=1) focuses on operational components: enumerates XSAVE sub-features such as bit 0 for XSAVEOPT and bit 3 for XSAVES ; EBX gives the size of the XSAVE area when combining XCR0 and IA32_XSS enabled features; ECX provides supported IA32_XSS bits (for supervisor states) along with the size of the largest component and bits indicating compacted (bit 0) and 64-byte in compaction (bit 1); EDX returns the upper 32 bits of supported IA32_XSS. Higher sub-leaves (ECX > 1) detail individual components, where the sub-leaf index corresponds to the bit position in XCR0 or IA32_XSS: returns the size in bytes of the save area for that component; EBX provides the offset in bytes from the start of the XSAVE area or the number of bytes required to save/restore it; ECX indicates whether the component is in XCR0 (bit 0=0) or IA32_XSS (bit 0=1), with bit 1 for compacted format using the next 64-byte boundary and bits 31:2 reserved; is reserved or provides additional information if valid, otherwise 0 for invalid sub-leaves. Representative components include bit 0 for FPU/MMX (512 bytes), bit 1 for XMM registers (160 bytes plus MXCSR), bit 2 for AVX YMM upper bits (256 bytes), bits 5–7 for elements like opmasks (64 bytes), ZMM_Hi256 (2048 bytes), and HI16_ZMM (8192 bytes), bit 9 for PKRU protection keys (8 bytes), bit 17 for AMX TILECFG (64 bytes), and bit 18 for AMX TILEDATA (up to 8 KB depending on configuration). These components are enumerated dynamically via CPUID to reflect capabilities, with support varying by microarchitecture from Nehalem-era AVX introduction through 2025 processors including AMX. The primary usage of leaf D information is in operating system context switching, where software employs XSAVE to save selected extended states to memory based on the XCR0 or IA32_XSS bitmaps, and XRSTOR or XSAVES to restore them, ensuring efficient management of vector and other extension states without saving unused components. This avoids the overhead of legacy FXSAVE/FXRSTOR instructions, which always save the full legacy region regardless of enabled features. For supervisor-mode states (via IA32_XSS), XSAVES provides optimized saving with lazy save/restore semantics. Compaction support, enumerated in sub-leaf 1 (ECX bits 0–1) and per-component sub-leaves (ECX bit 1), enables the XSAVEC and XSAVES instructions to use a compacted XSAVE area , where only enabled state components are saved contiguously starting after the 512-byte , potentially reducing the area size from thousands of bytes (e.g., full ) to hundreds for minimal configurations. The compacted includes an XCOMP_BV header bitmap tracking saved components and aligns each to 64-byte boundaries for cache efficiency, with XCR0 bit 63 indicating overall compaction enablement. This feature, available since Haswell processors, significantly improves performance in and multitasking scenarios by minimizing .
Sub-leaf (ECX)EAX OutputEBX OutputECX OutputEDX Output
0 (Basic)Max sub-leaf or max XSAVE size (bytes)XSAVE area size for XCR0-enabled featuresBitmap of XCR0-valid XSAVE features (bits 0–63)Upper 32 bits of XCR0 support
1 (Operational)XSAVE sub-features (e.g., bit 0: XSAVEOPT; bit 3: XSAVES)XSAVE area size for XCR0 | IA32_XSSIA32_XSS bits; largest component size; compaction bits (0: supported; 1: 64-byte align)Upper 32 bits of IA32_XSS
n > 1 (Component n)Size of component n save area (bytes)Offset or bytes to save/restore component nBit 0: in XCR0 (0) or IA32_XSS (1); bit 1: compaction alignment; bits 31:2 reservedReserved (0 if invalid) or state bitmap

Security and Advanced Capabilities

EAX=12: Software Guard Extensions (SGX)

The CPUID leaf EAX=12h provides enumeration of Intel Software Guard Extensions (SGX) capabilities, enabling software to detect support for secure enclave execution environments that protect sensitive code and data from higher-privilege software, including the operating system. This leaf is accessed by loading EAX with 12h prior to executing the CPUID instruction, with the ECX register specifying the sub-leaf index. Support for this leaf is indicated by bit 2 (SGX) of EBX returned from CPUID with EAX=07h and ECX=0h being set to 1. SGX facilitates confidential computing by allowing applications to create isolated enclaves within processor-reserved memory, ensuring integrity and confidentiality through hardware-enforced mechanisms. For the primary sub-leaf (ECX=0), the registers return details on core SGX functionality and limitations. EAX bits indicate supported instruction sets: bit 0 set to 1 denotes SGX1 support, encompassing basic enclave lifecycle instructions like ECREATE, EADD, EINIT, EREMOVE, and EENTER via the ENCLU ; bit 1 set to 1 denotes SGX2 support, adding dynamic enclave updates with instructions such as EEXTEND and EMODPE via ENCLU, along with enhanced reporting via EVERIFYREPORT and EGETKEY. Additional bits in EAX (e.g., bit 5 for ENCLV support, bit 6 for ENCLS support, bit 7 for ENCLU support) specify availability of enclave-related leaf functions for and . EBX provides a bit vector (MISCSELECT) enumerating supported extended SGX features, such as PROVISIONKEY or other enclave-specific attributes. ECX is reserved in this sub-leaf. EDX specifies maximum enclave sizes: bits 7:0 encode the exponent for the largest enclave in non-64-bit mode (maximum size = 2^value bytes), while bits 15:8 do the same for 64-bit mode. Sub-leaf ECX=1 enumerates valid attributes for the SECS (Secure Enclave Control Structure) that can be set during enclave creation with ECREATE. The registers report bitmasks of supported attributes: covers bits 31:0 (e.g., MODE64 for 64-bit enclaves, XFRM for masks), EBX covers bits 63:32 (e.g., flags for or provisioning), ECX covers bits 95:64, and covers bits 127:96. These attributes define enclave behavior, such as whether launch control is enforced via the PROVISIONKEY bit, which requires attestation for enclave initialization. Higher sub-leaves (ECX ≥ 2) enumerate sections of the Enclave Page Cache (EPC), a protected memory region reserved for enclave pages. Each valid sub-leaf (type 0001b in EAX bits 3:0) describes one EPC section: EAX bits 31:12 and EBX bits 19:0 form the 52-bit physical base address; ECX bits 31:12 and EDX bits 19:0 form the 52-bit size; ECX bits 3:0 indicate properties like confidentiality and integrity protection (0001b). Software enumerates these sequentially until an invalid type (0000b) is returned, allowing indirect determination of total EPC capacity by summing section sizes—typically up to 128 MB or more depending on the processor configuration. The number of sections varies by implementation but is usually small (e.g., 1-8), enabling detection of available secure memory for enclave allocation. This leaf was introduced with the Skylake microarchitecture in 2015, appearing in subsequent Intel Core and Xeon processors where SGX is enabled in hardware and BIOS. However, SGX has been deprecated on client platforms (Intel Core processors) starting from the 11th generation (Tiger Lake, 2020) and 12th generation (Alder Lake, 2021), with support continuing on server and Xeon processors as of 2025.
RegisterBitsDescription (ECX=0)
0SGX1 supported (ENCLU functions)
1SGX2 supported (ENCLU functions)
5ENCLV functions supported
6ENCLS functions supported
7ENCLU functions supported (e.g., EVERIFYREPORT2)
EBX31:0MISCSELECT: Supported extended SGX features
7:0MaxEnclaveSize_Not64 (exponent for non-64-bit mode)
15:8MaxEnclaveSize_64 (exponent for 64-bit mode)
RegisterBits Coverage (ECX=1)Description
EAXSECS.ATTRIBUTES[31:0]Valid bits for enclave mode, , etc.
EBXSECS.ATTRIBUTES[63:32]Valid bits for extended flags (e.g., launch control)
ECXSECS.ATTRIBUTES[95:64]Valid bits for additional attributes
EDXSECS.ATTRIBUTES[127:96]Valid bits for high-order attributes

EAX=14: Intel Processor Trace

CPUID leaf 14H provides enumeration information for Intel Processor Trace ( PT), a hardware-based tracing that captures low-overhead execution flow data, such as branches and timing packets, to aid in software and performance analysis. To access this leaf, software sets to 14H and ECX to 0 for the primary sub-leaf, which returns capabilities in the general-purpose registers. In sub-leaf 0 (ECX=0), indicates the maximum number of supported sub-leaves, typically 1 on processors with basic PT support. EBX contains bit fields detailing key features: bit 0 indicates support for CR3 filtering (via IA32_RTIT_CTL.CR3Filter and IA32_RTIT_CR3_MATCH MSR); bit 1 for configurable Packet Stream Boundary (PSB) and cycle-accurate mode; bit 2 for IP filtering, TraceStop filtering, and MSR preservation across warm resets; bit 3 for MTC (mini time counter) timing packets and suppression of COFI-based (conditional branch) packets; bit 4 for PTWRITE instruction support; and bit 5 for Power Event Trace packets. ECX specifies output schemes and extensions: bit 0 for ToPA (Table of Physical Addresses) output, enabling buffer management through a table of output endpoints for efficient trace collection; bit 1 for flexible ToPA table sizes; bit 2 for single-range output; bit 3 for Trace Transport Subsystem (TTS) support; and bit 31 for including the (CS) base in Last Inferred Packet () values. is reserved and returns 0. Sub-leaf 1 (ECX=1), if supported, provides further configuration details: bits 2:0 report the number of configurable address ranges for filtering (0 to 7); bits 15:3 are reserved; and bits 31:16 form a bitmap of supported MTC period encodings. EBX bits 15:0 indicate supported cycle threshold encodings for precise timing, while bits 31:16 cover PSB frequency encodings for packet boundaries. ECX and are reserved in this sub-leaf. These bits collectively define packet types (e.g., branch targets, timing) and buffer management options like ToPA for handling trace overflows without halting execution. Intel PT, enumerated via this leaf, is primarily used for non-intrusive tracing in and , capturing execution flows to reconstruct control paths and identify bottlenecks. It integrates with tools like perf, which decodes PT packets for analysis, supporting features such as cycle-accurate tracing through configurable PSB and MTC periods. Introduced in Broadwell processors in 2014, Intel PT availability is first detected via CPUID leaf 7H, sub-leaf 0, EBX bit 25. Extensions for cycle-accurate tracing, including enhanced PSB and MTC support, appeared in subsequent generations like Skylake. In hybrid architectures starting with (12th Gen Core, 2021), Intel PT operates on both Performance-cores (P-cores) and Efficient-cores (E-cores), with minor enhancements such as additional features like Event Trace and Taken/Not-Taken () packet disabling on E-core-only variants like Alder Lake-N, ensuring consistent tracing across core types without major architectural changes as of 2025.

EAX=17: System-on-Chip Vendor Attributes

The CPUID instruction with an input value of =17h enumerates System-on-Chip () vendor attributes, enabling software to identify key details about the design and its components in modern processors. This leaf is particularly relevant for disaggregated s where multiple vendors contribute subsystems, such as CPUs, integrated GPUs, and neural processing units (NPUs). When ECX=0 (the main sub-leaf), executing CPUID returns the maximum supported vendor index in (MaxSOCID_Index, indicating the number of enumerable vendors), the SoC vendor ID in EBX bits 15:0 along with bit 16 (IsVendorScheme, set to 1 if using an industry-standard scheme or 0 if Intel-assigned), the ID (a unique vendor-assigned number for the SoC ) in ECX, and the stepping ID (unique within the project) in EDX. Software can then iterate over sub-leaves ECX=1 through MaxSOCID_Index to retrieve vendor-specific brand strings, with each sub-leaf (up to 3 per vendor) providing UTF-8 encoded string parts across , EBX, ECX, and EDX registers, padded with null bytes (00h) as needed; sub-leaves beyond the maximum return zeros. These ASCII-compatible strings allow detection of configurations, for example in multi-vendor SoCs combining x86 cores with ARM-based peripherals. This functionality became available starting with Intel's in 2023, targeting SoCs with integrated accelerators like GPUs and NPUs for AI workloads. Beyond the provided vendor strings and IDs, further details are vendor-specific and not standardized, limiting portability to interpretation of the enumerated data. In multi-die topologies, this leaf complements broader processor enumeration but focuses solely on SoC-level vendor identification.

EAX=19: Intel Key Locker Features

The CPUID leaf =19H, with ECX=0, provides enumeration information for Key Locker, a hardware feature that enables secure management of encryption keys through an internal wrapping key mechanism. This leaf returns details in the , EBX, and ECX registers about supported restrictions, instruction enablement, and parameters, while is reserved. Key Locker allows software to encode application keys using instructions augmented with hardware protection, preventing key exposure in memory or during operations, and serves as a lightweight alternative to full trusted execution environments for key handling. The features enumerated by this leaf include support for AES Key Locker instructions (AESENCKEY128/256, AESDECKEY128/256, etc.), which perform key wrapping and unwrapping operations using an internal wrapping key (IWKey) derived from a random or platform-specific source. Key wrapping employs -GCM-SIV for authenticity and integrity, ensuring keys remain protected even if metadata is compromised. This integration supports usage in scenarios like secure storage for or data-at-rest protection, where keys are loaded via LOADIWKEY and operated on without direct software access to the raw IWKey.
RegisterBit PositionFeature Description
01 = Key Locker restricted to CPL=0 ( mode) only.
11 = No-encrypt restriction supported on handles (prevents encoding new keys).
21 = No-decrypt restriction supported on handles (prevents decoding existing keys).
31:3Reserved.
EBX01 = Key Locker instructions (AESKLE) fully enabled by OS and .
EBX21 = Wide Key Locker instructions (e.g., for 512-bit operations) supported (WIDE_KL).
EBX41 = IWKey backup via MSRs (e.g., IA32_KEYLOCKER_COPY_LOCAL_TO_PLATFORM) supported.
EBX31:5 (except noted)Reserved.
ECX01 = NoBackup parameter supported in LOADIWKEY (prevents IWKey persistence).
ECX11 = Random IWKey generation (KeySource=1) supported.
ECX31:2Reserved.
EDX31:0Reserved.
Key Locker integrates with by allowing key operations within enclaves, enhancing trusted execution without the full overhead of enclave management for simple key tasks. It was introduced in 11th Generation processors (code-named ) in 2020 and remains available in subsequent client architectures like and . No sub-leaves beyond ECX=0 are defined for this leaf.

Emerging and Vector Extensions

EAX=1D: AMX Tile Architecture Information

CPUID leaf 1Dh provides detailed information about the (AMX) tile architecture, enabling software to query the configuration of tile registers used for matrix operations in AI and workloads. When executed with set to 1Dh and ECX set to 0, this leaf returns basic architecture parameters in the general-purpose registers. Specifically, EAX bits 31:0 specify the maximum number of palettes supported, which is 1 in implementations supporting AMX tiles. EBX, ECX, and EDX are reserved and return 0 in this subleaf. Subleaf 1, accessed with ECX set to 1, enumerates the configuration details for Palette 1, the primary palette for AMX operations. The outputs are as follows:
RegisterBitsDescriptionValue (Palette 1)
15:0Total tile bytes8192
31:16Bytes per tile1024
EBX15:0Bytes per row64
EBX31:16Maximum number of tile names (registers)8
ECX15:0Maximum rows per tile16
ECX31:16Reserved0
EDX31:0Reserved0
This configuration defines tiles as 16 rows by 64 bytes each, resulting in 1024 bytes (1 KiB) per tile across 8 tile registers, for a total tile memory of 8192 bytes (8 KiB). This leaf was introduced in the microarchitecture, part of the 4th Generation Scalable processors launched in January 2023, where it supports tile configurations optimized for FP16 (via BF16) and INT8 types in multiply operations. Palette 1 accommodates these formats, allowing software to detect the available tile memory size for setting up efficient multiplications in / applications. The total tile bytes is calculated as the sum across all supported palettes; with a single palette, it equals 8192 bytes directly from the subleaf output. TMUL details are available if AMX-TILE is supported (CPUID (EAX=07H, ECX=0H): = 1).

EAX=1E: TMUL Engine Details

The CPUID leaf accessed by setting to 1EH provides information on the Tile Matrix Unit (TMUL), the accelerator within Intel's (AMX) for operations such as C[M][N] += A[M][K] * B[K][N], supporting dense formats in and HPC workloads. This leaf complements the AMX tile architecture enumerated in leaf 1DH by providing engine parameters. TMUL support requires AMX-TILE (CPUID (EAX=07H, ECX=0H):EDX = 1) and was introduced with AMX in (4th Gen Scalable, January 2023), with enhancements in 6 processors (Granite Rapids P-cores, CPUID 06_ADH; E-cores, 06_AFH) launched in 2024. When ECX is set to 0, EBX bits 7:0 report tmul_maxk (maximum rows/columns in K dimension, 16), and bits 23:8 report tmul_maxn (maximum column bytes in N dimension, 64); EAX, ECX, and EDX are reserved (return 0). Sub-leaves ECX >=1 are reserved.

EAX=21: Trust Domain Extensions (TDX)

The CPUID leaf EAX=21 provides enumeration of Intel Trust Domain Extensions (TDX), a hardware-based technology that enables confidential virtual machines (VMs) by isolating guest memory and execution from the host and physical threats through encryption and attestation mechanisms. When invoked with ECX=0, this leaf returns values indicating TDX support and basic module identification, allowing software such as the host Virtual Machine Monitor (VMM) and guest Trust Domains (TDs) to detect the TDX environment. EAX returns 0x00000000 (maximum sub-leaf 0, indicating TDX module presence), while EBX=0x65746E49, ECX=0x20202020, and EDX=0x5844546C collectively form the ASCII identifier "Intel TDX". For sub-leaves greater than 0 (ECX>0), all registers return 0x00000000, reserving space for future extensions related to module attestation and key management. Guest TDs use this , emulated by the TDX , to confirm in a protected and invoke TDCALL instructions for attestation reports and key provisioning, while the host VMM samples it during TDX initialization (via TDH.SYS.INIT and TDH.SYS.LP.INIT) to ensure platform compatibility across logical processors. These features enable enhanced security for VM-scale , contrasting with application-scale isolation in (SGX) enumerated via EAX=12.
RegisterValue (Sub-leaf 0)Description
EAX0x00000000Maximum sub-leaf (0); indicates TDX module presence
EBX0x65746E49Part of identifier "Intel TDX"
ECX0x20202020Part of identifier "Intel TDX" (spaces)
EDX0x5844546CPart of identifier "Intel TDX"
TDX support via this leaf first became available on 3rd Generation Scalable processors (Ice Lake-SP) in 2021, with broader deployment on 4th Generation () and later families. As of 2025, enhancements in TDX module version 1.5 introduce partial support for guest ownership models, allowing TDs greater control over attestation and key derivation processes, though full implementation remains platform-specific. Higher sub-leaves remain reserved for evolving attestation protocols and extensions.

EAX=24: AVX10 Vector ISA Features

The CPUID leaf EAX=24 enumerates features of the AVX10 Vector (ISA), a converged extension building on prior AVX instructions to provide standardized vector processing capabilities across x86 processors. This leaf allows software to query support for vector widths up to 512 bits and specific ISA elements, enabling portable SIMD code that extends beyond foundations without fragmentation. It was introduced as part of the AVX10 specification to facilitate runtime detection of capabilities like fused multiply-add (IFMA) and scatter/gather operations, promoting in workloads. When is set to 24, the sub-leaf index in ECX determines the queried information: ECX=0 provides base converged details, including the AVX10 version and supported vector lengths, while ECX=1 exposes discrete feature bits for additional extensions. For ECX=0, EBX bits 7:0 indicate the AVX10 version (value ≥1 for supported implementations), with bits 16, 17, and 18 signaling support for 128-bit (VL128), 256-bit (VL256), and 512-bit (VL512) vector operations, respectively; ECX bit 0 indicates AVX10.2 support; EDX bits 31:0 are reserved. For ECX=1, EBX, ECX, and EDX primarily hold reserved or processor-specific discrete bits, with future allocations possible for AVX10 sub-extensions like "AVX10-XXXX" features. These bitfields ensure precise enumeration of vector register usage (XMM for 128-bit, YMM for 256-bit, ZMM for 512-bit). This structure supports portable SIMD implementations by confirming converged ISA elements without relying on legacy AVX-512 flags alone. AVX10 via =24 was first announced in July 2024 with the AVX10.1 specification, debuting on Intel's Granite Rapids launched in September 2024. By October 2025, and ratified AVX10 as a standardized x86 extension through the x86 Ecosystem Advisory Group, ensuring full compatibility and enumeration consistency across both vendors' processors, including AMD's next-generation implementations.
RegisterBit(s)FeatureDescription
EBX (ECX=0)7:0AVX10 VersionConverged ISA version (≥1 indicates support)
EBX (ECX=0)16VL128128-bit vector support
EBX (ECX=0)17VL256256-bit vector support
EBX (ECX=0)18VL512512-bit vector support
ECX (ECX=0)0AVX10.2Support for AVX10.2 extensions
EDX (ECX=0/1)31:0ReservedFor future extensions

Extended AMD64 Functions

EAX=80000000h: Maximum Extended Function

When the CPUID instruction is executed with EAX set to 80000000h, it provides the entry point for determining support for extended functions in the AMD64 architecture and compatible processors. The value returned in EAX indicates the highest extended function number supported by the processor, enabling software to safely query subsequent extended leaves up to that maximum without invoking undefined behavior. For processors lacking AMD64 extended function support, EAX returns 0, signaling no extended range availability. In implementations, the maximum value in varies by processor family; for example, recent models such as those in the and architectures return 8000001Fh, encompassing features up to memory encryption capabilities. Additionally, , , and return the hexadecimal values 68747541h, 444D4163h, and 69746E65h, respectively, which form the ASCII string "AuthenticAMD" to confirm the vendor in the extended function context. These registers are otherwise reserved for general use. Intel processors, for compatibility with the AMD64 extended range, return a more limited maximum in , typically 80000008h, supporting basic and address size queries but not the full AMD-specific extensions. On , EBX, ECX, and are reserved and return 0 for this input. This function supports no sub-leaves and must be invoked prior to any other 80000000h-range calls to establish the valid query bounds, preventing errors from accessing unsupported functions.

EAX=80000001h: Extended Info and Features

When the instruction is executed with set to 80000001h, it returns extended processor identification and feature information tailored to the AMD64 architecture. This function provides details on the processor's , including for 64-bit operations and AMD-specific instruction extensions, serving as an extension to the basic CPUID leaf 1 for AMD processors. The outputs are stored in for details, ECX for certain extended features, and for a broader set of capability flags, while EBX contains a identifier that is typically or used for specific branding in AMD implementations. This leaf has no sub-leaves and is essential for software to verify AMD64 compatibility before enabling . The register delivers the extended signature, mirroring the structure of the basic CPUID EAX=1 but incorporating fields for higher revision levels common in AMD families starting from 15h (0Fh hexadecimal). Bits 3–0 hold the stepping ID, bits 7–4 the base model ID, and bits 11–8 the base family ID; bits 13–12 indicate the type, with bits 19–16 and 27–20 providing extended model and family IDs, respectively, while other bits are reserved. For with a base family ID of 0Fh (or certain models in families 06h/07h), the effective model is calculated as (extended model ID shifted left by 4) + base model ID, and the effective family as base family ID + extended family ID; this enables precise identification of advanced AMD like those in the Zen architecture series. The ECX register specifies AMD64-oriented feature flags, focusing on enhancements for 64-bit execution and compatibility. Bit 0 (LAHF_SAHF) indicates support for the LAHF and SAHF instructions within 64-bit mode, allowing efficient flag manipulation across operating modes. Bit 1 (CMP_LEGACY) signals core multi-processor mode, where the technology (HTT) bit from basic CPUID reflects multiple physical cores rather than logical threads. Bit 6 (SSE4a) indicates support for AMD-specific SSE4a instructions, enhancing SIMD operations with ExtrQ and InsertQ. Remaining bits are reserved or implementation-specific, emphasizing conceptual readiness for AMD64 environments over exhaustive checks. In contrast, the register enumerates a comprehensive set of feature bits, many aligning with x86 standards but highlighting AMD64 essentials like bit 20 (NX), which enables no-execute page protection to enhance by preventing code execution from data pages. Bit 11 confirms SYSCALL and SYSRET availability, bit 29 () verifies 64-bit addressing and execution support—critical for detecting full AMD64 capability—and bits 22 (MMXEXT) and 23 (MMX) indicate multimedia extensions. For legacy multimedia acceleration, bit 30 (3DNow! Ext.) and bit 31 (3DNow!) report support for AMD's 3DNow! instructions and their extensions, though these are increasingly deprecated in modern 64-bit software. Other bits cover foundational features like FPU (bit 0), PAE (bit 6), and MMX (bit 23), providing a holistic view that complements basic CPUID for robust 64-bit detection and feature enabling. The following table summarizes key EDX bits relevant to AMD64:
BitFeatureDescription
11SYSCALLSupport for SYSCALL/SYSRET instructions in 64-bit mode.
20NXNo-execute bit for page tables, supporting (execute disable).
29Long ModeEnables 64-bit operation, including RIP-relative addressing.
303DNow! Ext.Extensions to 3DNow! for enhanced SIMD floating-point.
313DNow!Original AMD 3DNow! SIMD instructions for 3D graphics.
This function's outputs are pivotal for operating systems and applications to probe 64-bit readiness without assuming basic CPUID suffices, ensuring compatibility across processor generations from onward.

EAX=80000002h to 80000004h: Processor Brand String

The processor brand string is retrieved using the extended CPUID functions with EAX set to 80000002h, 80000003h, and 80000004h in sequence. Each invocation returns 16 ASCII bytes distributed across the EAX, EBX, ECX, and EDX registers, with EAX holding bytes 0-3, EBX bytes 4-7, ECX bytes 8-11, and EDX bytes 12-15 of the respective segment. The full string is formed by concatenating the outputs from these three functions, yielding up to 48 bytes of a null-terminated ASCII string that identifies the processor's marketing name. To parse the string, software must first execute CPUID with EAX=80000000h to determine the maximum extended function supported; if the returned EAX value is less than 80000004h, the brand string is not available and no further calls should be made. Upon support confirmation, the concatenated result provides a human-readable identifier, such as "AMD Ryzen 9 7950X 16-Core Processor" for recent AMD models. This string is programmed by the BIOS during system initialization and serves primarily for user-facing displays in operating systems and applications, enabling straightforward processor identification without reliance on numeric signatures. The feature has been available on processors since the family (introduced in 2003), corresponding to family 0Fh and higher. On processors, support is partial and dates to models like the , but the string is often empty or incomplete on many implementations, particularly older or certain embedded variants, requiring fallback to alternative identification methods such as the processor signature from =1.

EAX=80000005h: L1 Cache and TLB Identifiers

When executed with set to 80000005h on processors of family 0Fh or later, the instruction returns detailed parameters for the per-core L1 and caches, as well as the L1 and translation lookaside buffers (TLBs). This extended function, introduced with the K8 architecture in 2003, provides AMD-specific encodings that complement the legacy descriptors from EAX=2 and the deterministic enumeration from EAX=4, enabling software to query L1 characteristics without relying on hardcoded assumptions. The L1 instruction cache details are encoded in EDX as follows: bits 31:24 specify the cache size in kilobytes; bits 23:16 indicate the associativity (encoded as 00h for reserved, 01h for direct-mapped, 02h–FEh for the number of ways, and FFh for fully associative); bits 15:8 denote the number of lines per tag; and bits 7:0 give the line size in bytes. The L1 data cache uses an identical format in ECX. For instance, in the Zen microarchitecture, these registers describe a 32 KB instruction cache that is 8-way associative with 64-byte lines and 1 line per tag, alongside a matching 32 KB data cache configuration. TLB parameters occupy EAX and EBX, focusing on supported page sizes of 4 , 2 , and 4 . EBX encodes 4 page support, with bits 31:24 for data TLB associativity, bits 23:16 for data TLB entries, bits 15:8 for instruction TLB associativity, and bits 7:0 for instruction TLB entries (using the same associativity encoding as caches). EAX covers larger pages, with bits 31:24 for 2 /4 data TLB associativity, bits 23:16 for 2 data TLB entries (where 4 uses half that number), bits 15:8 for 2 /4 instruction TLB associativity, and bits 7:0 for 2 instruction TLB entries (again, halved for 4 ). These values allow software to optimize access patterns by accounting for TLB coverage and potential misses for different page granularities.

Advanced Extended Functions

EAX=80000006h: L2 Cache and L3 Features

When is set to 80000006h, the instruction returns detailed descriptors for the and L3 caches on processors, enabling software to query parameters for . This extended function has been supported since the K8 ( Family 0Fh). The and EBX registers provide L2 TLB information, while ECX encodes size and organization details, with bits 31:16 specifying the cache size in kilobytes per . The total size per is calculated as the value in ECX bits 31:16 multiplied by 1024 bytes. For example, in Zen-based processors like the 5000 series, this yields a 512 KB per , which is 8-way associative with 64-byte lines, aiding in efficient data access patterns. The register reports L3 size and organization, with bits 31:18 indicating the size in units of 512 for the shared L3 across cores, as implemented in the architecture and later. This allows computation of the total L3 capacity by multiplying the bit field value by 512 ; for instance, cores in a typically report 32 MB shared L3 per core complex (), supporting higher bandwidth in multi-threaded workloads. Bits 15:12 encode the L3 associativity (e.g., 16-way) and bits 11:8 the lines per tag to describe the 's organization. These descriptors are primarily used for optimizing in operating systems and applications, such as adjusting thread affinity or prefetching strategies to leverage without explicit inclusivity details, which are not enumerated in this .

EAX=80000007h: and

The CPUID EAX=80000007h returns information on features, thermal monitoring capabilities, and () mechanisms specific to processors. This enables operating systems and to detect support for invariant time-stamp counter (TSC) behavior, frequency and voltage scaling controls, thermal safeguards, and error recovery options, facilitating optimized power policies and system stability. Supported since AMD Family 10h processors (introduced in 2007), it has no sub-leaves and returns data primarily in the EDX and EBX registers, with ECX providing power estimation ratios and largely reserved. In the register, bit fields indicate various and features. Bit 8 (ITSC) signals support for an invariant TSC, which maintains a constant rate independent of states (P-states) or sleep states (C-states), ensuring reliable timing for operating system scheduling and across frequency changes. This invariance is crucial for applications requiring precise timekeeping without recalibration during transitions. Other notable bits include bit 0 () for on-die presence, enabling hardware-based readings; bit 4 (TM) for support; bit 5 (STC) for software-controlled throttling; and bit 9 (CPB) for core boost, allowing dynamic frequency increases under low loads. Higher bits, such as bit 14 (RAPL), indicate compatibility with running average limit interfaces for tracking, similar to Intel's mechanisms but AMD-specific in implementation. These features aid in implementing OS-level , such as P-state transitions, by providing hardware guarantees on timing consistency and safety. The EBX register focuses on RAS capabilities, reporting support for advanced handling and . Bit 0 (MCAOVR) denotes machine check (MCA) overflow , allowing the processor to handle excessive logs without system halt. Bit 1 (SUCCOR) indicates software uncorrectable containment and , enabling or OS to isolate and recover from non-fatal uncorrectable errors, such as those in or interconnects, without full system crashes. Bit 3 (SCMCA) signals scalable MCA extensions, which expand reporting granularity for multi-core environments, including support for scrubbing to preemptively correct correctable errors in caches and . These RAS bits are essential for server-grade reliability, allowing proactive mitigation in data centers. Bit 2 (HWA) provides hardware assert mechanisms for RAS events. The ECX register returns the CPU power sample time ratio (bits 31:0), a value representing the of the power accumulator sample period to the TSC period, used for estimating power consumption via MSRs like APERF and MPERF when referenced against TSC counts. This supports fine-grained power profiling without external , integrating with OS policies for energy-aware scheduling. EAX is reserved and returns 0, though some implementations may echo the input value. In recent architectures like (Family 1Ah, released in 2024), this leaf includes enhanced reporting for the data fabric interconnect, extending scalable to cover fabric-level errors such as link failures or protocol violations, improving overall system resilience in high-density scenarios. Usage remains focused on initialization routines where software queries these bits to configure power governors, thermal limits, and error handlers, ensuring compatibility with and standards.
RegisterKey BitsFeatureDescription
EDX8ITSCInvariant TSC across P- and C-states for consistent timing.
EDX0On-die for thermal monitoring.
EDX4TMHardware thermal monitoring support.
EDX9CPBCore performance boost for dynamic .
EDX14RAPLRunning average limit interface for .
EBX1SUCCORSoftware recovery from uncorrectable errors.
EBX0MCAOVRRecovery from MCA status overflows.
EBX3Scalable machine check architecture for detailed error reporting.
ECX31:0CmpUnitPwrSampleTimeRatioRatio for using TSC and accumulators.

EAX=80000008h: Physical Address Size and Topology

When executed with EAX set to 80000008h and ECX set to 0, the CPUID instruction returns key details on address sizes and basic processor topology for AMD64 processors. The register provides the maximum size in bits 7:0 (typically 40 for early implementations, up to or more in modern variants), the maximum linear () address size in bits 15:8 (usually for canonical addressing in 64-bit mode), and the maximum guest size in bits 23:16 for use in Secure (SVM) environments, where a value of 0 indicates fallback to the host size. Bits 31:24 and the remaining bits in are reserved. EBX and are reserved in this base sub-leaf. The ECX register delivers topology information, with bits 7:0 holding NC, the number of CPU cores minus one (thus total cores = NC + 1, representing cores per package), and bits 15:12 specifying ApicIdCoreIdSize, the number of bits in the initial APIC ID dedicated to identifying (where a value of 0 indicates use of methods for core ). Bits 11:8 and 31:16 in ECX are reserved. This data enables software to parse the APIC ID for core-level , facilitating accurate construction in multi-core systems. These outputs are critical for 64-bit operating systems to configure memory management units (MMUs) according to supported addressing limits, preventing invalid access beyond hardware capabilities, and for building system topology models that optimize thread scheduling and resource allocation across cores. In multi-socket NUMA configurations, the core count and APIC ID encoding from this leaf combine with other CPUID functions (such as leaf 0Bh) to detect node boundaries and inter-node latencies, improving performance in scalable server environments. In and later architectures, support for sub-leaves (ECX ≥ 1) extends this function to provide more granular details, allowing of hierarchical structures like cores per compute unit beyond the base package-level information. For example, bits in for sub-leaves may report cores per compute unit in positions such as 19:16, aiding in fine-grained scheduling for chiplet-based designs. As of 2025, 's architecture, as implemented in 9005 series processors, extends physical addressing to 52 bits while maintaining 57-bit virtual addressing, enabling support for up to 4 of physical per in high-end configurations— a step beyond the 48-bit limit of prior consumer-oriented implementations. This enhancement, enumerated via [7:0], addresses growing demands for massive-scale data centers and workloads without requiring non-standard extensions.

EAX=8000000Ah: Secure Virtual Machine (SVM) Features

The CPUID instruction with EAX set to 8000000Ah queries the Secure Virtual Machine (SVM) features on processors supporting . This extended function is available starting with AMD Family 10h processors and provides essential information for hypervisors to detect and enable hardware-assisted capabilities. Execution requires prior detection of SVM support via CPUID function 80000001h ECX bit 26. No sub-leaves are supported; ECX input must be 0. Upon invocation, the processor returns data in , EBX, and registers, while ECX is and returns 0. bits 7:0 specify the SVM revision level, an 8-bit value indicating the implementation version of the SVM architecture. EBX bits 31:0 report the number of supported Identifiers (ASIDs), which are used to tag translations for efficient context switching in virtualized environments. enumerates the available SVM features through individual bit flags. The following table summarizes the key bits in for SVM features:
BitFeatureDescription
0 (Nested Paging)Indicates support for nested paging (also known as Rapid Virtualization Indexing or RVI), which accelerates two-dimensional walks by .
1LbrVirt (LBR Virtualization)Supports of the Last Branch Record (LBR) MSRs, allowing access to branch tracing without hypervisor intervention.
2SVML (SVM Lock)Enables locking of the SVM enable bit in EFER to prevent unauthorized enabling of mode.
3NRIPS (Next RIP Save)Allows saving the next pointer on event injection, improving efficiency for emulation in guests.
4TscRateMsr (TSC Rate MSR)Provides MSR-based control for scaling the Timestamp Counter (TSC) rate independently of the host.
5VmcbClean (VMCB Clean)Supports clean bits in the Virtual Machine Control Block (VMCB) to track unmodified fields and reduce load overhead.
6FlushByAsid (Flush by ASID)Enables TLB flushes targeted by ASID, minimizing global flushes and improving performance in multi-VM scenarios.
7DecodeAssistsOffers assists for decoding intercepted in mode, such as opcode grouping for faster .
10PauseFilterImplements a PAUSE filter to count and skip excessive PAUSE loops in guests, reducing exit frequency.
12PauseFilterThresholdAllows configuration of the threshold for the PAUSE via MSR, tuning sensitivity for spinlock-heavy workloads.
13AVIC (Advanced Virtual Interrupt Controller)Supports AVIC for direct virtual interrupt delivery from I/O devices to vCPUs, bypassing the for common cases.
These features enhance performance and security by offloading common operations from software to . For example, hypervisors like KVM in the query this function to enable compatible features, such as nested paging for or AVIC for interrupt handling, ensuring optimal VM isolation and efficiency on supported .

Recent and Vendor-Specific Extensions

EAX=8000001Fh: Memory Encryption Capabilities

The leaf 8000001Fh, accessed by setting to 8000001Fh and ECX to 0, provides details on processor support for encryption technologies, particularly those enabling Secure Encrypted (SEV). This extended function returns values in the general-purpose registers that indicate hardware capabilities for encrypting (VM) to protect against physical attacks and malicious hypervisors. The primary output in enumerates SEV-related features: bit 0 signals basic SEV support for per-VM encryption keys, bit 1 indicates SEV-ES () for protecting VM and state data during transitions, and bit 3 denotes SEV-SNP (Secure Nested Paging) for enhanced integrity and attestation via a Reverse Map Table (RMP) that prevents remapping and replay attacks. EBX from this leaf specifies implementation details, such as bits 5:0 giving the encryption bit position (typically 51 or 52, reducing the effective space) and bits 11:6 indicating the reduction in bits when is active (usually 6 bits). ECX reports the maximum number of SEV-enabled guests supported (up to 509 or more on modern hardware), while EDX provides the minimum ASID ( Identifier) for non-SEV-ES VMs. These values allow software to configure without exceeding hardware limits, ensuring guest-specific keys managed by the Secure Processor isolate VM memory from the host and other guests. For sub-leaf ECX=1, the leaf focuses on RMP configuration for SEV-SNP, returning details on the table's structure for reverse mapping guest physical addresses to host pages, which enforces integrity protections like preventing unauthorized page assignments. This sub-leaf is relevant only if EAX bit 3 is set, enabling hypervisors to initialize the RMP securely during VM launch. In usage, these capabilities support VM encryption where private guest pages use unique keys, while shared pages may fall back to host-managed keys; the bits guide key allocation and ASID assignment to avoid collisions. SEV support via this leaf first appeared in AMD EPYC processors, with full SEV-SNP introduced in the 3rd-generation EPYC "Milan" family released in 2021. The 5th-generation EPYC "Turin" processors, launched in 2025, include enhancements to SEV-SNP such as ABI version 1.58 (as of May 2025) for improved compatibility and security.

EAX=80000021h: Additional Extended Features

Executing the CPUID instruction with EAX set to 80000021h enumerates additional extended processor features on x86-64 implementations, with primary information returned in the register. This leaf extends the feature detection beyond the standard extended aperture provided by EAX=80000001h, focusing on modern enhancements in security mitigations and instruction set capabilities relevant to and . It first appeared in the microarchitecture (family 19h, model 60h and higher) released in 2022, enabling software to identify support for these features in processors such as the 7000 series and 9004 "" series. The register bits specify individual capabilities:
  • Bit 0 (NO_NESTED_DATA_BP): Set if the lacks a vulnerability to nested data breakpoints, where debug register configurations could erroneously trigger on inner breakpoints during ; this ensures reliable in complex scenarios without errata workarounds.
  • Bit 8 (AUTOIBRS): Indicates support for Automatic Restricted Speculation, an enhancement to the SPEC_CTRL MSR's IBRS bit that automatically enforces speculation barriers across privilege level transitions, mitigating variant 2 attacks with reduced performance overhead compared to software-managed IBRS; the enables this by default on compatible .
  • Bit 17 (CPUID faulting for non-privileged software): Denotes support for disabling CPUID execution in user mode via the CPUID_FAULTING MSRs (MSR_C001_1029 through MSR_C001_102C), triggering a general protection exception (#GP) to prevent unprivileged code from querying sensitive processor information, thereby bolstering security in multi-tenant or virtualized environments.
The Zen 6 microarchitecture (znver6), expected in 2026, is planned to extend this leaf with bit 23 (AVX512_BMM), signaling availability of AVX-512 Bit Matrix Multiply instructions (VBMACOR16x16x16, VBMACXOR16x16x16, and VBITREV), which perform packed 16x16 bit matrix accumulations and reversals optimized for sparse matrix operations in AI inference and training workloads. This has no sub-leaves (ECX=0), and EBX, ECX, and return 0 or are reserved. Software typically queries the maximum extended via EAX=80000000h before accessing this leaf to confirm availability, using it for + detection in hypervisors like KVM for optimized SVM configurations or security hardening.

EAX=80000025h: New AMD-Specific Enumeration (2025)

The CPUID leaf EAX=80000025h, with ECX=0, is a new extended introduced in the microarchitecture, available in processors such as the AI 300 series (launched mid-2024 for , 2025 for ). According to the AMD64 Programmer's Manual Volume 3 (revision 3.37, July 2025), this leaf supports AMD-specific enumeration, with the maximum extended reported as at least 80000025h via EAX=80000000h. Public details on bit fields and specific capabilities remain limited. Software can detect its presence for targeting, with initial tooling support in utilities like CPUIDx version 0.18 (April 2025) and fuller implementation in version 0.20 (August 2025). Future sub-leaves (ECX>0) may provide additional diagnostics.

and Reserved Ranges (40000000h+)

The range from 40000000h to 4FFFFFFFh in the CPUID space is reserved exclusively for (virtual machine monitor, VMM) implementations on x86 processors from both and . This allocation allows to expose vendor-specific information and capabilities to guest software without conflicting with native processor CPUID functions, which return zeros or on bare metal when these leaves are queried. When is set to 40000000h, the instruction returns the maximum supported CPUID leaf in (typically up to 400000FFh) and a 12-character ASCII vendor identification string distributed across EBX (characters 1-4), ECX (5-8), and EDX (9-12). Examples include "KVMKVMKVM" for the KVM and "VMwareVMware" for products. This leaf functions analogously to the basic CPUID leaf 0h for processor vendors but is tailored for VMM identification. Subsequent leaves, such as 40000001h, report hypervisor-specific features in , EBX, ECX, and , including interface version details and capability bits like support for paging or MSR access. For instance, uses leaves from 40000000h to 4000000Ah to enumerate enlightenments such as APIC access , while employs similar leaves for features like nested paging. These outputs enable guest software to detect the presence of a —often in conjunction with bit 31 of ECX from leaf 1h—and optimize behavior accordingly, such as enabling paravirtualized I/O. Higher leaves within 40000002h to 4FFFFFFFh remain reserved for vendor-defined extensions, with no standardized processor-level functionality. Software must respect the maximum leaf value reported by 40000000h.EAX to avoid querying undefined areas, which could trigger hypervisor-specific traps or crashes in emulated environments. As of 2025, no major architectural changes have been introduced to this range by or , though it interacts with confidential computing technologies like Intel Trust Domain Extensions (TDX) and AMD Secure Encrypted Virtualization (SEV) for reporting VMM-mediated features.

Other Vendor Extensions

Xeon Phi Functions (20000000h Series)

The 0x20000000 series of CPUID leaves represents a vendor-specific extension introduced by for the Many Integrated Core () architecture in coprocessors. When is set to 0x20000000h, the returns the maximum supported function in , enabling software to determine the range of available -specific enumerations. This leaf is essential for identifying the presence of hardware in systems employing an offload model, where computational tasks are delegated to the coprocessor for . Subsequent leaves within this range enumerate Phi-specific features in the general-purpose registers, tailored for the coprocessor's in-order cores and high-throughput design. The outputs mirror standard CPUID formats but focus on configurations unique to MIC implementations like Knights Ferry ( prototype) and Knights Corner (2012 production). Originally developed for coprocessor-based systems from 2012 to 2016, these leaves supported legacy detection in high-performance computing environments but became deprecated after 2018 as MIC technology was discontinued and features shifted to mainstream Xeon processors via conventional leaves like EAX = 0x00000007h.

Centaur Technology Extensions (C0000000h)

Centaur Technology, a subsidiary of VIA Technologies, introduced custom CPUID leaves in the range starting at C0000000h to enumerate proprietary features in their x86 processors, primarily targeted at embedded and low-power applications. These extensions allow software to detect support for specialized hardware accelerations, such as cryptographic engines, distinguishing VIA designs from mainstream Intel and AMD processors. The vendor identification string "CentaurHauls", obtained from the standard CPUID leaf 0h (EAX=0, EBX register), signals the presence of Centaur-derived processors capable of LongHaul power management technology, which enables dynamic frequency and voltage scaling for energy efficiency in mobile and embedded systems. Executing CPUID with EAX set to C0000000h returns the highest supported Centaur-specific function in EAX, typically limited to 0xC0000001, indicating no major sub-leaves beyond this basic enumeration. The subsequent leaf C0000001h provides feature flags in the register, focusing on VIA's security suite, which integrates for cryptographic operations directly into the processor. Bit 2 of EDX (RNG) indicates support for the Random Number Generator, providing high-quality for secure and operations, while bit 3 (RNG-E) denotes if the feature is enabled by default. Similarly, bit 6 (ACE) signals the Advanced Cryptography Engine for encryption/decryption, and bit 7 (ACE-E) indicates its enabled state; these were first implemented in the VIA C3 core in 2001. Additional PadLock components are enumerated via bits 8 (MM/HE) and 9 (MM/HE-E) in EDX, supporting the for efficient in operations and a Hash Engine for / acceleration. Bit 28 of EDX (LongHaul power) further confirms capabilities, allowing software to access MSRs like 0x110A for frequency control, enhancing battery life in portable devices. In later designs like the ( architecture, introduced 2008), ECX bits in this leaf extend with support for AES-NI equivalents and improved RNG, though core functionality remains consistent across the lineage. These features have been available since the VIA series around 2000, remaining niche for embedded markets such as thin clients and industrial systems, with limited adoption outside VIA ecosystems.

AMD Easter Eggs (8FFFFFFFh)

AMD processors from the K7 (Athlon) and K8 (Opteron/Hammer) families include undocumented Easter eggs in the CPUID instruction, activated by input values in the register that far exceed the maximum extended function leaf reported by EAX=80000000h, typically around 8000001Fh for these architectures. These high leaves, such as 8FFFFFFFh, fall outside the defined range and are considered reserved or invalid in official specifications, yet engineers implemented whimsical responses instead of default zeroed registers to entertain curious developers. For EAX=8FFFFFFFh on K7 and K8 processors, the instruction returns the ASCII string "IT'S HAMMER TIME" split across the general-purpose registers: "IT'S" in , "HAMM" in EBX, "ER T" in ECX, and "IME" in EDX. This playful message references the 1990 MC Hammer hit "," tying into the K8's internal codename "" and adding a lighthearted nod to the era's pop culture. The feature was introduced with the K7 architecture in 1999 and serves no diagnostic, performance, or compatibility purpose, existing purely as an inside joke from AMD's design team. These eggs have been exploited in niche applications, such as detecting emulators that fail to replicate the non-standard behavior, but they offer no practical utility for general software and are safe to query without risking system stability. Discovered shortly after the K7's launch, they highlight early x86 design whimsy but have not been extended in subsequent architectures. As of November 2025, no additional in this range have been reported for modern Zen-based processors like .

Software Usage Patterns

Inline Assembly Implementation

Inline assembly provides a direct method to execute the CPUID instruction within high-level languages like C or C++, allowing developers to query processor details at the lowest level without relying on external libraries. This approach is particularly useful for performance-critical applications or when fine-grained control over register usage is required. In GCC-compatible compilers, extended inline assembly syntax facilitates mapping C variables to CPU registers, ensuring safe interaction between assembly and host code. The CPUID instruction serializes execution, making it suitable for feature detection during initialization. A basic example targets the standard leaves EAX=0 (for maximum input value and vendor string) and EAX=1 (for version and feature flags). The following inline snippet first detects support by attempting to toggle the ID bit (bit 21) in the , which is only possible on supporting ; if unsuccessful, the code assumes lack of support. Upon confirmation, it executes with EAX=0 to retrieve the vendor ID as a 12-character from EBX, , and ECX registers, then with EAX=1 to extract the family, model, and stepping from EAX bits, along with feature flags in (e.g., bit 25 for support) and ECX (e.g., bit 0 for ). Vendor extraction involves concatenating the registers into a char array, while features are bit-tested for presence.
c
#include <stdio.h>

int has_cpuid_support() {
    unsigned int flags1, flags2;
    asm volatile (
        "pushf\n"
        "pop %0\n"
        "mov %0, %1\n"
        "xor &#36;0x00200000, %1\n"
        "push %1\n"
        "popf\n"
        "pushf\n"
        "pop %0\n"
        : "=r" (flags1), "=r" (flags2)
        :
        : "cc"
    );
    return (flags1 ^ flags2) & 0x00200000;
}

void get_vendor_and_features(char vendor[13], unsigned int *features_edx, unsigned int *features_ecx) {
    if (!has_cpuid_support()) {
        printf("CPUID not supported\n");
        return;
    }

    // EAX=0: Vendor ID
    unsigned int eax0, ebx, ecx0, edx;
    eax0 = 0;
    asm volatile ("cpuid"
                  : "=a" (eax0), "=b" (ebx), "=c" (ecx0), "=d" (edx)
                  : "a" (eax0)
                  : "memory");
    vendor[0] = (char)(ebx);
    vendor[1] = (char)(ebx >> 8);
    vendor[2] = (char)(ebx >> 16);
    vendor[3] = (char)(ebx >> 24);
    vendor[4] = (char)(edx);
    vendor[5] = (char)(edx >> 8);
    vendor[6] = (char)(edx >> 16);
    vendor[7] = (char)(edx >> 24);
    vendor[8] = (char)(ecx0);
    vendor[9] = (char)(ecx0 >> 8);
    vendor[10] = (char)(ecx0 >> 16);
    vendor[11] = (char)(ecx0 >> 24);
    vendor[12] = '\0';

    // EAX=1: Features (error check: max leaf from EAX=0)
    if (eax0 < 1) return;
    unsigned int eax1, ebx_unused;
    eax1 = 1;
    asm volatile ("cpuid"
                  : "=a" (eax1), "=b" (ebx_unused), "=c" (*features_ecx), "=d" (*features_edx)
                  : "a" (eax1)
                  : "memory");
    // Example: Family = ((eax1 >> 8) & 0xF) + ((eax1 >> 20) & 0xFF);
}

int main() {
    char vendor[13];
    unsigned int edx_feat, ecx_feat;
    get_vendor_and_features(vendor, &edx_feat, &ecx_feat);
    printf("Vendor: %s\n", vendor);
    if (edx_feat & (1 << 25)) printf("SSE supported\n");
    return 0;
}
This code uses AT&T syntax (GAS), common in GCC, where inputs are prefixed with constraints like "a" for EAX and outputs with "=". The "memory" clobber ensures the compiler does not reorder memory accesses around CPUID. Compilation requires a 32-bit or 64-bit x86 target: gcc -m32 -o cpuid_test cpuid_test.c for 32-bit or g++ -o cpuid_test cpuid_test.cpp for 64-bit, assuming a compatible processor. In 64-bit mode, the implementation remains largely identical, as CPUID operates on the lower 32 bits of the general-purpose registers (RAX, RBX, RCX, RDX), but developers may use 64-bit variables for broader compatibility. The ID bit toggle detection adapts seamlessly, replacing 32-bit PUSHF/POPF with PUSHFQ/POPFQ equivalents, though the provided snippet works unchanged due to zero-extension behavior. Error checking for the maximum leaf (returned in EAX after EAX=0) prevents invalid queries, as exceeding it yields undefined results; for instance, if the maximum basic leaf is 5, attempts with EAX=6 return EAX=0 without further data. This variant ensures portability across 32-bit and 64-bit environments without mode-specific adjustments beyond compiler flags. For enumerating cache parameters using the deterministic cache leaf (EAX=4), a loop iterates over sub-leaves in ECX starting from 0 until the cache type field (EAX bits 4:0) indicates no more valid entries (value 0). Each iteration populates EAX with cache type/size/ways, EBX with system coherency line size and physical line partitions, ECX with number of sets, and EDX with associativity; for example, a level 1 data cache might return 8-way set associative with 32 KiB size. The loop counts valid caches while extracting details like coherency line size (EBX bits 11:0 +1 for byte value). Support for this leaf is indicated by ECX bit 5 in the EAX=1 response.
c
#include <stdio.h>

void enumerate_caches() {
    unsigned int eax1, ebx1, ecx1, edx1;
    eax1 = 1;
    asm volatile ("cpuid"
                  : "=a" (eax1), "=b" (ebx1), "=c" (ecx1), "=d" (edx1)
                  : "a" (eax1)
                  : "memory");
    if (!(ecx1 & (1 << 5))) {
        printf("Deterministic cache parameters not supported\n");
        return;
    }

    int cache_count = 0;
    unsigned int ecx_sub = 0;
    do {
        unsigned int eax, ebx, ecx, edx;
        eax = 4;
        ecx = ecx_sub;
        asm volatile ("cpuid"
                      : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
                      : "a" (eax), "c" (ecx)
                      : "memory");
        unsigned int cache_type = eax & 0x1F;
        if (cache_type == 0) break;  // No more caches

        unsigned int ways = (ebx >> 22) + 1;
        unsigned int partitions = ((ebx >> 12) & 0x3FF) + 1;
        unsigned int line_size = (ebx & 0xFFF) + 1;
        unsigned int sets = ecx + 1;
        unsigned int cache_size_bytes = ways * partitions * line_size * sets;
        printf("Cache %d: Type %u, Size %u KiB, Coherency line %u bytes\n", cache_count, cache_type, cache_size_bytes >> 10, line_size);

        cache_count++;
        ecx_sub++;
    } while (ecx_sub < 32);  // Reasonable upper limit
}
This GAS-based example compiles similarly to the prior one, with the loop providing comprehensive cache topology without excessive iterations. For standalone assembly development, NASM syntax offers an alternative: section .text; global _start; _start: mov eax, 1; cpuid; ; int 80h (for Linux exit), assembled via nasm -f elf64 example.asm and linked with ld example.o -o example. NASM uses Intel syntax (e.g., MOV EAX, 1), contrasting GAS's AT&T (MOV $1, %EAX), but both support identically. Run with ./example on a supporting system. Common pitfalls include executing in 16-bit real mode, where CPUID is unsupported on processors before Pentium, potentially raising an invalid opcode exception (#UD); always verify mode and use protected or long mode. In 32-bit mode without CR4.OSFXSR set, certain extended states may be inaccessible, though basic leaves function. Register preservation is automatic in inline asm via constraints, but overstepping maximum leaves corrupts outputs without halting; robust code always checks the EAX=0 result first. Additionally, hypervisor environments may virtualize CPUID, altering outputs, requiring VMX/SVM awareness.

High-Level Language Wrappers and Libraries

High-level language wrappers for the CPUID instruction provide abstractions that simplify access to processor information without directly embedding inline assembly, enabling portable and readable code in C and C++ environments. In Microsoft Visual C++ (MSVC), the __cpuid intrinsic executes the CPUID instruction with a specified leaf value in EAX, returning results in an array of four integers corresponding to EAX, EBX, ECX, and EDX registers, while __cpuidex additionally allows specifying an initial ECX value for sub-leaves. For example, to test for AVX support, developers can invoke __cpuid(1, regs) and check bit 28 in the ECX register of the returned array. In GCC and Clang, the <cpuid.h> header offers the __get_cpuid function, which similarly populates an array with register values for a given leaf and optional sub-leaf, ensuring compatibility across x86 compilers. These intrinsics abstract the low-level register handling, reducing errors in feature detection routines. Several libraries build on these intrinsics to offer higher-level APIs for CPUID enumeration, focusing on cross-platform detection of features and topology. The cpuid library from Steinwurf provides a C++ interface for querying instruction sets like MMX, SSE, and AVX on x86, abstracting leaf traversals into simple boolean checks such as cpuid::has_sse4_2(). For hardware topology, the Hardware Locality (hwloc) library uses CPUID leaves (e.g., leaf 4 for cache parameters) to map cores, caches, and NUMA nodes, exposing them via a portable object model suitable for parallel applications. Cross-platform options like SDL's SDL_cpuinfo module leverage CPUID to detect features such as or , returning structured data via functions like SDL_GetCPUCacheLineSize(), which aids game engines and software in runtime optimization. Google's cpu_features library extends this to a C99 supporting x86, , and , with CPUID handling for feature bits and sizes, emphasizing simplicity for embedded and desktop use. Common usage patterns in these wrappers emphasize efficiency and reliability, such as initializing a global cache of all accessible leaves at program startup to avoid repeated CPUID calls, which can vary per core and impact performance in multi-threaded contexts. This caching approach, often implemented as a singleton function returning a feature map, allows quick queries for optimizations like vectorization paths. For diagnostic tools, libraries may serialize CPUID data into JSON format, enabling structured output for logging or configuration, as seen in utilities that enumerate leaves 0 through 8000001Fh and encode bitfields as key-value pairs. Portability considerations in these wrappers address 32-bit versus 64-bit environments by using conditional compilation (e.g., via __x86_64__ macros) to handle register widths, ensuring 64-bit integers capture full EDX/EAX pairs on x86-64 without truncation. Since x86 architectures are uniformly little-endian, no additional byte-swapping is required for CPUID outputs, simplifying cross-endian portability compared to network protocols. In 2025, library updates have incorporated support for new -specific extended leaves introduced in 2024-2025 for processors, with tools like CPUIDx reflecting the latest documentation for detecting enhanced and . Glibc's detection, which relies on CPUID for selecting optimized code paths in sysdeps (e.g., for AVX2 on ), has seen refinements to better accommodate these extensions, ensuring compatibility in distributions without breaking existing binaries.

CPUID Outside Traditional x86

Adaptations in ARM and Other ISAs

In non-x86 instruction set architectures (ISAs), mechanisms analogous to the x86 instruction exist to query identification, version, and support, but they typically rely on dedicated control or status registers rather than a single parameterized . These approaches provide essential information for software to detect capabilities, though they often require privileged access or mediation for . Unlike x86's extensible leaf-based queries, these mechanisms use fixed registers that enumerate specific attributes, promoting simplicity but limiting dynamic extensibility. In the ARM architecture, processor identification is handled through AArch64 system registers such as MIDR_EL1 (Main ID Register), which encodes the implementer code, variant, architecture version, part number, and revision for the current core. Feature detection is facilitated by registers like ID_AA64PFR0_EL1 (AArch64 Processor Feature Register 0, EL1), which indicates support for elements including floating-point operations, Advanced SIMD, and extract instructions, with additional registers such as ID_AA64ISAR0_EL1 covering instruction set extensions like CRC32 and atomic operations. These registers are accessed using the MRS instruction in user or EL1 exception levels, but on systems like Linux, kernel emulation ensures safe userspace access via an ABI advertised through HWCAP_CPUID hardware capabilities, preventing direct hardware queries that could expose inconsistencies in heterogeneous multi-core environments. The employs Control and Status Registers (CSRs) for similar purposes, with mvendorid providing a 32-bit vendor identifier assigned by , marchid specifying the base architecture (e.g., RV32I or RV64G), and mimpid indicating the implementation version, all forming a unique hart ( ) microarchitecture identifier when combined. These read-only CSRs are accessed via instructions like CSRRW in machine mode, enabling software to detect the processor's origin and capabilities without a dedicated query , though custom extensions can leverage the misa CSR for additional feature bits. This design supports 's modular nature, where standard identification focuses on core attributes while allowing extensions for specialized features. For PowerPC processors, the Processor Version Register (PVR) serves as the primary identification mechanism, containing a 32-bit value that combines the version number (bits 0-15) and revision number (bits 16-31) to uniquely identify the processor model, such as distinguishing between variants like the PowerPC 750 or e500 core family. Accessed via the mfspr instruction in supervisor mode, the PVR enables software to based on specifics, with values defined per implementation to support compatibility in and environments. Compared to x86's CPUID, which offers comprehensive, input-dependent enumeration across multiple registers for features like and vendor strings, these non-x86 mechanisms are generally more streamlined, using auxiliary registers for targeted queries rather than broad leaves, which reduces overhead but requires architecture-specific for full detection. In emulation contexts, tools like bridge this gap by synthesizing CPUID responses for x86 guest operating systems running on or other hosts, configuring CPU models to expose compatible identification data based on the emulated type, ensuring portability without native hardware support.

Virtualization and Emulation Contexts

In virtualized environments, hypervisors such as KVM and intercept CPUID instructions to prevent guests from directly accessing host processor details, instead returning synthetic values that reflect the configured virtual hardware. This interception ensures guest stability by masking or emulating features that may not be fully supported in the virtual context, such as advanced instruction sets or topologies. For example, 's vSphere can configure guest CPUID masks via advanced settings to expose only a subset of host features, avoiding compatibility issues. Hypervisor presence can be detected through specific CPUID leaves. When EAX=1 is executed, bit 31 of ECX (the hypervisor-present bit) is set if a is active, signaling to software that it is running in a . Additionally, the reserved range starting at EAX=0x40000000 provides VMM identification: EAX returns the maximum leaf in this range, while EBX, ECX, and EDX form the hypervisor vendor ID string, such as "KVMKVMKVM" for KVM or "Microsoft Hv" for . These mechanisms allow operating systems and applications to adapt behavior accordingly. In emulation scenarios, tools like handle CPUID by translating queries to the 's emulated or passing through host values in specific modes. 's host-passthrough mode directly exposes the host CPU model, features, and stepping to the , minimizing overhead for performance-critical workloads, while named CPU models (e.g., "Skylake-Server") synthesize fixed feature sets for broader compatibility. For emulation, overrides leaves 0x40000000 to 0x4000000A to mimic Microsoft's signatures when enlightenments are enabled. Passthrough is configurable via command-line options like -cpu host, but requires careful alignment with the to avoid exposing unintended host details. Challenges in CPUID handling include feature masking for and support for . often mask vulnerable features, such as those related to and Meltdown, by clearing specific bits in synthetic CPUID responses to prevent exploitation of host-side attacks; for instance, applies mitigations by default, exposing only safe feature subsets. In , where a runs inside another VM, CPUID interception becomes layered, requiring the outer to emulate inner ones accurately to avoid propagation of incorrect feature flags. This can introduce performance overhead from additional VM exits. As of 2025, technologies like Trust Domain Extensions (TDX) and Secure Encrypted Virtualization-SNP (SEV-SNP) mandate precise CPUID enumeration for attestation processes. In TDX, the module trusts and exposes most CPUID leaves to guests for integrity verification during remote attestation, ensuring the virtual trust domain's configuration matches expected capabilities. Similarly, SEV-SNP attestation reports incorporate CPUID-derived details, such as family and model, to cryptographically verify the guest's initial state against the host's secure . Inaccurate CPUID emulation here could invalidate attestations, compromising deployments. Tools like the leverage CPUID probes to identify virtualization contexts. It executes targeted CPUID calls to check for hypervisor signatures in standard and reserved leaves, outputting detected environments (e.g., "kvm" or "vmware") based on matching vendor IDs and feature bits, aiding system administrators in diagnosing virtual setups without invasive checks.

References

  1. [1]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel 64 and IA-32 Architectures Software Developer's Manual consists of four volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  2. [2]
    [PDF] CPUID Specification - kib.kiev.ua
    This document specifies the CPUID instruction functions and return values in the EAX, EBX, ECX, and EDX registers, for all AMD processors of family 0Fh or ...
  3. [3]
    [PDF] Intel® Processor Identification and the CPUID Instruction - Index of /
    The CPUID instruction not only provides the processor signature, but also provides information about the features supported by and implemented on the Intel ...Missing: AMD | Show results with:AMD
  4. [4]
    [PDF] AMD Processor Recognition - kib.kiev.ua
    When software uses the CPUID instruction to identify a processor, it is important that it uses the instruction appropriately. The instruction has been defined ...
  5. [5]
    CPUID — CPU Identification
    CPUID returns processor identification and feature information in the EAX, EBX, ECX, and EDX registers.
  6. [6]
    __cpuid, __cpuidex | Microsoft Learn
    Aug 3, 2021 · Generates the cpuid instruction that is available on x86 and x64. This instruction queries the processor for information about supported features and the CPU ...Syntax · Requirements
  7. [7]
    The CPUID Instruction - Geoff Chappell, Software Analyst
    The primary means of identifying a modern x86 or x64 processor is the cpuid instruction. This was developed in the early 1990s for what was then Intel's new ...
  8. [8]
    CPUID: CPU Identification (x86 Instruction Set Reference) - c9x.me
    Returns processor identification and feature information to the EAX, EBX, ECX, and EDX registers, according to the input value entered initially in the EAX ...Missing: documentation AMD
  9. [9]
    [PDF] Intel Processor Identification and the CPUID Instruction
    As the Intel Architecture evolved, Intel extended the processor signature identification into the CPUID instruction. The CPUID instruction not only provides ...
  10. [10]
    CPU Identification Before CPUID - Geoff Chappell, Software Analyst
    This classification dates from the 80386 but became firmly established when the cpuid instruction was added for Intel's Pentium processor in 1993 and for some ...Processor Identification... · Early 80486 · 80386-B0<|control11|><|separator|>
  11. [11]
    [PDF] Pentium® III Processor Serial Number Feature and Applications
    The ps# capability introduced in the Pentium® III processor is communicated through an extension of the existing CPUID instruction [1]. The CPUID instruction is.
  12. [12]
    [PDF] 3DNow!
    Once the software has identified the processor's support for. CPUID, it must test for extended functions by executing extended function 8000_0000h (EAX= ...
  13. [13]
    [PDF] Intel® SSE4 Programming Reference
    INPUT EAX = 4: Returns Deterministic Cache Parameters for Each Level. When CPUID executes with EAX set to 4 and ECX contains an index value, the processor ...
  14. [14]
    [PDF] Intel Processor Identification and the CPUID Instruction - kib.kiev.ua
    When EAX is initialized to a value of 0Bh, the CPUID instruction returns core/logical processor topology information in EAX, EBX, ECX, and EDX registers.
  15. [15]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel 64 and IA-32 Architectures Software Developer's Manual consists of five volumes: Basic Architecture, Order Number 253665;. Instruction Set ...
  16. [16]
    [PDF] Intel® Advanced Vector Extensions 10.2
    Jul 11, 2024 · The “AVX10 Converged Vector ISA Enable” bit will indicate processor support for the ISA and the presence of an “AVX10 Converged Vector ISA ...
  17. [17]
    CPUID - AMD - WikiChip
    Jul 2, 2025 · Below is a list of CPUIDs of AMD x86 processors broken down by processor family, microarchitecture, and processor design codename.
  18. [18]
    [PDF] Intel® 64 and IA-32 Architectures - Software Developer's Manual
    Mar 1, 2023 · Intel technologies may require enabled hardware, software or service activation. No product or component can be absolutely secure.
  19. [19]
    cpuid(1) - openSUSE Manpages Server
    cpuid dumps detailed information about the CPU(s) gathered from the CPUID instruction, and also determines the exact model of CPU(s) from that information.
  20. [20]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel® 64 and IA-32 Architectures Software Developer's Manual consists of nine volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  21. [21]
    [PDF] CPUID Specification
    Jul 26, 2007 · This document specifies the CPUID instruction functions and return values in the EAX, EBX, ECX, and EDX registers, for all AMD processors of ...
  22. [22]
    None
    Below is a merged summary of the CPUID instruction based on the provided segments from the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2D. To retain all information in a dense and comprehensive format, I’ll use a combination of narrative text and a table in CSV format for key details. The narrative will provide an overview and context, while the table will capture specific attributes, usage details, and pitfalls across all segments.
  23. [23]
    [PDF] CPUID Specification - kib.kiev.ua
    The architectural definition of the CPUID instruc- tion is also documented in the section titled “CPUID” in the AMD64 Architectural Programmer's Manual Vol- ume ...
  24. [24]
    [PDF] Revision Guide for AMD Family 1Ah Models 10h-1Fh Processors
    Mar 2, 2025 · This guide communicates updated product information for AMD Family 1Ah processors, including processor identification, errata, and support ...
  25. [25]
  26. [26]
    [PDF] architecture-instruction-set-extensions-programming-reference.pdf
    Updated the CPUID instruction to add the initial EAX value to each main. CPUID leaf name in order to accommodate new bookmarks in the final. PDF that will ...Missing: 1995 | Show results with:1995
  27. [27]
    [PDF] Intel Processor Identification and the CPUID Instruction
    INTRODUCTION ... 21. DS. Debug Store. Indicates that the processor has the ability to write a history of the branch to and from addresses into a memory buffer.
  28. [28]
    Privacy Downside to Intel Inside | American Civil Liberties Union
    Jan 25, 1999 · In our view, the privacy risks inherent in this unique ID feature outweigh the security it potentially provides.Missing: EFF | Show results with:EFF
  29. [29]
  30. [30]
    Intel to Phase Out Processor Serial Numbers Attacked by Privacy ...
    Apr 29, 2000 · Privacy advocates, however, claimed that the number could be used to track people's Web travels.Missing: EFF | Show results with:EFF
  31. [31]
    Intel® 64 and IA-32 Architectures Software Developer Manuals
    Oct 29, 2025 · These manuals describe the architecture and programming environment of the Intel® 64 and IA-32 architectures.
  32. [32]
    4. x86 Topology - The Linux Kernel documentation
    Similar to Intel, Centaur and Zhaoxin use a combination of CPUID leaf 0x00000004 (Deterministic Cache Parameters Leaf) and CPUID leaf 0x00000001 (Basic CPUID ...
  33. [33]
    [PDF] Intel® 64 Architecture Processor Topology Enumeration
    The CPUID instruction in Intel 64 architecture defines a rich set of information to assist BIOS, OS, and applications to query processor topology that are ...Missing: guidelines | Show results with:guidelines
  34. [34]
    [PDF] Intel 64 Architecture Processor Topology Enumeration
    0:EAX ≥ 1FH, software can determine whether CPUID leaf 1FH exists by setting EAX=1FH, ECX=0, and executing CPUID to examine the non-zero value returned in EBX, ...<|control11|><|separator|>
  35. [35]
    [PDF] Volume 2A: Instruction Set Reference, AL - Intel
    Refer to all ten volumes when evaluating your design needs. Order Number: 253666-083US. March 2024. Page 2. Notices & Disclaimers.Missing: clock | Show results with:clock
  36. [36]
    AMD Posts Performance Monitoring Patches For Zen 5 CPUs
    Mar 11, 2024 · Sent out this morning were the initial patches around AMD Zen 5 performance monitoring and events for the perf subsystem.Missing: leaf | Show results with:leaf
  37. [37]
  38. [38]
    MWAIT — Monitor Wait
    MWAIT instruction provides hints to allow the processor to enter an implementation-dependent optimized state.
  39. [39]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    ... CPUID Leaf 06H if it needs to detect processors that have opportunistic processor performance operation enabled. When CPUID is executed with EAX = 06H on ...
  40. [40]
    [PDF] Intel® Architecture Instruction Set Extensions and Future Features ...
    Added table listing recent instruction set extensions introduction in Intel. 64 and IA-32 Processors. • Updated CPUID instruction with additional details. • ...
  41. [41]
    [PDF] Intel® Architecture Instruction Set Extensions Programming Reference
    Intel technologies features and benefits depend on system configuration and may require enabled hardware, software, or service activation. Learn.
  42. [42]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    Intel SGX can encompass two collections of instruction extensions, referred to as SGX1 and SGX2, see Table 36-1 and Table 36-2. The SGX1 extensions allow an ...
  43. [43]
  44. [44]
    CPUID—CPU Identification - GitHub Pages
    CPUID returns processor identification and feature information in the EAX, EBX, ECX, and EDX registers.<|control11|><|separator|>
  45. [45]
    Intel to enable SGX technology on future Skylake CPUs - TechSpot
    Oct 5, 2015 · Intel said it will begin shipping Skylake chips with SGX enabled on October 26 and that partners must be ready for the change by November 30.
  46. [46]
    perf tools support for Intel® Processor Trace
    Some Atom and Hybrid CPUs support PTWRITE. To check: # cat /sys/bus ... Alder Lake-N has only E-Cores and more Intel PT features like Event Trace and TNT Disable.
  47. [47]
    Intel® Processor Trace - 011 - ID:655258 | 12th Generation Intel ...
    May 30, 2025 · Intel® Processor Trace (Intel® PT) is a tracing capability added to Intel® Architecture, for use in software debug and profiling. Intel® PT ...
  48. [48]
    [PDF] Intel® Core™ Ultra Processors (PS Series) — Datasheet
    Contact your Intel representative to obtain the latest Intel product specifications and roadmaps. The products described may contain design defects or errors ...
  49. [49]
    [PDF] Intel Key Locker Specification
    ECX[23] = 1. This indicates that the Key Locker feature is supported by the processor and CPUID leaf 19H gives more information about Key Locker capabilities.
  50. [50]
    Intel Back To Working On Key Locker For Linux After Tackling Big ...
    Apr 11, 2023 · Intel Key Locker has been present on Core client processors since Tigerlake and continues to be supported at least through Raptor Lake. However, ...
  51. [51]
    Advanced Matrix Extension (AMX) - x86 - WikiChip
    Jun 30, 2020 · The Advanced Matrix Extension (AMX) is an x86 extension that introduces a new programming framework for working with matrices (rank-2 tensors).
  52. [52]
    Intel Launches 4th Gen Xeon Scalable Processors, Max Series ...
    Jan 10, 2023 · Intel Launches 4th Gen Xeon Scalable Processors, Max Series CPUs and GPUs ... Sapphire Rapids), the Intel® Xeon® CPU Max Series (code-named ...
  53. [53]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: This document contains all four volumes of the Intel 64 and IA-32 Architectures Software. Developer's Manual: Basic Architecture, Order Number 253665; ...
  54. [54]
    [PDF] Intel® 64 and IA-32 Architectures - Software Developer's Manual
    Jun 1, 2025 · Intel technologies may require enabled hardware, software or service activation. No product or component can be absolutely secure.
  55. [55]
    [PDF] Intel® Trust Domain Extensions (Intel® TDX) Module Base ...
    Copies of documents that have an order number and are referenced in this document or other Intel literature may be · obtained by calling 1-800-548-4725 or by ...
  56. [56]
    Intel® Trust Domain Extensions (Intel® TDX)
    Intel® Trust Domain Extensions (Intel® TDX) is a hardware-based security engine that isolates and protects data in use against attack within a VM.
  57. [57]
    AMD and Intel celebrate first anniversary of x86 alliance
    Oct 14, 2025 · With the ratification by the x86 EDA, AVX10 and AMX will be supported by AMD's next-generation processors, though we can only wonder whether ...Missing: CPUID | Show results with:CPUID
  58. [58]
    AMD64 Architecture Programmer's Manual Volume 3
    Jul 2, 2025 · AMD64 Architecture Programmer's Manual Volume 3: General Purpose and System Programming Instructions (PUB) (24594) - 24594. 24594_3.37.pdf.Missing: CPUID | Show results with:CPUID
  59. [59]
    [PDF] Intel® Processor Identification and the CPUID Instruction - Index of /
    To differentiate between the processors, software should check the cache descriptor values through executing CPUID instruction with EAX = 2. If 1M or 2M L2 ...Missing: 1995 expansions
  60. [60]
    CPUID for AMD Ryzen 9 7950X (by [P3D] Crashtest) - CPU-World
    Nov 12, 2023 · Decoded CPUID information ; Vendor: AuthenticAMD ; Processor name (BIOS):, AMD Ryzen 9 7950X 16-Core Processor ; Cores: 16 ; Logical processors: 32.Missing: brand string
  61. [61]
    [PDF] AMD Processor Recognition Application Note - kib.kiev.ua
    Aug 12, 2004 · Like the AMD Athlon and AMD Duron™ processors, AMD Athlon™ 64 and AMD Opteron™ processors support MSRs C001_0030h through C001_0035h. Unlike the ...
  62. [62]
    [PDF] High Performance Computing (HPC) Tuning Guide for AMD EPYC ...
    This document provides guidance for tuning AMD 2nd Gen EPYC™ Processor based systems for HPC workloads, and is not all-inclusive.
  63. [63]
  64. [64]
    sandpile.org -- x86 architecture -- CPUID
    According to [1] and [2] the pre-B0 step Intel P5 processors don't return a vendor ID string. standard level 0000_0001h. input, EAX=0000_0001h, get processor ...
  65. [65]
    [PDF] Open-Source Register Reference For AMD Family 17h Processors ...
    Jul 3, 2018 · This document is an open-source register reference for AMD Family 17h processors, models 00h-2Fh, covering topics like Core Complex, Machine ...
  66. [66]
    [PDF] NGINX® Tuning Guide for AMD EPYC™ 9005 Series Processors
    Address sizes: 52 bits physical, 57 bits virtual. Byte Order: Little Endian. CPU(s):. 384. On-line CPU(s) list: 0-383. Vendor ID: AuthenticAMD. Model name: AMD ...
  67. [67]
    19. AMD Memory Encryption - The Linux Kernel documentation
    The CPUID function 0x8000001f reports information related to SME: 0x8000001f[eax]: Bit[0] indicates support for SME Bit[1] indicates support for SEV 0x8000001f ...
  68. [68]
    x86/cpu, kvm: Support AMD Automatic IBRS - LWN.net
    Jan 23, 2023 · The AMD Zen4 core supports a new feature called Automatic IBRS (Indirect Branch Restricted Speculation). Enable Automatic IBRS by default if the CPU feature is ...
  69. [69]
  70. [70]
    MaximumOctopus/CPUIDx: Detailed CPU information ... - GitHub
    Many changes based on the latest AMD docs (including 80000025h, a new leaf). 0.19 / April 19th 2025 A single change from the March 2025 Intel docs: 24h, all ...
  71. [71]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel® 64 and IA-32 Architectures Software Developer's Manual consists of ten volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  72. [72]
    [PDF] AMD64 Architecture Programmer's Manual, Volume 3 - kib.kiev.ua
    Apr 30, 2020 · The information contained herein is for informational purposes only, and is subject to change without notice.
  73. [73]
    CPUID usage for interaction between Hypervisors and Linux.
    Oct 1, 2008 · ... Intel & AMD have reserved cpuid levels 0x40000000 - 0x400000FF for software use. Hypervisors can use these levels to provide an interface to ...
  74. [74]
    Feature and Interface Discovery | Microsoft Learn
    Jul 8, 2022 · If the “hypervisor present bit” is set, additional CPUID leafs can be queried for more information about the conformant hypervisor and its ...<|separator|>
  75. [75]
    cpuid: ChangeLog - Fossies
    May 13, 2025 · c: For 0x80000021/eax, capitalize REP STOSB & REP CMPSB to match 620 Intel versions in 7/1/eax. ... c: Added 7/1/eax RAO-INT instructions, ...
  76. [76]
    [PDF] VIA PadLock Programming Guide - kib.kiev.ua
    Aug 4, 2005 · This is an implementation choice and future VIA processors may eliminate this dependency. CPUID. If CPUID with EAX = 0xC0000000 returns EAX >= ...Missing: C0000001h | Show results with:C0000001h
  77. [77]
    [PDF] Attacks on More Virtual Machine Emulators - Peter Ferrie
    This code works by executing CPUID to check for an AMD CPU. If one is found, then the CPUID instruction is executed again to query the Easter egg. For a real ...
  78. [78]
    [PDF] AVLeak: Fingerprinting Antivirus Emulators Through Black-Box Testing
    Further, AVG did not pro- duce the “IT'S HAMMER TIME” string for CPUID func- tion 0x8FFFFFFF, a feature in AMD processors [19]. We found interesting ...
  79. [79]
    9.2. Detecting High-Interaction Honeypots - Litux
    Using CPUID with EAX = 0x8FFFFFFF on an AMD K8 and K8 processor returns IT'S HAMMER TIME in EBX, EC X, and EDX, whereas QEMU returns nothing. Ferrier mentions ...
  80. [80]
    [PDF] Intel® SHA Extensions
    A detailed description of the Intel® SHA Extensions and example code sequences to ... function, using inline assembly, performs the CPUID check: int ...
  81. [81]
    [PDF] AMD64 Architecture Programmer's Manual, Volume 2
    ... CPUID ... Instruction Virtualization. Section 15.38 Instruction-Based Sampling Virtualization.
  82. [82]
    steinwurf/cpuid: C++ library for detecting CPU capabilities - GitHub
    cpuid is a C++ library for CPU dispatching. Currently the project can detect the following CPU capabilities: Instruction sets detected on x86: FPU, MMX, ...
  83. [83]
    google/cpu_features: A cross platform C99 library to get cpu features ...
    All flavors of Mips are supported, little and big endian as well as 32/64 bits. Features revealed from sysctl. features are retrieved by the sysctl ...
  84. [84]
    [PDF] Best Practices for Real-Time Optimizations With the 12th Generation ...
    CPUID, by design, returns different values depending on the core it is executed on. On hybrid cores more of the CPUID leaves will have data that varies, meaning ...
  85. [85]
    MIDR_EL1: Main ID Register - Arm Developer
    This document provides descriptions in HTML format for the A-profile system registers and memory-mapped registers.
  86. [86]
    ARM64 CPU Feature Registers — The Linux Kernel documentation
    ### Summary of ARM64 CPU Feature Registers
  87. [87]
    [PDF] The RISC-V Instruction Set Manual - People @EECS
    Nov 4, 2016 · The combination of mvendorid and marchid should uniquely identify the type of hart microarchitecture that is implemented. XLEN-1. 0.
  88. [88]
    [PDF] PVR Register Settings PowerPC Microprocessors Revised 7/7/2005
    The PVR register inside the microprocessor is the only way to identify what version of what part you have. Included in the list below is help in determining ...
  89. [89]
    x86 System emulator — QEMU documentation
    OS requirements . On x86_64 hosts, the default set of CPU features enabled by the KVM accelerator require the host to be running Linux v4.5 or newer.I440fx PC (pc-i440fx, pc) · Recommendations for KVM... · Hyper-V Enlightenments
  90. [90]
    [PDF] CPUID Passthrough Virtualization Considerations - Intel
    CPUID.24H.00H:EAX[bits 31:0]. Reports the maximum supported subleaf. Integer ≥ 1. CPUID.24H.01H:EAX[bits 31:0]. Reserved for AVX10 discrete feature flags.
  91. [91]
    VMware Response to Speculative Execution security issues, CVE ...
    Feb 6, 2025 · It virtualizes the new speculative-execution control mechanism for guest VMs so that a Guest OS can mitigate leakage between processes within ...<|separator|>
  92. [92]
    Hyper-V Enlightenments — QEMU documentation
    When any set of the Hyper-V enlightenments is enabled, QEMU changes hypervisor identification (CPUID 0x40000000..0x4000000A) to Hyper-V. KVM identification and ...Missing: 40000000h | Show results with:40000000h
  93. [93]
    QEMU and the Spectre and Meltdown attacks
    Jan 4, 2018 · QEMU configures the hypervisor to emulate a specific processor model. For x86, QEMU has to be aware of new CPUID bits introduced by the ...
  94. [94]
    Intel® Trust Domain Extension Linux Guest Kernel Security ...
    May 27, 2025 · This document describes the security architecture of the Linux guest kernel running inside the TDX guest.Missing: EAX= 21<|control11|><|separator|>
  95. [95]
    [PDF] AMD SEV-SNP Attestation: Establishing Trust in Guests
    Cloud Provider not trusted with confidentiality or integrity. • Can run malicious hypervisors (memory replay, memory aliasing, event injects, …).Missing: CPUID | Show results with:CPUID
  96. [96]
    AMD SEV-SNP - CCF documentation - Microsoft Open Source
    The CPUID and TCB version must be input as lower-case hex-strings. ... SNP attestation structures contain the combined Family ( Extended Family + Base Family ) ...
  97. [97]
    virt-what - detect if we are running in a virtual machine
    Feb 1, 2011 · virt-what is a shell script which can be used to detect if the program is running in a virtual machine.Missing: CPUID probes