493 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			493 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# cpuid
 | 
						|
Package cpuid provides information about the CPU running the current program.
 | 
						|
 | 
						|
CPU features are detected on startup, and kept for fast access through the life of the application.
 | 
						|
Currently x86 / x64 (AMD64/i386) and ARM (ARM64) is supported, and no external C (cgo) code is used, which should make the library very easy to use.
 | 
						|
 | 
						|
You can access the CPU information by accessing the shared CPU variable of the cpuid library.
 | 
						|
 | 
						|
Package home: https://github.com/klauspost/cpuid
 | 
						|
 | 
						|
[](https://pkg.go.dev/github.com/klauspost/cpuid/v2)
 | 
						|
[![Build Status][3]][4]
 | 
						|
 | 
						|
[3]: https://travis-ci.org/klauspost/cpuid.svg?branch=master
 | 
						|
[4]: https://travis-ci.org/klauspost/cpuid
 | 
						|
 | 
						|
## installing
 | 
						|
 | 
						|
`go get -u github.com/klauspost/cpuid/v2` using modules.
 | 
						|
Drop `v2` for others.
 | 
						|
 | 
						|
Installing binary:
 | 
						|
 | 
						|
`go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest`
 | 
						|
 | 
						|
Or download binaries from release page: https://github.com/klauspost/cpuid/releases
 | 
						|
 | 
						|
### Homebrew
 | 
						|
 | 
						|
For macOS/Linux users, you can install via [brew](https://brew.sh/)
 | 
						|
 | 
						|
```sh
 | 
						|
$ brew install cpuid
 | 
						|
```
 | 
						|
 | 
						|
## example
 | 
						|
 | 
						|
```Go
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	. "github.com/klauspost/cpuid/v2"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	// Print basic CPU information:
 | 
						|
	fmt.Println("Name:", CPU.BrandName)
 | 
						|
	fmt.Println("PhysicalCores:", CPU.PhysicalCores)
 | 
						|
	fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore)
 | 
						|
	fmt.Println("LogicalCores:", CPU.LogicalCores)
 | 
						|
	fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID)
 | 
						|
	fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ","))
 | 
						|
	fmt.Println("Cacheline bytes:", CPU.CacheLine)
 | 
						|
	fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes")
 | 
						|
	fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes")
 | 
						|
	fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes")
 | 
						|
	fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes")
 | 
						|
	fmt.Println("Frequency", CPU.Hz, "hz")
 | 
						|
 | 
						|
	// Test if we have these specific features:
 | 
						|
	if CPU.Supports(SSE, SSE2) {
 | 
						|
		fmt.Println("We have Streaming SIMD 2 Extensions")
 | 
						|
	}
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Sample output:
 | 
						|
```
 | 
						|
>go run main.go
 | 
						|
Name: AMD Ryzen 9 3950X 16-Core Processor
 | 
						|
PhysicalCores: 16
 | 
						|
ThreadsPerCore: 2
 | 
						|
LogicalCores: 32
 | 
						|
Family 23 Model: 113 Vendor ID: AMD
 | 
						|
Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CMOV,CX16,F16C,FMA3,HTT,HYPERVISOR,LZCNT,MMX,MMXEXT,NX,POPCNT,RDRAND,RDSEED,RDTSCP,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3
 | 
						|
Cacheline bytes: 64
 | 
						|
L1 Data Cache: 32768 bytes
 | 
						|
L1 Instruction Cache: 32768 bytes
 | 
						|
L2 Cache: 524288 bytes
 | 
						|
L3 Cache: 16777216 bytes
 | 
						|
Frequency 0 hz
 | 
						|
We have Streaming SIMD 2 Extensions
 | 
						|
```
 | 
						|
 | 
						|
# usage
 | 
						|
 | 
						|
The `cpuid.CPU` provides access to CPU features. Use `cpuid.CPU.Supports()` to check for CPU features.
 | 
						|
A faster `cpuid.CPU.Has()` is provided which will usually be inlined by the gc compiler.  
 | 
						|
 | 
						|
To test a larger number of features, they can be combined using `f := CombineFeatures(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2)`, etc.
 | 
						|
This can be using with `cpuid.CPU.HasAll(f)` to quickly test if all features are supported.
 | 
						|
 | 
						|
Note that for some cpu/os combinations some features will not be detected.
 | 
						|
`amd64` has rather good support and should work reliably on all platforms.
 | 
						|
 | 
						|
Note that hypervisors may not pass through all CPU features through to the guest OS,
 | 
						|
so even if your host supports a feature it may not be visible on guests.
 | 
						|
 | 
						|
## arm64 feature detection
 | 
						|
 | 
						|
Not all operating systems provide ARM features directly 
 | 
						|
and there is no safe way to do so for the rest.
 | 
						|
 | 
						|
Currently `arm64/linux` and `arm64/freebsd` should be quite reliable. 
 | 
						|
`arm64/darwin` adds features expected from the M1 processor, but a lot remains undetected.
 | 
						|
 | 
						|
A `DetectARM()` can be used if you are able to control your deployment,
 | 
						|
it will detect CPU features, but may crash if the OS doesn't intercept the calls.
 | 
						|
A `-cpu.arm` flag for detecting unsafe ARM features can be added. See below.
 | 
						|
 
 | 
						|
Note that currently only features are detected on ARM, 
 | 
						|
no additional information is currently available. 
 | 
						|
 | 
						|
## flags
 | 
						|
 | 
						|
It is possible to add flags that affects cpu detection.
 | 
						|
 | 
						|
For this the `Flags()` command is provided.
 | 
						|
 | 
						|
This must be called *before* `flag.Parse()` AND after the flags have been parsed `Detect()` must be called.
 | 
						|
 | 
						|
This means that any detection used in `init()` functions will not contain these flags.
 | 
						|
 | 
						|
Example:
 | 
						|
 | 
						|
```Go
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"flag"
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/klauspost/cpuid/v2"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	cpuid.Flags()
 | 
						|
	flag.Parse()
 | 
						|
	cpuid.Detect()
 | 
						|
 | 
						|
	// Test if we have these specific features:
 | 
						|
	if cpuid.CPU.Supports(cpuid.SSE, cpuid.SSE2) {
 | 
						|
		fmt.Println("We have Streaming SIMD 2 Extensions")
 | 
						|
	}
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## commandline
 | 
						|
 | 
						|
Download as binary from: https://github.com/klauspost/cpuid/releases
 | 
						|
 | 
						|
Install from source:
 | 
						|
 | 
						|
`go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest`
 | 
						|
 | 
						|
### Example
 | 
						|
 | 
						|
```
 | 
						|
λ cpuid
 | 
						|
Name: AMD Ryzen 9 3950X 16-Core Processor
 | 
						|
Vendor String: AuthenticAMD
 | 
						|
Vendor ID: AMD
 | 
						|
PhysicalCores: 16
 | 
						|
Threads Per Core: 2
 | 
						|
Logical Cores: 32
 | 
						|
CPU Family 23 Model: 113
 | 
						|
Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE
 | 
						|
Microarchitecture level: 3
 | 
						|
Cacheline bytes: 64
 | 
						|
L1 Instruction Cache: 32768 bytes
 | 
						|
L1 Data Cache: 32768 bytes
 | 
						|
L2 Cache: 524288 bytes
 | 
						|
L3 Cache: 16777216 bytes
 | 
						|
 | 
						|
```
 | 
						|
### JSON Output:
 | 
						|
 | 
						|
```
 | 
						|
λ cpuid --json
 | 
						|
{
 | 
						|
  "BrandName": "AMD Ryzen 9 3950X 16-Core Processor",
 | 
						|
  "VendorID": 2,
 | 
						|
  "VendorString": "AuthenticAMD",
 | 
						|
  "PhysicalCores": 16,
 | 
						|
  "ThreadsPerCore": 2,
 | 
						|
  "LogicalCores": 32,
 | 
						|
  "Family": 23,
 | 
						|
  "Model": 113,
 | 
						|
  "CacheLine": 64,
 | 
						|
  "Hz": 0,
 | 
						|
  "BoostFreq": 0,
 | 
						|
  "Cache": {
 | 
						|
    "L1I": 32768,
 | 
						|
    "L1D": 32768,
 | 
						|
    "L2": 524288,
 | 
						|
    "L3": 16777216
 | 
						|
  },
 | 
						|
  "SGX": {
 | 
						|
    "Available": false,
 | 
						|
    "LaunchControl": false,
 | 
						|
    "SGX1Supported": false,
 | 
						|
    "SGX2Supported": false,
 | 
						|
    "MaxEnclaveSizeNot64": 0,
 | 
						|
    "MaxEnclaveSize64": 0,
 | 
						|
    "EPCSections": null
 | 
						|
  },
 | 
						|
  "Features": [
 | 
						|
    "ADX",
 | 
						|
    "AESNI",
 | 
						|
    "AVX",
 | 
						|
    "AVX2",
 | 
						|
    "BMI1",
 | 
						|
    "BMI2",
 | 
						|
    "CLMUL",
 | 
						|
    "CLZERO",
 | 
						|
    "CMOV",
 | 
						|
    "CMPXCHG8",
 | 
						|
    "CPBOOST",
 | 
						|
    "CX16",
 | 
						|
    "F16C",
 | 
						|
    "FMA3",
 | 
						|
    "FXSR",
 | 
						|
    "FXSROPT",
 | 
						|
    "HTT",
 | 
						|
    "HYPERVISOR",
 | 
						|
    "LAHF",
 | 
						|
    "LZCNT",
 | 
						|
    "MCAOVERFLOW",
 | 
						|
    "MMX",
 | 
						|
    "MMXEXT",
 | 
						|
    "MOVBE",
 | 
						|
    "NX",
 | 
						|
    "OSXSAVE",
 | 
						|
    "POPCNT",
 | 
						|
    "RDRAND",
 | 
						|
    "RDSEED",
 | 
						|
    "RDTSCP",
 | 
						|
    "SCE",
 | 
						|
    "SHA",
 | 
						|
    "SSE",
 | 
						|
    "SSE2",
 | 
						|
    "SSE3",
 | 
						|
    "SSE4",
 | 
						|
    "SSE42",
 | 
						|
    "SSE4A",
 | 
						|
    "SSSE3",
 | 
						|
    "SUCCOR",
 | 
						|
    "X87",
 | 
						|
    "XSAVE"
 | 
						|
  ],
 | 
						|
  "X64Level": 3
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Check CPU microarch level
 | 
						|
 | 
						|
```
 | 
						|
λ cpuid --check-level=3
 | 
						|
2022/03/18 17:04:40 AMD Ryzen 9 3950X 16-Core Processor
 | 
						|
2022/03/18 17:04:40 Microarchitecture level 3 is supported. Max level is 3.
 | 
						|
Exit Code 0
 | 
						|
 | 
						|
λ cpuid --check-level=4
 | 
						|
2022/03/18 17:06:18 AMD Ryzen 9 3950X 16-Core Processor
 | 
						|
2022/03/18 17:06:18 Microarchitecture level 4 not supported. Max level is 3.
 | 
						|
Exit Code 1
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
## Available flags
 | 
						|
 | 
						|
### x86 & amd64 
 | 
						|
 | 
						|
| Feature Flag       | Description                                                                                                                                                                        |
 | 
						|
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | 
						|
| ADX                | Intel ADX (Multi-Precision Add-Carry Instruction Extensions)                                                                                                                       |
 | 
						|
| AESNI              | Advanced Encryption Standard New Instructions                                                                                                                                      |
 | 
						|
| AMD3DNOW           | AMD 3DNOW                                                                                                                                                                          |
 | 
						|
| AMD3DNOWEXT        | AMD 3DNowExt                                                                                                                                                                       |
 | 
						|
| AMXBF16            | Tile computational operations on BFLOAT16 numbers                                                                                                                                  |
 | 
						|
| AMXINT8            | Tile computational operations on 8-bit integers                                                                                                                                    |
 | 
						|
| AMXFP16            | Tile computational operations on FP16 numbers                                                                                                                                      |
 | 
						|
| AMXTILE            | Tile architecture                                                                                                                                                                  |
 | 
						|
| AVX                | AVX functions                                                                                                                                                                      |
 | 
						|
| AVX2               | AVX2 functions                                                                                                                                                                     |
 | 
						|
| AVX512BF16         | AVX-512 BFLOAT16 Instructions                                                                                                                                                      |
 | 
						|
| AVX512BITALG       | AVX-512 Bit Algorithms                                                                                                                                                             |
 | 
						|
| AVX512BW           | AVX-512 Byte and Word Instructions                                                                                                                                                 |
 | 
						|
| AVX512CD           | AVX-512 Conflict Detection Instructions                                                                                                                                            |
 | 
						|
| AVX512DQ           | AVX-512 Doubleword and Quadword Instructions                                                                                                                                       |
 | 
						|
| AVX512ER           | AVX-512 Exponential and Reciprocal Instructions                                                                                                                                    |
 | 
						|
| AVX512F            | AVX-512 Foundation                                                                                                                                                                 |
 | 
						|
| AVX512FP16         | AVX-512 FP16 Instructions                                                                                                                                                          |
 | 
						|
| AVX512IFMA         | AVX-512 Integer Fused Multiply-Add Instructions                                                                                                                                    |
 | 
						|
| AVX512PF           | AVX-512 Prefetch Instructions                                                                                                                                                      |
 | 
						|
| AVX512VBMI         | AVX-512 Vector Bit Manipulation Instructions                                                                                                                                       |
 | 
						|
| AVX512VBMI2        | AVX-512 Vector Bit Manipulation Instructions, Version 2                                                                                                                            |
 | 
						|
| AVX512VL           | AVX-512 Vector Length Extensions                                                                                                                                                   |
 | 
						|
| AVX512VNNI         | AVX-512 Vector Neural Network Instructions                                                                                                                                         |
 | 
						|
| AVX512VP2INTERSECT | AVX-512 Intersect for D/Q                                                                                                                                                          |
 | 
						|
| AVX512VPOPCNTDQ    | AVX-512 Vector Population Count Doubleword and Quadword                                                                                                                            |
 | 
						|
| AVXIFMA            | AVX-IFMA instructions                                                                                                                                                              |
 | 
						|
| AVXNECONVERT       | AVX-NE-CONVERT instructions                                                                                                                                                        |
 | 
						|
| AVXSLOW            | Indicates the CPU performs 2 128 bit operations instead of one                                                                                                                     |
 | 
						|
| AVXVNNI            | AVX (VEX encoded) VNNI neural network instructions                                                                                                                                 |
 | 
						|
| AVXVNNIINT8        | AVX-VNNI-INT8 instructions                                                                                                                                                         |
 | 
						|
| BHI_CTRL           | Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598                                                                    |
 | 
						|
| BMI1               | Bit Manipulation Instruction Set 1                                                                                                                                                 |
 | 
						|
| BMI2               | Bit Manipulation Instruction Set 2                                                                                                                                                 |
 | 
						|
| CETIBT             | Intel CET Indirect Branch Tracking                                                                                                                                                 |
 | 
						|
| CETSS              | Intel CET Shadow Stack                                                                                                                                                             |
 | 
						|
| CLDEMOTE           | Cache Line Demote                                                                                                                                                                  |
 | 
						|
| CLMUL              | Carry-less Multiplication                                                                                                                                                          |
 | 
						|
| CLZERO             | CLZERO instruction supported                                                                                                                                                       |
 | 
						|
| CMOV               | i686 CMOV                                                                                                                                                                          |
 | 
						|
| CMPCCXADD          | CMPCCXADD instructions                                                                                                                                                             |
 | 
						|
| CMPSB_SCADBS_SHORT | Fast short CMPSB and SCASB                                                                                                                                                         |
 | 
						|
| CMPXCHG8           | CMPXCHG8 instruction                                                                                                                                                               |
 | 
						|
| CPBOOST            | Core Performance Boost                                                                                                                                                             |
 | 
						|
| CPPC               | AMD: Collaborative Processor Performance Control                                                                                                                                   |
 | 
						|
| CX16               | CMPXCHG16B Instruction                                                                                                                                                             |
 | 
						|
| EFER_LMSLE_UNS     | AMD: =Core::X86::Msr::EFER[LMSLE] is not supported, and MBZ                                                                                                                        |
 | 
						|
| ENQCMD             | Enqueue Command                                                                                                                                                                    |
 | 
						|
| ERMS               | Enhanced REP MOVSB/STOSB                                                                                                                                                           |
 | 
						|
| F16C               | Half-precision floating-point conversion                                                                                                                                           |
 | 
						|
| FLUSH_L1D          | Flush L1D cache                                                                                                                                                                    |
 | 
						|
| FMA3               | Intel FMA 3. Does not imply AVX.                                                                                                                                                   |
 | 
						|
| FMA4               | Bulldozer FMA4 functions                                                                                                                                                           |
 | 
						|
| FP128              | AMD: When set, the internal FP/SIMD execution datapath is 128-bits wide                                                                                                            |
 | 
						|
| FP256              | AMD: When set, the internal FP/SIMD execution datapath is 256-bits wide                                                                                                            |
 | 
						|
| FSRM               | Fast Short Rep Mov                                                                                                                                                                 |
 | 
						|
| FXSR               | FXSAVE, FXRESTOR instructions, CR4 bit 9                                                                                                                                           |
 | 
						|
| FXSROPT            | FXSAVE/FXRSTOR optimizations                                                                                                                                                       |
 | 
						|
| GFNI               | Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage.                                                                                  |
 | 
						|
| HLE                | Hardware Lock Elision                                                                                                                                                              |
 | 
						|
| HRESET             | If set CPU supports history reset and the IA32_HRESET_ENABLE MSR                                                                                                                   |
 | 
						|
| HTT                | Hyperthreading (enabled)                                                                                                                                                           |
 | 
						|
| HWA                | Hardware assert supported. Indicates support for MSRC001_10                                                                                                                        |
 | 
						|
| HYBRID_CPU         | This part has CPUs of more than one type.                                                                                                                                          |
 | 
						|
| HYPERVISOR         | This bit has been reserved by Intel & AMD for use by hypervisors                                                                                                                   |
 | 
						|
| IA32_ARCH_CAP      | IA32_ARCH_CAPABILITIES MSR (Intel)                                                                                                                                                 |
 | 
						|
| IA32_CORE_CAP      | IA32_CORE_CAPABILITIES MSR                                                                                                                                                         |
 | 
						|
| IBPB               | Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB)                                                                                         |
 | 
						|
| IBRS               | AMD: Indirect Branch Restricted Speculation                                                                                                                                        |
 | 
						|
| IBRS_PREFERRED     | AMD: IBRS is preferred over software solution                                                                                                                                      |
 | 
						|
| IBRS_PROVIDES_SMP  | AMD: IBRS provides Same Mode Protection                                                                                                                                            |
 | 
						|
| IBS                | Instruction Based Sampling (AMD)                                                                                                                                                   |
 | 
						|
| IBSBRNTRGT         | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSFETCHSAM        | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSFFV             | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSOPCNT           | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSOPCNTEXT        | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSOPSAM           | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSRDWROPCNT       | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBSRIPINVALIDCHK   | Instruction Based Sampling Feature (AMD)                                                                                                                                           |
 | 
						|
| IBS_FETCH_CTLX     | AMD: IBS fetch control extended MSR supported                                                                                                                                      |
 | 
						|
| IBS_OPDATA4        | AMD: IBS op data 4 MSR supported                                                                                                                                                   |
 | 
						|
| IBS_OPFUSE         | AMD: Indicates support for IbsOpFuse                                                                                                                                               |
 | 
						|
| IBS_PREVENTHOST    | Disallowing IBS use by the host supported                                                                                                                                          |
 | 
						|
| IBS_ZEN4           | Fetch and Op IBS support IBS extensions added with Zen4                                                                                                                            |
 | 
						|
| IDPRED_CTRL        | IPRED_DIS                                                                                                                                                                          |
 | 
						|
| INT_WBINVD         | WBINVD/WBNOINVD are interruptible.                                                                                                                                                 |
 | 
						|
| INVLPGB            | NVLPGB and TLBSYNC instruction supported                                                                                                                                           |
 | 
						|
| LAHF               | LAHF/SAHF in long mode                                                                                                                                                             |
 | 
						|
| LAM                | If set, CPU supports Linear Address Masking                                                                                                                                        |
 | 
						|
| LBRVIRT            | LBR virtualization                                                                                                                                                                 |
 | 
						|
| LZCNT              | LZCNT instruction                                                                                                                                                                  |
 | 
						|
| MCAOVERFLOW        | MCA overflow recovery support.                                                                                                                                                     |
 | 
						|
| MCDT_NO            | Processor do not exhibit MXCSR Configuration Dependent Timing behavior and do not need to mitigate it.                                                                             |
 | 
						|
| MCOMMIT            | MCOMMIT instruction supported                                                                                                                                                      |
 | 
						|
| MD_CLEAR           | VERW clears CPU buffers                                                                                                                                                            |
 | 
						|
| MMX                | standard MMX                                                                                                                                                                       |
 | 
						|
| MMXEXT             | SSE integer functions or AMD MMX ext                                                                                                                                               |
 | 
						|
| MOVBE              | MOVBE instruction (big-endian)                                                                                                                                                     |
 | 
						|
| MOVDIR64B          | Move 64 Bytes as Direct Store                                                                                                                                                      |
 | 
						|
| MOVDIRI            | Move Doubleword as Direct Store                                                                                                                                                    |
 | 
						|
| MOVSB_ZL           | Fast Zero-Length MOVSB                                                                                                                                                             |
 | 
						|
| MPX                | Intel MPX (Memory Protection Extensions)                                                                                                                                           |
 | 
						|
| MOVU               | MOVU SSE instructions are more efficient and should be preferred to SSE	MOVL/MOVH. MOVUPS is more efficient than MOVLPS/MOVHPS. MOVUPD is more efficient than MOVLPD/MOVHPD       |
 | 
						|
| MSRIRC             | Instruction Retired Counter MSR available                                                                                                                                          |
 | 
						|
| MSRLIST            | Read/Write List of Model Specific Registers                                                                                                                                        |
 | 
						|
| MSR_PAGEFLUSH      | Page Flush MSR available                                                                                                                                                           |
 | 
						|
| NRIPS              | Indicates support for NRIP save on VMEXIT                                                                                                                                          |
 | 
						|
| NX                 | NX (No-Execute) bit                                                                                                                                                                |
 | 
						|
| OSXSAVE            | XSAVE enabled by OS                                                                                                                                                                |
 | 
						|
| PCONFIG            | PCONFIG for Intel Multi-Key Total Memory Encryption                                                                                                                                |
 | 
						|
| POPCNT             | POPCNT instruction                                                                                                                                                                 |
 | 
						|
| PPIN               | AMD: Protected Processor Inventory Number support. Indicates that Protected Processor Inventory Number (PPIN) capability can be enabled                                            |
 | 
						|
| PREFETCHI          | PREFETCHIT0/1 instructions                                                                                                                                                         |
 | 
						|
| PSFD               | Predictive Store Forward Disable                                                                                                                                                   |
 | 
						|
| RDPRU              | RDPRU instruction supported                                                                                                                                                        |
 | 
						|
| RDRAND             | RDRAND instruction is available                                                                                                                                                    |
 | 
						|
| RDSEED             | RDSEED instruction is available                                                                                                                                                    |
 | 
						|
| RDTSCP             | RDTSCP Instruction                                                                                                                                                                 |
 | 
						|
| RRSBA_CTRL         | Restricted RSB Alternate                                                                                                                                                           |
 | 
						|
| RTM                | Restricted Transactional Memory                                                                                                                                                    |
 | 
						|
| RTM_ALWAYS_ABORT   | Indicates that the loaded microcode is forcing RTM abort.                                                                                                                          |
 | 
						|
| SERIALIZE          | Serialize Instruction Execution                                                                                                                                                    |
 | 
						|
| SEV                | AMD Secure Encrypted Virtualization supported                                                                                                                                      |
 | 
						|
| SEV_64BIT          | AMD SEV guest execution only allowed from a 64-bit host                                                                                                                            |
 | 
						|
| SEV_ALTERNATIVE    | AMD SEV Alternate Injection supported                                                                                                                                              |
 | 
						|
| SEV_DEBUGSWAP      | Full debug state swap supported for SEV-ES guests                                                                                                                                  |
 | 
						|
| SEV_ES             | AMD SEV Encrypted State supported                                                                                                                                                  |
 | 
						|
| SEV_RESTRICTED     | AMD SEV Restricted Injection supported                                                                                                                                             |
 | 
						|
| SEV_SNP            | AMD SEV Secure Nested Paging supported                                                                                                                                             |
 | 
						|
| SGX                | Software Guard Extensions                                                                                                                                                          |
 | 
						|
| SGXLC              | Software Guard Extensions Launch Control                                                                                                                                           |
 | 
						|
| SHA                | Intel SHA Extensions                                                                                                                                                               |
 | 
						|
| SME                | AMD Secure Memory Encryption supported                                                                                                                                             |
 | 
						|
| SME_COHERENT       | AMD Hardware cache coherency across encryption domains enforced                                                                                                                    |
 | 
						|
| SPEC_CTRL_SSBD     | Speculative Store Bypass Disable                                                                                                                                                   |
 | 
						|
| SRBDS_CTRL         | SRBDS mitigation MSR available                                                                                                                                                     |
 | 
						|
| SSE                | SSE functions                                                                                                                                                                      |
 | 
						|
| SSE2               | P4 SSE functions                                                                                                                                                                   |
 | 
						|
| SSE3               | Prescott SSE3 functions                                                                                                                                                            |
 | 
						|
| SSE4               | Penryn SSE4.1 functions                                                                                                                                                            |
 | 
						|
| SSE42              | Nehalem SSE4.2 functions                                                                                                                                                           |
 | 
						|
| SSE4A              | AMD Barcelona microarchitecture SSE4a instructions                                                                                                                                 |
 | 
						|
| SSSE3              | Conroe SSSE3 functions                                                                                                                                                             |
 | 
						|
| STIBP              | Single Thread Indirect Branch Predictors                                                                                                                                           |
 | 
						|
| STIBP_ALWAYSON     | AMD: Single Thread Indirect Branch Prediction Mode has Enhanced Performance and may be left Always On                                                                              |
 | 
						|
| STOSB_SHORT        | Fast short STOSB                                                                                                                                                                   |
 | 
						|
| SUCCOR             | Software uncorrectable error containment and recovery capability.                                                                                                                  |
 | 
						|
| SVM                | AMD Secure Virtual Machine                                                                                                                                                         |
 | 
						|
| SVMDA              | Indicates support for the SVM decode assists.                                                                                                                                      |
 | 
						|
| SVMFBASID          | SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control |
 | 
						|
| SVML               | AMD SVM lock. Indicates support for SVM-Lock.                                                                                                                                      |
 | 
						|
| SVMNP              | AMD SVM nested paging                                                                                                                                                              |
 | 
						|
| SVMPF              | SVM pause intercept filter. Indicates support for the pause intercept filter                                                                                                       |
 | 
						|
| SVMPFT             | SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold                                                                                           |
 | 
						|
| SYSCALL            | System-Call Extension (SCE): SYSCALL and SYSRET instructions.                                                                                                                      |
 | 
						|
| SYSEE              | SYSENTER and SYSEXIT instructions                                                                                                                                                  |
 | 
						|
| TBM                | AMD Trailing Bit Manipulation                                                                                                                                                      |
 | 
						|
| TLB_FLUSH_NESTED   | AMD: Flushing includes all the nested translations for guest translations                                                                                                          |
 | 
						|
| TME                | Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE.                         |
 | 
						|
| TOPEXT             | TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX.                                                         |
 | 
						|
| TSCRATEMSR         | MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104                                                                                                       |
 | 
						|
| TSXLDTRK           | Intel TSX Suspend Load Address Tracking                                                                                                                                            |
 | 
						|
| VAES               | Vector AES. AVX(512) versions requires additional checks.                                                                                                                          |
 | 
						|
| VMCBCLEAN          | VMCB clean bits. Indicates support for VMCB clean bits.                                                                                                                            |
 | 
						|
| VMPL               | AMD VM Permission Levels supported                                                                                                                                                 |
 | 
						|
| VMSA_REGPROT       | AMD VMSA Register Protection supported                                                                                                                                             |
 | 
						|
| VMX                | Virtual Machine Extensions                                                                                                                                                         |
 | 
						|
| VPCLMULQDQ         | Carry-Less Multiplication Quadword. Requires AVX for 3 register versions.                                                                                                          |
 | 
						|
| VTE                | AMD Virtual Transparent Encryption supported                                                                                                                                       |
 | 
						|
| WAITPKG            | TPAUSE, UMONITOR, UMWAIT                                                                                                                                                           |
 | 
						|
| WBNOINVD           | Write Back and Do Not Invalidate Cache                                                                                                                                             |
 | 
						|
| WRMSRNS            | Non-Serializing Write to Model Specific Register                                                                                                                                   |
 | 
						|
| X87                | FPU                                                                                                                                                                                |
 | 
						|
| XGETBV1            | Supports XGETBV with ECX = 1                                                                                                                                                       |
 | 
						|
| XOP                | Bulldozer XOP functions                                                                                                                                                            |
 | 
						|
| XSAVE              | XSAVE, XRESTOR, XSETBV, XGETBV                                                                                                                                                     |
 | 
						|
| XSAVEC             | Supports XSAVEC and the compacted form of XRSTOR.                                                                                                                                  |
 | 
						|
| XSAVEOPT           | XSAVEOPT available                                                                                                                                                                 |
 | 
						|
| XSAVES             | Supports XSAVES/XRSTORS and IA32_XSS                                                                                                                                               |
 | 
						|
 | 
						|
# ARM features:
 | 
						|
 | 
						|
| Feature Flag | Description                                                      |
 | 
						|
|--------------|------------------------------------------------------------------|
 | 
						|
| AESARM       | AES instructions                                                 |
 | 
						|
| ARMCPUID     | Some CPU ID registers readable at user-level                     |
 | 
						|
| ASIMD        | Advanced SIMD                                                    |
 | 
						|
| ASIMDDP      | SIMD Dot Product                                                 |
 | 
						|
| ASIMDHP      | Advanced SIMD half-precision floating point                      |
 | 
						|
| ASIMDRDM     | Rounding Double Multiply Accumulate/Subtract (SQRDMLAH/SQRDMLSH) |
 | 
						|
| ATOMICS      | Large System Extensions (LSE)                                    |
 | 
						|
| CRC32        | CRC32/CRC32C instructions                                        |
 | 
						|
| DCPOP        | Data cache clean to Point of Persistence (DC CVAP)               |
 | 
						|
| EVTSTRM      | Generic timer                                                    |
 | 
						|
| FCMA         | Floatin point complex number addition and multiplication         |
 | 
						|
| FP           | Single-precision and double-precision floating point             |
 | 
						|
| FPHP         | Half-precision floating point                                    |
 | 
						|
| GPA          | Generic Pointer Authentication                                   |
 | 
						|
| JSCVT        | Javascript-style double->int convert (FJCVTZS)                   |
 | 
						|
| LRCPC        | Weaker release consistency (LDAPR, etc)                          |
 | 
						|
| PMULL        | Polynomial Multiply instructions (PMULL/PMULL2)                  |
 | 
						|
| SHA1         | SHA-1 instructions (SHA1C, etc)                                  |
 | 
						|
| SHA2         | SHA-2 instructions (SHA256H, etc)                                |
 | 
						|
| SHA3         | SHA-3 instructions (EOR3, RAXI, XAR, BCAX)                       |
 | 
						|
| SHA512       | SHA512 instructions                                              |
 | 
						|
| SM3          | SM3 instructions                                                 |
 | 
						|
| SM4          | SM4 instructions                                                 |
 | 
						|
| SVE          | Scalable Vector Extension                                        |
 | 
						|
 | 
						|
# license
 | 
						|
 | 
						|
This code is published under an MIT license. See LICENSE file for more information.
 |