IMUL (R64, R64) - Latency


Operands


Latency operand 1 → 1: 4

Latency operand 1 → 1, with the same register for different operands: 3

Latency operand 1 → 3: 4

Latency operand 1 → 3, with the same register for different operands: 3

Latency operand 2 → 1: 3

Latency operand 2 → 3: 3


Latency operand 1 → 1: 4

Experiment 1 (with R9=0)

Experiment 2 (with R9=1)

Experiment 3 (with R9=2)

Experiment 4 (with R9=0)

Experiment 5 (with R9=1)

Experiment 6 (with R9=2)

Latency operand 1 → 1, with the same register for different operands: 3

Experiment 7 (with the same register for different operands)

Experiment 8 (with the same register for different operands)

Experiment 9 (with clean upper 32 bits, with the same register for different operands)

Experiment 10 (with clean upper 32 bits, with the same register for different operands)


Latency operand 1 → 3: 4

Experiment 1 (with R9=0)

Experiment 2 (with R9=1)

Experiment 3 (with R9=2)

Experiment 4 (with R9=0)

Experiment 5 (with R9=1)

Experiment 6 (with R9=2)

Latency operand 1 → 3, with the same register for different operands: 3

Experiment 7 (with the same register for different operands)

Experiment 8 (with the same register for different operands)

Experiment 9 (with clean upper 32 bits, with the same register for different operands)

Experiment 10 (with clean upper 32 bits, with the same register for different operands)


Latency operand 2 → 1: 3

Experiment 1

Experiment 2

Experiment 3 (with dependency-breaking instructions)

Experiment 4 (with the same register for different operands)

Experiment 5 (with the same register for different operands)


Latency operand 2 → 3: 3

Experiment 1

Experiment 2

Experiment 3 (with the same register for different operands)

Experiment 4 (with the same register for different operands)