Extensions
Forms
36 (10 Legacy, 26 EVEX)
Data
Intel XED v2026.08.23

IMUL is the signed multiplication, in three shapes:

  • One operand, imul rsi: rAX times the operand, with the whole product, twice as wide, in rDX:rAX (in AX for bytes). It is the only form that yields the upper half.
  • Two operands, imul rax, rsi: the destination times the source, cut to the destination’s width.
  • Three operands, imul rax, rdi, 100: a register or memory operand times an 8- or 32-bit immediate, sign-extended, into another register.

Only the one-operand shape exists for bytes.

Signed and unsigned

The lower half of a product is the same whether the inputs count as signed or unsigned, so the cut-down forms serve both: GCC 14 and Clang 23 at -O2 compile a * b on unsigned long to imul rax, rsi. Only the upper half differs. For it, signed code uses the one-operand IMUL and unsigned code MUL, which has no other shape, or MULX from BMI2, which takes its registers freely and leaves the flags alone. Both compilers turn (unsigned __int128)a * b into MUL, and Clang into MULX when allowed BMI2; the signed version becomes a one-operand IMUL.

Overflow

CF and OF are set together when the signed product does not fit in the destination; for the one-operand form, when the upper half is anything but the sign extension of the lower. __builtin_mul_overflow on two longs is therefore IMUL followed by seto. For unsigned operands those flags answer the wrong question, and both compilers use MUL instead, whose flags tell whether the upper half is nonzero.

Constants

A multiplication by a constant may become an IMUL with an immediate or a few LEA, shift and add instructions: for x * 100, Clang emits imul rax, rdi, 100 and GCC two LEAs and a SAL. Division by a constant turns into a multiplication as well, keeping the high bits of the product (see DIV).

APX

APX adds a form with a new destination register and two sources, forms that leave the flags unchanged (NF), and, for the immediate forms, ZU: with EVEX.ND set, a 16-bit result clears bits 63:16 of its register instead of keeping them.

In the optimization guide

What the optimization guide says about IMUL, a line per claim. Each links to the claim in the guide, with its sources and where they differ.

Bulldozer to Excavator

  • Integer execution: EX1’s pipelined multiplier takes 4 cycles for operands of up to 32 bits, starting one every 2 cycles, and 6 for 64-bit operands, starting one every 4; LLVM’s model agrees.

Golden Cove and Raptor Cove

  • Integer execution: A MUL of 64 by 64 bits into RDX:RAX is two micro-ops: the low half on port 1 and the high half on port 5, four cycles in LLVM’s models against three for an IMUL that keeps only the low half.

Jaguar and Puma

  • Integer execution: The pipelined multiplier takes 3 cycles for operands of up to 32 bits, one a cycle, and 6 for 64-bit ones, one every 4; a form that writes two registers, such as MUL, adds a cycle to both. sources differ

Sandy Bridge and Ivy Bridge

  • Integer and vector execution: Separate multipliers serve general-purpose and vector registers: a general-purpose multiply runs on port 1 at a latency of 3 cycles, a vector one on port 0 at 5 cycles for any precision, and both run one operation a cycle.

Silvermont to Goldmont Plus

Skylake to Cooper Lake

  • Integer execution: A MUL of 64 by 64 bits into RDX:RAX is two micro-ops on ports 1 and 5 and takes four cycles in LLVM’s models, against three for an IMUL that keeps only the low half.

Tremont

  • Integer execution: Three ALU ports run simple integer operations, three a cycle; shifts go to port 00 only, and multiplication, division, popcnt, crc32 and the bit operations to port 01 only.

Zen and Zen+

  • Integer execution: One ALU multiplies, up to 64 by 64 bits in three cycles, pipelined; a multiplication with two destination registers delivers the second a cycle later and starts only every other cycle. sources differ

Zen 2

  • Integer execution: One ALU multiplies, 64 by 64 bits in three cycles and pipelined; a multiplication that writes two registers delivers the second a cycle later and starts only every other cycle.

Zen 3

  • Integer execution: Only ALU 1 multiplies, 64 by 64 bits in three cycles and pipelined; a multiplication that writes two registers delivers the second one a cycle later.

Zen 4

  • Integer execution: Only one ALU multiplies, 64 by 64 bits in three cycles and pipelined; a multiplication that writes two registers delivers the second one a cycle later.

Zen 5

  • Integer execution: Three ALUs multiply, 64 by 64 bits in three cycles; a multiplication that writes two registers delivers the second one a cycle later.

Forms

Every encoding of IMUL that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
IMUL m8 IMUL_MEMbF6 /5Base instruction set
IMUL r8 IMUL_GPR8F6 /5Base instruction set
IMUL m16/32/64 IMUL_MEMvF7 /5Base instruction set
IMUL r16/32/64 IMUL_GPRvF7 /5Base instruction set
IMUL r16/32/64, m16/32/64, imm16/32 IMUL_GPRv_MEMv_IMMz69 /r iw/idBase instruction set
IMUL r16/32/64, r16/32/64, imm16/32 IMUL_GPRv_GPRv_IMMz69 /r iw/idBase instruction set
IMUL r16/32/64, m16/32/64, imm8 IMUL_GPRv_MEMv_IMMb6B /r ibBase instruction set
IMUL r16/32/64, r16/32/64, imm8 IMUL_GPRv_GPRv_IMMb6B /r ibBase instruction set
IMUL r16/32/64, m16/32/64 IMUL_GPRv_MEMv0F AF /rBase instruction set
IMUL r16/32/64, r16/32/64 IMUL_GPRv_GPRv0F AF /rBase instruction set
IMUL r16/32/64, r16/32/64, imm16/32 IMUL_GPRv_GPRv_IMMz_APXEVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/idAPX_F
IMUL r16/32/64, m16/32/64, imm16/32 IMUL_GPRv_MEMv_IMMz_APXEVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/idAPX_F
IMUL r16/32/64, r16/32/64, imm16/32 ZU NF optional IMUL_GPRv_GPRv_IMMz_APX_N3_ZUEVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/id ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, m16/32/64, imm16/32 ZU NF optional IMUL_GPRv_MEMv_IMMz_APX_N3_ZUEVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/id ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64, imm16/32 NF IMUL_GPRv_GPRv_IMMz_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/id NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, m16/32/64, imm16/32 NF IMUL_GPRv_MEMv_IMMz_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE 69 /r iw/id NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64 IMUL_GPRv_APXEVEX.LLZ.NP.MAP4.SCALABLE F7 /5APX_F
IMUL m16/32/64 IMUL_MEMv_APXEVEX.LLZ.NP.MAP4.SCALABLE F7 /5APX_F
IMUL r16/32/64 NF IMUL_GPRv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE F7 /5 NF=1APX_F + APX_NCI_NDD_NF
IMUL m16/32/64 NF IMUL_MEMv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE F7 /5 NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64, imm8 IMUL_GPRv_GPRv_IMM8_APXEVEX.LLZ.NP.MAP4.SCALABLE 6B /r ibAPX_F
IMUL r16/32/64, m16/32/64, imm8 IMUL_GPRv_MEMv_IMM8_APXEVEX.LLZ.NP.MAP4.SCALABLE 6B /r ibAPX_F
IMUL r16/32/64, r16/32/64, imm8 ZU NF optional IMUL_GPRv_GPRv_IMM8_APX_N3_ZUEVEX.LLZ.NP.MAP4.SCALABLE 6B /r ib ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, m16/32/64, imm8 ZU NF optional IMUL_GPRv_MEMv_IMM8_APX_N3_ZUEVEX.LLZ.NP.MAP4.SCALABLE 6B /r ib ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64, imm8 NF IMUL_GPRv_GPRv_IMM8_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE 6B /r ib NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, m16/32/64, imm8 NF IMUL_GPRv_MEMv_IMM8_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE 6B /r ib NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64 IMUL_GPRv_GPRv_APXEVEX.LLZ.NP.MAP4.SCALABLE AF /rAPX_F
IMUL r16/32/64, m16/32/64 IMUL_GPRv_MEMv_APXEVEX.LLZ.NP.MAP4.SCALABLE AF /rAPX_F
IMUL r16/32/64, r16/32/64 NF IMUL_GPRv_GPRv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE AF /r NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, m16/32/64 NF IMUL_GPRv_MEMv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE AF /r NF=1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64, r16/32/64 NDD NF optional IMUL_GPRv_GPRv_GPRv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE AF /r ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r16/32/64, r16/32/64, m16/32/64 NDD NF optional IMUL_GPRv_GPRv_MEMv_APX_N3EVEX.LLZ.NP.MAP4.SCALABLE AF /r ND=1 NF=0/1APX_F + APX_NCI_NDD_NF
IMUL r8 IMUL_GPR8i8_APXEVEX.LLZ.NP.MAP4.WIG F6 /5APX_F
IMUL m8 IMUL_MEMi8_APXEVEX.LLZ.NP.MAP4.WIG F6 /5APX_F
IMUL r8 NF IMUL_GPR8i8_APX_N3EVEX.LLZ.NP.MAP4.WIG F6 /5 NF=1APX_F + APX_NCI_NDD_NF
IMUL m8 NF IMUL_MEMi8_APX_N3EVEX.LLZ.NP.MAP4.WIG F6 /5 NF=1APX_F + APX_NCI_NDD_NF

