x86-64 microarchitecture levels, CPUs and how to check them

x86-64.net is an independent reference for the x86-64 architecture. It starts with the x86-64 microarchitecture levels: what x86-64-v2, v3 and v4 require, which processors meet them, and how to check a machine.

The x86-64 microarchitecture levels. Each level also requires every feature of the levels above it.
LevelAddsFirst IntelFirst AMD
x86-64-v1CMOV, CX8, FPU, FXSR, MMX, OSFXSR, SCE, SSE, SSE2NetBurst (Prescott, Nocona) (2004)K8 (Hammer) (2003)
x86-64-v2CMPXCHG16B, LAHF-SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3Nehalem (2008)Bulldozer (2011)
x86-64-v3AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, OSXSAVEHaswell (2013)Excavator (2015)
x86-64-v4AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VLSkylake-SP (2017)Zen 4 (2022)

Instruction reference

Every form of the x86 instructions, from the general-purpose base to the newest extensions, with encodings, CPUID bits and the processors that have them, generated from Intel XED.

ABIs and calling conventions

Which registers carry the arguments, how big a long is, and which platforms share an ABI, with the compiled code of real compilers as evidence.

Calling conventions

Stacks, threads, system calls and C++

Check a Linux machine

With glibc 2.33 or later, the dynamic loader tells you. The highest level marked supported is the machine's level.

$ /lib64/ld-linux-x86-64.so.2 --help | grep supported
  x86-64-v3 (supported, searched)
  x86-64-v2 (supported, searched)

More ways to check, including Windows, macOS and from C

A program stops with Fatal glibc error: CPU does not support x86-64-v2 or Illegal instruction? What these error messages mean and how to fix them