Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A, Instruction Set Reference, A-M
3-350 Vol. 2
INSTRUCTION SET REFERENCE, A-M
The sign of the result is always the exclusive-OR of the source signs, even if one or
more of the values being multiplied is 0 or ∞. When the source operand is an integer
0, it is treated as a +0.
The following table shows the results obtained when multiplying various classes of
numbers, assuming that neither overflow nor underflow occurs.
This instruction’s operation is the same in non-64-bit modes and 64-bit mode.
Operation
IF Instruction = FIMUL
THEN
DEST ← DEST ∗ ConvertToDoubleExtendedPrecisionFP(SRC);
ELSE (* Source operand is floating-point value *)
DEST ← DEST ∗ SRC;
FI;
IF Instruction
= FMULP
THEN
PopRegisterStack;
FI;
Table 3-34. FMUL/FMULP/FIMUL Results
DEST
−∞
−F −0 +0 +F +∞ NaN
−∞
+∞ +∞ **
−∞ −∞
NaN
−F +∞ +F +0 −0 −F
−∞
NaN
−I +∞ +F +0 −0 −F
−∞
NaN
SRC −0* +0 +0 −0 −0*NaN
+0* −0 −0 +0 +0*NaN
+I
−∞
−F −0 +0 +F +∞ NaN
+F
−∞
−F −0 +0 +F +∞ NaN
+∞
−∞ −∞
**+∞ +∞ NaN
NaN NaN NaN NaN NaN NaN NaN NaN
NOTES:
F Means finite floating-point value.
IMeans Integer.
* Indicates invalid-arithmetic-operand (#IA) exception.