Vector (SSE, AVX and AVX10)
FMA
Fused multiply-add of packed and scalar singles and doubles, rounded once, in three operand orders (132, 213 and 231) that choose which operand the result replaces.
- 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
| Mnemonic | Summary | Forms |
|---|---|---|
| VFMADD132PD | Fused multiply-add of packed doubles: first operand times third plus second, into the first. | 4 |
| VFMADD132PS | Fused multiply-add of packed singles: first operand times third plus second, into the first. | 4 |
| VFMADD132SD | Fused multiply-add of the low doubles: first times third plus second, into the first; the rest is unchanged. | 2 |
| VFMADD132SS | Fused multiply-add of the low singles: first times third plus second, into the first; the rest is unchanged. | 2 |
| VFMADD213PD | Fused multiply-add of packed doubles: second operand times first plus third, into the first. | 4 |
| VFMADD213PS | Fused multiply-add of packed singles: second operand times first plus third, into the first. | 4 |
| VFMADD213SD | Fused multiply-add of the low doubles: second times first plus third, into the first; the rest is unchanged. | 2 |
| VFMADD213SS | Fused multiply-add of the low singles: second times first plus third, into the first; the rest is unchanged. | 2 |
| VFMADD231PD | Fused multiply-add of packed doubles: second operand times third plus first, into the first. | 4 |
| VFMADD231PS | Fused multiply-add of packed singles: second operand times third plus first, into the first. | 4 |
| VFMADD231SD | Fused multiply-add of the low doubles: second times third plus first, into the first; the rest is unchanged. | 2 |
| VFMADD231SS | Fused multiply-add of the low singles: second times third plus first, into the first; the rest is unchanged. | 2 |
| VFMADDSUB132PD | Fused multiply of packed doubles, first times third, minus the second in even elements and plus it in odd ones, into the first. | 4 |
| VFMADDSUB132PS | Fused multiply of packed singles, first times third, minus the second in even elements and plus it in odd ones, into the first. | 4 |
| VFMADDSUB213PD | Fused multiply of packed doubles, second times first, minus the third in even elements and plus it in odd ones, into the first. | 4 |
| VFMADDSUB213PS | Fused multiply of packed singles, second times first, minus the third in even elements and plus it in odd ones, into the first. | 4 |
| VFMADDSUB231PD | Fused multiply of packed doubles, second times third, minus the first in even elements and plus it in odd ones, into the first. | 4 |
| VFMADDSUB231PS | Fused multiply of packed singles, second times third, minus the first in even elements and plus it in odd ones, into the first. | 4 |
| VFMSUB132PD | Fused multiply-subtract of packed doubles: first operand times third minus second, into the first. | 4 |
| VFMSUB132PS | Fused multiply-subtract of packed singles: first operand times third minus second, into the first. | 4 |
| VFMSUB132SD | Fused multiply-subtract of the low doubles: first times third minus second, into the first; the rest is unchanged. | 2 |
| VFMSUB132SS | Fused multiply-subtract of the low singles: first times third minus second, into the first; the rest is unchanged. | 2 |
| VFMSUB213PD | Fused multiply-subtract of packed doubles: second operand times first minus third, into the first. | 4 |
| VFMSUB213PS | Fused multiply-subtract of packed singles: second operand times first minus third, into the first. | 4 |
| VFMSUB213SD | Fused multiply-subtract of the low doubles: second times first minus third, into the first; the rest is unchanged. | 2 |
| VFMSUB213SS | Fused multiply-subtract of the low singles: second times first minus third, into the first; the rest is unchanged. | 2 |
| VFMSUB231PD | Fused multiply-subtract of packed doubles: second operand times third minus first, into the first. | 4 |
| VFMSUB231PS | Fused multiply-subtract of packed singles: second operand times third minus first, into the first. | 4 |
| VFMSUB231SD | Fused multiply-subtract of the low doubles: second times third minus first, into the first; the rest is unchanged. | 2 |
| VFMSUB231SS | Fused multiply-subtract of the low singles: second times third minus first, into the first; the rest is unchanged. | 2 |
| VFMSUBADD132PD | Fused multiply of packed doubles, first times third, plus the second in even elements and minus it in odd ones, into the first. | 4 |
| VFMSUBADD132PS | Fused multiply of packed singles, first times third, plus the second in even elements and minus it in odd ones, into the first. | 4 |
| VFMSUBADD213PD | Fused multiply of packed doubles, second times first, plus the third in even elements and minus it in odd ones, into the first. | 4 |
| VFMSUBADD213PS | Fused multiply of packed singles, second times first, plus the third in even elements and minus it in odd ones, into the first. | 4 |
| VFMSUBADD231PD | Fused multiply of packed doubles, second times third, plus the first in even elements and minus it in odd ones, into the first. | 4 |
| VFMSUBADD231PS | Fused multiply of packed singles, second times third, plus the first in even elements and minus it in odd ones, into the first. | 4 |
| VFNMADD132PD | Fused negated multiply-add of packed doubles: minus first operand times third, plus second, into the first. | 4 |
| VFNMADD132PS | Fused negated multiply-add of packed singles: minus first operand times third, plus second, into the first. | 4 |
| VFNMADD132SD | Fused negated multiply-add of the low doubles: minus first times third, plus second, into the first; the rest is unchanged. | 2 |
| VFNMADD132SS | Fused negated multiply-add of the low singles: minus first times third, plus second, into the first; the rest is unchanged. | 2 |
| VFNMADD213PD | Fused negated multiply-add of packed doubles: minus second operand times first, plus third, into the first. | 4 |
| VFNMADD213PS | Fused negated multiply-add of packed singles: minus second operand times first, plus third, into the first. | 4 |
| VFNMADD213SD | Fused negated multiply-add of the low doubles: minus second times first, plus third, into the first; the rest is unchanged. | 2 |
| VFNMADD213SS | Fused negated multiply-add of the low singles: minus second times first, plus third, into the first; the rest is unchanged. | 2 |
| VFNMADD231PD | Fused negated multiply-add of packed doubles: minus second operand times third, plus first, into the first. | 4 |
| VFNMADD231PS | Fused negated multiply-add of packed singles: minus second operand times third, plus first, into the first. | 4 |
| VFNMADD231SD | Fused negated multiply-add of the low doubles: minus second times third, plus first, into the first; the rest is unchanged. | 2 |
| VFNMADD231SS | Fused negated multiply-add of the low singles: minus second times third, plus first, into the first; the rest is unchanged. | 2 |
| VFNMSUB132PD | Fused negated multiply-subtract of packed doubles: minus first operand times third, minus second, into the first. | 4 |
| VFNMSUB132PS | Fused negated multiply-subtract of packed singles: minus first operand times third, minus second, into the first. | 4 |
| VFNMSUB132SD | Fused negated multiply-subtract of the low doubles: minus first times third, minus second, into the first; the rest is unchanged. | 2 |
| VFNMSUB132SS | Fused negated multiply-subtract of the low singles: minus first times third, minus second, into the first; the rest is unchanged. | 2 |
| VFNMSUB213PD | Fused negated multiply-subtract of packed doubles: minus second operand times first, minus third, into the first. | 4 |
| VFNMSUB213PS | Fused negated multiply-subtract of packed singles: minus second operand times first, minus third, into the first. | 4 |
| VFNMSUB213SD | Fused negated multiply-subtract of the low doubles: minus second times first, minus third, into the first; the rest is unchanged. | 2 |
| VFNMSUB213SS | Fused negated multiply-subtract of the low singles: minus second times first, minus third, into the first; the rest is unchanged. | 2 |
| VFNMSUB231PD | Fused negated multiply-subtract of packed doubles: minus second operand times third, minus first, into the first. | 4 |
| VFNMSUB231PS | Fused negated multiply-subtract of packed singles: minus second operand times third, minus first, into the first. | 4 |
| VFNMSUB231SD | Fused negated multiply-subtract of the low doubles: minus second times third, minus first, into the first; the rest is unchanged. | 2 |
| VFNMSUB231SS | Fused 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.
| ISA set | CPUID | Processors |
|---|---|---|
FMA | FMA + AVX | 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 |
Sources
- Intel XED v2026.08.23 (commit
0bcb6237345c): forms, encodings, ISA sets, CPUID bits and chip model. - The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s
-marchfeature sets and AMD’s Processor Programming References, which the page of each processor cites. - 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.