CPUID
FMA + AVX
CPUID.01H:ECX[12]
CPUID.01H:ECX[28]
Instructions
60 mnemonics
Processors
Haswell, Broadwell, Skylake, Comet Lake, Cannon Lake, Ice Lake (client), Tiger Lake, Alder Lake, Arrow Lake, Panther Lake, Nova Lake, Skylake-SP, Cascade Lake, Cooper Lake, Ice Lake (server), Sapphire Rapids, Emerald Rapids, Granite Rapids, Diamond Rapids, Sierra Forest, Clearwater Forest, Knights Landing, Knights Mill, Piledriver, Zen, Zen+, Zen 2, Zen 3, Zen 4, Zen 5, Zen 6
Linux flag
fma

A fused multiply-add computes a times b plus c with a single rounding at the end, which is both faster and more accurate than a multiply followed by an add. FMA (sometimes called FMA3, after its three operands) has multiply-add, multiply-subtract, their negated forms and the alternating VFMADDSUB213PS family, for packed and scalar singles and doubles. Each exists in three operand orders: in VFMADD132PS, VFMADD213PS and VFMADD231PS the digits say which operands are multiplied and which is added, and the result always replaces the first operand. It is part of x86-64-v3; AMD’s earlier four-operand FMA4 is a different extension.

Instructions

