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.