Motorola DSP96002 User Manual page 677

32-bit digital signal processor
Table of Contents

Advertisement

add
jcc
inc
jmp
;
; *** Case: Addend 0 is Positive,
;
Addend 1 is Negative ***
;
_neg2
bclr
sub
subc
jcc
bset
move
not
not
add
jcc
inc
_cclr3
move
move
;
; Check result equal zero (do not want to normalize)
;
_zchk
move
and
tst
jne
tst
jne
move
;
; Check for Special Case (Round toward -infinity)
;
jclr
jset
bset
jmp
;
; Normalize for Opposite Sign Cases
;
_snrm
jset
move
move
and
move
jclr
move
_st1
or
_st0
cmp
jle
dec
dec
lsl
B-158
d7,d1
;
_zchk
;
d3
;
_zchk
;
#31,d6.l
; set result as positive
d1,d0
; subtract for case: a0+,a1-
d3,d2
;
_cclr3
; jump if result is positive
#31,d6.l
; set result as negative
#inum,d7.l
; get increment number
d0
; get 2's comp of result
d2
;
d7,d0
;
_cclr3
;
d2
;
d0.l,d1.l
; get mantr.low and GRS bits
d2.l,d3.l
; get mantr.high
#smsk,d7.l
; get sticky mask
d7,d1
; remove bits right of sticky
d3
; check mantr.high = zero
_snrm
; normalize result
d1
; check mantr.low = zero
_snrm
; normalize result
#0,d6.l
; set expr = zero
#22,sr,_rnd
; jump if round bit r1 = zero
#21,sr,_rnd
; jump if round bit r0 = one
#31,d6.l
; set result to negative zero
_rnd
; check rounding mode
#31,d3.l,_rnd
; jump if result normalized
#emsk,d7.l
; get exp mask
d6.l,d5.l
; get expr
d7,d5
; delete tags
#eden,d4.l
; get denorm exponent
#8,d1.l,_st0
; jump if sticky bit = 0
#onemsk,d7.l
; get one mask
d7,d1
; set bits right of round bit
d4,d5
; test expr = zero
_rnd
d6
; decrement expr
d5
; decrement expr copy
d1
; shift mantr.l left
DSP96002 USER'S MANUAL
"
"
"
"
"
"
"
"
; jump if denormalized number
MOTOROLA

Advertisement

Table of Contents
loading

Table of Contents