Latency and throughput

What the scheduling models of LLVM 23.1.2 give for each form, not measurements: latency / reciprocal throughput in cycles, the ports under them. A row is a model, or models that agree; a dash, a form that its processors lack. Memory forms: latency from the address, ports without the load and store units. Which processors each model covers.
Modelm8r8m16m32m64r16r32r64r16, m16, imm16
r16, m16, imm8
r32, m32, imm32
r32, m32, imm8
r64, m64, imm32
r64, m64, imm8
r16, r16, imm16
r16, r16, imm8
r32, r32, imm32
r32, r32, imm8
r64, r64, imm32
r64, r64, imm8
r16, m16r32, m32r64, m64r16, r16r32, r32r64, r64
Sandy Bridge8 / 1p13 / 1p19 / 1.33p0159 / 1p0159 / 1p014 / 1.33p0154 / 1p0154 / 1p018 / 1p0158 / 1p18 / 1p14 / 1p0153 / 1p13 / 1p18 / 1p18 / 1p18 / 1p13 / 1p13 / 1p13 / 1p1
Haswell8 / 1p13 / 1p19 / 1p01569 / 1p01569 / 1p164 / 1p01564 / 1p01564 / 1p168 / 1p01568 / 1p18 / 1p14 / 1p01563 / 1p13 / 1p18 / 1p18 / 1p18 / 1p13 / 1p13 / 1p13 / 1p1
Broadwell, Skylake8 / 1p13 / 1p19 / 1p01569 / 1p01569 / 1p154 / 1p01564 / 1p01564 / 1p158 / 1p01568 / 1p18 / 1p14 / 1p01563 / 1p13 / 1p18 / 1p18 / 1p18 / 1p13 / 1p13 / 1p13 / 1p1
Skylake-SP, Ice Lake8 / 1p13 / 1p19 / 1p01569 / 1p01569 / 1p154 / 1p01564 / 1p01564 / 1p158 / 1p01568 / 1p18 / 1p14 / 1p01563 / 1p13 / 1p18 / 1p01568 / 1p18 / 1p13 / 1p13 / 1p13 / 1p1
Alder Lake, Sapphire Rapids8 / 1p13 / 1p110 / 1p0 p1 p5 p6 p119 / 1p0 p1 p5 p6 p119 / 1p155 / 1p0 p1 p5 p6 p114 / 1p0 p1 p5 p6 p114 / 1p159 / 1p0 p1 p5 p6 p118 / 1p18 / 1p14 / 1p0 p1 p5 p6 p113 / 1p13 / 1p18 / 1p18 / 1p18 / 1p13 / 1p13 / 1p13 / 1p1
Lunar Lake7 / 0.33p1353 / 0.33p1359 / 0.67p0123458 / 0.33p0123458 / 0.33p0123455 / 0.67p0123454 / 0.33p0123454 / 0.33p0123458 / 0.33p0123456 / 0.33p0123456 / 0.33p0123454 / 0.33p0123452 / 0.33p0123452 / 0.33p0123457 / 0.33p1357 / 0.33p1357 / 0.33p1353 / 0.33p1353 / 0.33p1353 / 0.33p135
Bonnell7 / 7p17 / 7p018 / 8p17 / 7p112 / 12p17 / 7p016 / 6p0112 / 12p017 / 7p15 / 5p014 / 14p16 / 6p015 / 5p014 / 14p017 / 7p15 / 5p012 / 12p16 / 6p015 / 5p012 / 12p01
Silvermont8 / 5IEC1 MEC5 / 5IEC18 / 5IEC1 MEC8 / 5IEC1 MEC10 / 7IEC1 MEC5 / 5IEC15 / 5IEC17 / 7IEC17 / 4IEC1 MEC6 / 1IEC1 MEC8 / 2IEC1 MEC4 / 4IEC13 / 1IEC15 / 2IEC17 / 4IEC1 MEC6 / 1IEC1 MEC8 / 2IEC1 MEC4 / 4IEC13 / 1IEC15 / 2IEC1
Piledriver8 / 4EX1 Mul4 / 4EX1 Mul8 / 5EX1 Mul8 / 4EX1 Mul10 / 6EX1 Mul4 / 5EX1 Mul4 / 4EX1 Mul6 / 6EX1 Mul9 / 5EX1 Mul8 / 2EX1 Mul10 / 4EX1 Mul5 / 5EX1 Mul4 / 2EX1 Mul6 / 4EX1 Mul8 / 2EX1 Mul8 / 2EX1 Mul10 / 4EX1 Mul4 / 2EX1 Mul4 / 2EX1 Mul6 / 4EX1 Mul
Zen8 / 1ALU1 Mul4 / 1ALU1 Mul8 / 1ALU1 Mul8 / 1ALU1 Mul9 / 1ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul3 / 11ALU1 Mul3 / 11ALU1 Mul4 / 11ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul3 / 11ALU1 Mul3 / 11ALU1 Mul4 / 11ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul
Zen 28 / 1ALU1 Mul4 / 1ALU1 Mul7 / 1ALU1 Mul7 / 1ALU1 Mul8 / 1ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul7 / 1ALU1 Mul7 / 1ALU1 Mul8 / 1ALU1 Mul4 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul7 / 1ALU1 Mul7 / 1ALU1 Mul8 / 1ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul4 / 1ALU1 Mul
Zen 3, Zen 47 / 3ALU13 / 3ALU17 / 3ALU17 / 3ALU17 / 3ALU13 / 3ALU13 / 3ALU13 / 3ALU18 / 4ALU17 / 1ALU17 / 1ALU14 / 4ALU13 / 1ALU13 / 1ALU17 / 1ALU17 / 1ALU17 / 1ALU13 / 1ALU13 / 1ALU13 / 1ALU1
Jaguar6 / 1ALU1 Mul3 / 1ALU1 Mul6 / 3ALU1 Mul6 / 2ALU1 Mul9 / 4ALU1 Mul3 / 3ALU1 Mul3 / 2ALU1 Mul6 / 4ALU1 Mul7 / 2ALU1 Mul6 / 1ALU1 Mul9 / 4ALU1 Mul4 / 2ALU1 Mul3 / 1ALU1 Mul6 / 4ALU1 Mul6 / 1ALU1 Mul6 / 1ALU1 Mul9 / 4ALU1 Mul3 / 1ALU1 Mul3 / 1ALU1 Mul6 / 4ALU1 Mul
  1. Zen model: the marked memory forms get the register form's latency, without the load, which the model's source calls definitely wrong (X86ScheduleZnver1.td, line 646).

