Figure 1. fint
Description
Converts the floating-point number in register rA to a signed integer and puts the result in register rD. This is a 32-bit truncating signed conversion that will produce a 32-bit integer result.
Pseudocode
if isDnz(rA) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else if isNaN(rA) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isInf(rA) or (rA) < -231 or (rA) > 231 - 1 then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else
(rD) ← int ((rA))
Registers Altered
- rD, unless an FP exception is generated, in which case the register is unchanged
- ESR[EC], if an FP exception is generated
- FSR[IO,DO]
Latency
- 4 cycles with
C_AREA_OPTIMIZED
=0 - 6 cycles with
C_AREA_OPTIMIZED
=1 - 1 cycle with
C_AREA_OPTIMIZED
=2
Note
This instruction is only available when the MicroBlaze parameter
C_USE_FPU
is set to 2 (Extended).