Motorola DSP96002 User Manual
Page 674
MOTOROLA
DSP96002 USER’S MANUAL
B-155
_inan ori #$10,ier ; set invalid operation bit
_qnan move #qnane,d1.h ; get QNaN exponent
move #qnanmh,d1.m ; get QNaN mantissa high
move #qnanml,d1.l ; get QNaN mantissa low
ori #$20,ccr ; set Not-a-Number bit
jmp _done ; result is a NaN
;
; Check if Addend 0 is a Denormalized Number
;
_mant3 tst d2 ; check mant0.high = zero
jne _den0 ; jump if a0 is a denorm
tst d0 ; check mant0.low = zero
jne _den0 ; jump if a0 is a denorm
cmp d7,d5 ; check min exp for a1
jgt _done ; a1 is the answer
;
; Check if Addend 1 is a Denormalized Number
;
_mant4 tst d3 ; check mant1.high = zero
jne _den1 ; jump if a1 is a denorm
tst d1 ; check mant1.low = zero
jne _den1 ; jump if a1 is a denorm
jclr #0,d6.l,_bzero ; jump if both are zero
jmp _tfr ; move result to d1
;
; Addend 0 is a Denormalized Number
;
_den0 bset #0,d0.h ; get denorm exponent
inc d4 ; "
tst d5 ; check if a1 is a denorm
jgt _ftz ; jump if a1 is a normal number
tst d3 ; check mant1.high = zero
jne _bden ; jump if a1 is a denorm
tst d1 ; check mant1.low = zero
jne _bden ; jump if a1 is a denorm
jmp _tfr ; move result to d1
_bden bset #0,d1.h ; get denorm exponent
inc d5 ; "
_ftz jclr #27,sr,_nadd ; jump to add for ieee mode
jmp _done ; a0 is flushed-to-zero
;
; Addend 1 is a Denormalized Number
;
_den1 jclr #0,d6.l,_done ; a1 is the answer
bset #0,d1.h ; get denorm exponent
inc d5 ; "
jclr #27,sr,_nadd ; jump to add for ieee mode
_tfr move #eden,d7.l ; get denorm exponent
move d0.h,d5.l ; get expr
move #emsk,d4.l ; get exponent mask
and d4,d5 ; delete tags and sign
cmp d7,d5 d0.h,d5.l ; compare exps, get expr
jne _tmov ; jump if not a denorm
move d0.m,d3.l ; get mantr.high