Operation

What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.

IMUL r/m8 IMUL r/m16/32/64
p = signed(rAX) * signed(src)    # AL, AX, EAX or RAX times the source,
                                 # signed: a product of 2 * OSIZE bits
if OSIZE == 8:
    ax = p                       # AH:AL
else:                            # EDX and EAX: bits 63:32 cleared
    rDX = p >> OSIZE             # the high half
    rAX = p                      # the low half
if not nf:                       # NF=1 (APX) leaves the flags as they were
    big = 1 << (OSIZE - 1)
    cf = of = not -big <= p < big    # the product does not fit in rAX
    sf = zf = af = pf = UNDEFINED

Run on AMD Zen 5 (EPYC 9645): 120 cases. The APX forms were not run: none of these processors has APX.

IMUL r16/32/64, r/m16/32/64
p = signed(dest) * signed(src)
if not nf:                       # NF=1 (APX) leaves the flags as they were
    big = 1 << (OSIZE - 1)
    cf = of = not -big <= p < big    # the product does not fit in dest
    sf = zf = af = pf = UNDEFINED
dest.write(p)                    # its low OSIZE bits: the rest is lost

Run on AMD Zen 5 (EPYC 9645): 90 cases. The APX forms were not run: none of these processors has APX.

IMUL r16/32/64, r/m16/32/64, imm16/32 IMUL r16/32/64, r/m16/32/64, imm8
p = signed(src) * signed(imm)    # imm8, imm16 or imm32 as encoded, signed
if not nf:                       # NF=1 (APX) leaves the flags as they were
    big = 1 << (OSIZE - 1)
    cf = of = not -big <= p < big    # the product does not fit in dest
    sf = zf = af = pf = UNDEFINED
dest.write(p)                    # its low OSIZE bits: the rest is lost;
                                 # a ZU form (APX) clears bits 63:OSIZE,
                                 # even for 16 bits

