The baseline is the feature set of the first x86-64 processors, AMD’s K8 (2003) and Intel’s 64-bit NetBurst chips (2004). It includes SSE2 for floating point, so code built for it never needs the old x87 stack for float and double arithmetic.

Features added by x86-64-v1.
FeatureWhat it providesEnumerated byLinux flagExample
CMOVConditional move.CPUID.01H:EDX[15]cmovcmov
CX88-byte compare-and-exchange.CPUID.01H:EDX[8]cx8cmpxchg8b
FPUx87 floating-point unit.CPUID.01H:EDX[0]fpufld
FXSRFXSAVE and FXRSTOR, saving x87 and SSE state.CPUID.01H:EDX[24]fxsrfxsave
MMX64-bit integer SIMD.CPUID.01H:EDX[23]mmxemms
OSFXSRThe OS has enabled FXSAVE/FXRSTOR and SSE (CR4.OSFXSR).CR4 bit set by the OS
OS support; hardware feature: FXSR
not shownfxsave
SCESYSCALL and SYSRET fast system calls.CPUID.80000001H:EDX[11]syscallsyscall
SSE128-bit single-precision SIMD.CPUID.01H:EDX[25]ssecvtss2si
SSE2128-bit double-precision and integer SIMD.CPUID.01H:EDX[26]sse2cvtpi2pd

What is not in the baseline

Two instructions that later software came to rely on are missing: CMPXCHG16B (a 16-byte compare-and-exchange, used by lock-free code) and LAHF/SAHF in 64-bit mode. Some early K8 and NetBurst models lacked them, so the psABI placed both in x86-64-v2.

Processors at this level

Every x86-64 processor meets the baseline. These stop there:

Intel Core (client)
NetBurst (Prescott, Nocona) (2004), Core (Merom, Conroe) (2006), Penryn (2007)
Intel Atom and E-cores
Bonnell (2008), Saltwell (2011)
AMD (high performance)
K8 (Hammer) (2003), K10 (Family 10h) (2007)
AMD (low power)
Bobcat (2011)

Building for it

The baseline is the default target of GCC and Clang, Go (GOAMD64=v1) and Rust’s x86-64 targets, so a plain build already targets it. To ask for it explicitly:

gcc -march=x86-64 ...
GOAMD64=v1 go build ...
RUSTFLAGS="-C target-cpu=x86-64" cargo build ...

Sources

  1. x86-64 psABI: Micro-Architecture Levels
  2. Go 1.18 release notes (GOAMD64)