Mnemonics with at least one form in FMA. Each page lists all forms of the mnemonic, including those of other extensions.
MnemonicSummaryForms
VFMADD132PDFused multiply-add of packed doubles: first operand times third plus second, into the first.4
VFMADD132PSFused multiply-add of packed singles: first operand times third plus second, into the first.4
VFMADD132SDFused multiply-add of the low doubles: first times third plus second, into the first; the rest is unchanged.2
VFMADD132SSFused multiply-add of the low singles: first times third plus second, into the first; the rest is unchanged.2
VFMADD213PDFused multiply-add of packed doubles: second operand times first plus third, into the first.4
VFMADD213PSFused multiply-add of packed singles: second operand times first plus third, into the first.4
VFMADD213SDFused multiply-add of the low doubles: second times first plus third, into the first; the rest is unchanged.2
VFMADD213SSFused multiply-add of the low singles: second times first plus third, into the first; the rest is unchanged.2
VFMADD231PDFused multiply-add of packed doubles: second operand times third plus first, into the first.4
VFMADD231PSFused multiply-add of packed singles: second operand times third plus first, into the first.4
VFMADD231SDFused multiply-add of the low doubles: second times third plus first, into the first; the rest is unchanged.2
VFMADD231SSFused multiply-add of the low singles: second times third plus first, into the first; the rest is unchanged.2
VFMADDSUB132PDFused multiply of packed doubles, first times third, minus the second in even elements and plus it in odd ones, into the first.4
VFMADDSUB132PSFused multiply of packed singles, first times third, minus the second in even elements and plus it in odd ones, into the first.4
VFMADDSUB213PDFused multiply of packed doubles, second times first, minus the third in even elements and plus it in odd ones, into the first.4
VFMADDSUB213PSFused multiply of packed singles, second times first, minus the third in even elements and plus it in odd ones, into the first.4
VFMADDSUB231PDFused multiply of packed doubles, second times third, minus the first in even elements and plus it in odd ones, into the first.4
VFMADDSUB231PSFused multiply of packed singles, second times third, minus the first in even elements and plus it in odd ones, into the first.4
VFMSUB132PDFused multiply-subtract of packed doubles: first operand times third minus second, into the first.4
VFMSUB132PSFused multiply-subtract of packed singles: first operand times third minus second, into the first.4
VFMSUB132SDFused multiply-subtract of the low doubles: first times third minus second, into the first; the rest is unchanged.2
VFMSUB132SSFused multiply-subtract of the low singles: first times third minus second, into the first; the rest is unchanged.2
VFMSUB213PDFused multiply-subtract of packed doubles: second operand times first minus third, into the first.4
VFMSUB213PSFused multiply-subtract of packed singles: second operand times first minus third, into the first.4
VFMSUB213SDFused multiply-subtract of the low doubles: second times first minus third, into the first; the rest is unchanged.2
VFMSUB213SSFused multiply-subtract of the low singles: second times first minus third, into the first; the rest is unchanged.2
VFMSUB231PDFused multiply-subtract of packed doubles: second operand times third minus first, into the first.4
VFMSUB231PSFused multiply-subtract of packed singles: second operand times third minus first, into the first.4
VFMSUB231SDFused multiply-subtract of the low doubles: second times third minus first, into the first; the rest is unchanged.2
VFMSUB231SSFused multiply-subtract of the low singles: second times third minus first, into the first; the rest is unchanged.2
VFMSUBADD132PDFused multiply of packed doubles, first times third, plus the second in even elements and minus it in odd ones, into the first.4
VFMSUBADD132PSFused multiply of packed singles, first times third, plus the second in even elements and minus it in odd ones, into the first.4
VFMSUBADD213PDFused multiply of packed doubles, second times first, plus the third in even elements and minus it in odd ones, into the first.4
VFMSUBADD213PSFused multiply of packed singles, second times first, plus the third in even elements and minus it in odd ones, into the first.4
VFMSUBADD231PDFused multiply of packed doubles, second times third, plus the first in even elements and minus it in odd ones, into the first.4
VFMSUBADD231PSFused multiply of packed singles, second times third, plus the first in even elements and minus it in odd ones, into the first.4
VFNMADD132PDFused negated multiply-add of packed doubles: minus first operand times third, plus second, into the first.4
VFNMADD132PSFused negated multiply-add of packed singles: minus first operand times third, plus second, into the first.4
VFNMADD132SDFused negated multiply-add of the low doubles: minus first times third, plus second, into the first; the rest is unchanged.2
VFNMADD132SSFused negated multiply-add of the low singles: minus first times third, plus second, into the first; the rest is unchanged.2
VFNMADD213PDFused negated multiply-add of packed doubles: minus second operand times first, plus third, into the first.4
VFNMADD213PSFused negated multiply-add of packed singles: minus second operand times first, plus third, into the first.4
VFNMADD213SDFused negated multiply-add of the low doubles: minus second times first, plus third, into the first; the rest is unchanged.2
VFNMADD213SSFused negated multiply-add of the low singles: minus second times first, plus third, into the first; the rest is unchanged.2
VFNMADD231PDFused negated multiply-add of packed doubles: minus second operand times third, plus first, into the first.4
VFNMADD231PSFused negated multiply-add of packed singles: minus second operand times third, plus first, into the first.4
VFNMADD231SDFused negated multiply-add of the low doubles: minus second times third, plus first, into the first; the rest is unchanged.2
VFNMADD231SSFused negated multiply-add of the low singles: minus second times third, plus first, into the first; the rest is unchanged.2
VFNMSUB132PDFused negated multiply-subtract of packed doubles: minus first operand times third, minus second, into the first.4
VFNMSUB132PSFused negated multiply-subtract of packed singles: minus first operand times third, minus second, into the first.4
VFNMSUB132SDFused negated multiply-subtract of the low doubles: minus first times third, minus second, into the first; the rest is unchanged.2
VFNMSUB132SSFused negated multiply-subtract of the low singles: minus first times third, minus second, into the first; the rest is unchanged.2
VFNMSUB213PDFused negated multiply-subtract of packed doubles: minus second operand times first, minus third, into the first.4
VFNMSUB213PSFused negated multiply-subtract of packed singles: minus second operand times first, minus third, into the first.4
VFNMSUB213SDFused negated multiply-subtract of the low doubles: minus second times first, minus third, into the first; the rest is unchanged.2
VFNMSUB213SSFused negated multiply-subtract of the low singles: minus second times first, minus third, into the first; the rest is unchanged.2
VFNMSUB231PDFused negated multiply-subtract of packed doubles: minus second operand times third, minus first, into the first.4
VFNMSUB231PSFused negated multiply-subtract of packed singles: minus second operand times third, minus first, into the first.4
VFNMSUB231SDFused negated multiply-subtract of the low doubles: minus second times third, minus first, into the first; the rest is unchanged.2
VFNMSUB231SSFused negated multiply-subtract of the low singles: minus second times third, minus first, into the first; the rest is unchanged.2

CPUID and processors

XED splits FMA into 1 ISA set. Software can use a form when the processor reports every CPUID bit of one alternative of the form's ISA set.

XED ISA sets of FMA. Alternatives are separated by “or”; processors follow XED’s chip model, whose AMD processors end with Zen 2, and the CPU data of this site for Zen 3 to Zen 6.

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, ISA sets, CPUID bits and chip model.
  2. The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s -march feature sets and AMD’s Processor Programming References, which the page of each processor cites.
  3. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026)

The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The text is our own.