Run on AMD Zen 5 (EPYC 9645): 99 cases. The APX forms were not run: none of these processors has APX.

NDD forms
p = signed(src1) * signed(src2)
if not nf:                       # NF=1 leaves the flags as they were
    big = 1 << (OSIZE - 1)
    cf = of = not -big <= p < big    # the product does not fit in dest
    sf = zf = af = pf = UNDEFINED
dest.write(p)                    # its low OSIZE bits in the new
                                 # destination: bits 63:OSIZE cleared,
                                 # even for 16 bits

Not run on a processor: none of these processors has APX.

Operands

What each form reads and writes, as Intel XED records it: the operands of its syntax, in order, and the implicit ones that the syntax does not name. How to read.
OperandKindAction
IMUL r/m8
r/m8explicitread
ALimplicitread
AXimplicitwrite
RFLAGSimplicitwrite
IMUL r/m16/32/64
r/m16/32/64explicitread
rAXimplicitread, write
rDXimplicitwrite
RFLAGSimplicitwrite
IMUL r16/32/64, r/m16/32/64, imm16/32 IMUL r16/32/64, r/m16/32/64, imm8
r16/32/64explicitwrite
r/m16/32/64explicitread
imm8/16/32explicitread
RFLAGSimplicitwrite
IMUL r16/32/64, r/m16/32/64
r16/32/64explicitread, write
r/m16/32/64explicitread
RFLAGSimplicitwrite
IMUL r16/32/64, r/m16/32/64, imm16/32 ZU NF optional IMUL r16/32/64, r/m16/32/64, imm8 ZU NF optional
r16/32/64explicitwrite
r/m16/32/64explicitread
imm8/16/32explicitread
RFLAGSimplicitwrite (NF=0)
IMUL r16/32/64, r/m16/32/64, imm16/32 NF IMUL r16/32/64, r/m16/32/64, imm8 NF
r16/32/64explicitwrite
r/m16/32/64explicitread
imm8/16/32explicitread
IMUL r/m16/32/64 NF
r/m16/32/64explicitread
rAXimplicitread, write
rDXimplicitwrite
IMUL r16/32/64, r/m16/32/64 NF
r16/32/64explicitread, write
r/m16/32/64explicitread
IMUL r16/32/64, r16/32/64, r/m16/32/64 NDD NF optional
r16/32/64explicitwrite
r16/32/64explicitread
r/m16/32/64explicitread
RFLAGSimplicitwrite (NF=0)
IMUL r/m8 NF
r/m8explicitread
ALimplicitread
AXimplicitwrite

Flags

M modified, U undefined; blank: not affected. With NF=1, the forms with optional NF leave the flags unchanged. How to read.
WhenOFSFZFAFPFCF
Forms with optional NF
NF=0MUUUUM
NF forms
Not affected
Other forms
MUUUUM

Exceptions

The exception class is XED's name for the set of exception conditions that a form follows. How to read.

Legacy forms
none in XED
EVEX forms
APX-EVEX-INT

CPUID and processors

Each form belongs to an XED ISA set. A form can be used when the processor reports every CPUID bit of one of its ISA set's alternatives.

CPUID requirements and processors of the XED ISA sets above. 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.
ISA setCPUIDProcessors
I86

No CPUID bit: part of the base instruction set.

Every x86-64 processor in XED’s model and Zen 3 to Zen 6
I186

No CPUID bit: part of the base instruction set.

Every x86-64 processor in XED’s model and Zen 3 to Zen 6
APX_F

APX_F
CPUID.(EAX=07H,ECX=1):EDX[21] APX_F

Nova Lake, Diamond Rapids
APX_F_N3

APX_F + APX_NCI_NDD_NF
CPUID.(EAX=07H,ECX=1):EDX[21] APX_F
CPUID.(EAX=29H,ECX=0):EBX[0] APX_NCI_NDD_NF

Same as APX_F

More General-purpose instructions

All 109 General-purpose instructions

More APX instructions

All 88 APX instructions

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, 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. LLVM 23.1.2's x86 scheduling models (commit 85ac56026243): the latency, reciprocal throughput and ports of each form, as llvm-mca reports them.
  4. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2A, page 3-451 (IMUL)
  5. Intel Advanced Performance Extensions (Intel APX) Architecture Specification, revision 9.0 (355828-009, August 2026)
  6. AMD64 Architecture Programmer's Manual, Volume 3: General-Purpose and System Instructions (24594, rev. 3.39, October 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 timings come from LLVM's scheduling models, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.