MicroBlaze Processor Reference Guide
191
UG081 (v14.7)
Instructions
frsub
Reverse Floating Point Arithmetic Subtraction
Description
The floating point value in rA is subtracted from the floating point value in rB and the result is
placed into register rD.
Pseudocode
if isDnz(rA) or isDnz(rB) then
(rD)
←
0xFFC00000
FSR[DO]
←
1
ESR[EC]
←
00110
else if (isSigNaN(rA) or isSigNaN(rB) or
(isPosInfinite(rA) and isPosInfinite(rB)) or
(isNegInfinite(rA) and isNegInfinite(rB))) then
(rD)
←
0xFFC00000
FSR[IO]
←
1
ESR[EC]
←
00110
else if isQuietNaN(rA) or isQuietNaN(rB) then
(rD)
←
0xFFC00000
else if isDnz((rB)-(rA)) then
(rD)
←
signZero((rB)-(rA))
FSR[UF]
←
1
ESR[EC]
←
00110
else if isNaN((rB)-(rA)) then
(rD)
←
signInfinite((rB)-(rA))
FSR[OF]
←
1
ESR[EC]
←
00110
else
(rD)
←
(rB) - (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,UF,OF,DO]
Latency
•
4 cycles with
C_AREA_OPTIMIZED=0
•
6 cycles with
C_AREA_OPTIMIZED=1
Note
This instruction is only available when the MicroBlaze parameter
C_USE_FPU
is greater than 0.
frsub
rD, rA, rB
Reverse subtract
0 1 0 1 1 0
rD
rA
rB
0 0 0 1 0 0 0 0 0 0 0
0
6
11
16
21
31