D993 - A fused multiply-add rounds once

Status: decided Date: 2026-10-25 known_by: published

Every multiply-add the instruction set defines as fused is translated as one rounding of a * b + c. Every one it defines as unfused rounds the product first. The host evaluator computes both the same way, so a trace stays an exact oracle of either (D991).

Which is which (AMD's published RDNA 2 instruction set, the VOP2, VOP3 and VOP3P opcodes):

The host evaluator. It computes Fma with the host's own fused multiply-add in every run, not only in a trace: the operation is exact on every device, so a run that forms addresses may rely on it.

The test. fused_multiply_add.rs runs each form on the device and on the host, on operands where fused and unfused differ, against values worked out by hand:

Rejected: