Figure 1. dmul
Description
The double precision floating-point value in rAL is multiplied with the double floating-point value in rBL and the result is placed into register rDL.
Pseudocode
if isDnz(rAL) or isDnz(rBL) then
(rDL) ← 0xFFF8000000000000
FSR[DO] ← 1
ESR[EC] ← 00110
else
if isSigNaN(rAL) or isSigNaN(rBL) or (isZero(rAL) and isInfinite(rBL)) or
(isZero(rBL) and isInfinite(rAL)) then
(rDL) ← 0xFFF8000000000000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isQuietNaN(rAL) or isQuietNaN(rBL) then
(rDL) ← 0xFFF8000000000000
else if isDnz((rBL)*(rAL)) then
(rDL) ← signZero((rAL)*(rBL))
FSR[UF] ← 1
ESR[EC] ← 00110
else if isNaN((rBL)*(rAL)) then
(rDL) ← signInfinite((rBL)*(rAL))
FSR[OF] ← 1
ESR[EC] ← 00110
else
(rDL) ← (rBL) * (rAL)
Registers Altered
- rDL, unless an FP exception is generated, in which case the register is unchanged
- ESR[EC], if an FP exception is generated
- FSR[IO,UF,OF,DO]
Latency
- 4 cycles with
C_AREA_OPTIMIZED
=0 - 6 cycles with
C_AREA_OPTIMIZED
=1 - 1 cycle with
C_AREA_OPTIMIZED
=2
Notes
- This instruction is only available when the MicroBlaze parameter
C_USE_FPU
is greater than 0.