Motorola DSP96002 User Manual

Page 674

Advertising
background image

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

Advertising