Philips Semiconductors
DSPCPU Operations for TM1100
File: ops.fm5, modified 7/23/99
PRELIMINARY INFORMATION
A-41
Floating-point divide
SYNTAX
[ IF r
guard ] fdiv rsrc1 rsrc2
→ rdest
FUNCTION
if r
guard then
r
dest
← (oat)rsrc1 / (oat)rsrc2
ATTRIBUTES
Function unit
ftough
Operation code
108
Number of operands
2
Modier
No
Modier range
—
Latency
17
Recovery
16
Issue slots
2
DESCRIPTION
The fdiv operation computes the quotient r
src1
÷rsrc2 and stores the result into rdest. All values are in IEEE
single-precision oating-point format. Rounding is according to the IEEE rounding mode bits in PCSW. If an argument
is denormalized, zero is substituted for the argument before computing the quotient, and the IFZ ag in the PCSW is
set. If the result is denormalized, the result is set to zero instead, and the OFZ ag in the PCSW is set. If fdiv
causes an IEEE exception, the corresponding exception ags in the PCSW are set. The PCSW exception ags are
sticky: the ags can be set as a side-effect of any oating-point operation but can only be reset by an explicit
writepcsw
operation. The update of the PCSW exception ags occurs at the same time as r
dest is written. If any
other oating-point compute operations update the PCSW at the same time, the net result in each exception ag is the
logical OR of all simultaneous updates ORed with the existing PCSW value for that exception ag.
The fdivflags operation computes the exception ags that would result from an individual fdiv.
The fdiv operation optionally takes a guard, specied in r
guard. If a guard is present, its LSB controls the
modication of the destination register. If the LSB of r
guard is 1, rdest and the exception ags in PCSW are written;
otherwise, r
dest is not changed and the operation does not affect the exception ags in PCSW.
EXAMPLES
Initial Values
Operation
Result
r60 = 0xc0400000 (–3.0),
r30 = 0x3f800000 (1.0)
fdiv r60 r30
→ r90
r90
← 0xc0400000 (–3.0)
r40 = 0x40400000 (3.0),
r60 = 0xc0400000 (–3.0)
fdiv r40 r60
→ r95
r95
← 0xbf800000 (–1.0)
r10 = 0, r40 = 0x40400000 (3.0),
r80 = 0x00800000 (1.17549435e–38)
IF r10 fdiv r40 r80
→ r100 no change, since guard is false
r20 = 1, r40 = 0x40400000 (3.0),
r80 = 0x00800000 (1.17549435e–38)
IF r20 fdiv r40 r80
→ r110 r110 ← 0x7f400000 (2.552117754e38)
r40 = 0x40400000 (3.0),
r81 = 0x00400000 (5.877471754e–39)
fdiv r40 r81
→ r111
r111
← 0x7f800000 (+INF), IFZ, DBZ ags set
r82 = 0x00c00000 (1.763241526e–38),
r83 = 0x80800000 (–1.175494351e–38)
fdiv r82 r83
→ r112
r112
← 0xbfc00000 (-1.5)
r84 = 0x7f800000 (+INF),
r85 = 0xff800000 (–INF)
fdiv r84 r85
→ r113
r113
← 0xffffffff (QNaN), INV ag set
r70 = 0x7f7fffff (3.402823466e+38)
fdiv r70 r70
→ r120
r120
← 0x3f800000 (1.0)
r80 = 0x00800000 (1.763241526e–38)
fdiv r80 r80
→ r125
r125
← 0x3f800000 (1.0)
r75 = 0x40400000 (3.0),
r76 = 0x0 (0.0)
fdiv r75 r76
→ r126
r126
← 0x7f800000 (+INF), DBZ ag set
SEE ALSO
fdiv