beautypg.com

Motorola DSP96002 User Manual

Page 703

background image

B-184

DSP96002 USER’S MANUAL

MOTOROLA

;

; Input: r0 contains the lowest address of the 4-word internal

; extended precision number

;

; Output: r0 contains the lowest address of a 4-word internal

; extended precision number

;

; Alters: D0.l

;

dp_abs clr d0.l

move d0.l,x:(r0+sign) ;clear the sign word

rts

page

;

; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
; DP_ADD - Add two double precision numbers.

;

; Entry point: dp_add: c(r0)

c(r0) + c(r1)

;

; Input: r0 contains the lowest address of a 4-word internal

; extended precision number

;

; Output: r0 contains the lowest address of a 4-word internal

; extended precision number

;

; Alters: D0.L,D1.L,D2.L,D3.L,D4.L,D5.L,D6.L,D7.L,D0.H,D1.H

;

dp_add move x:(r0+ms),d0.l ;get c(r0)_ms

move x:(r0+ls),d1.l ;get c(r0)_ls

move x:(r1+ms),d2.l ;get c(r1)_ms

move x:(r1+ls),d3.l ;get c(r1)_ls

move x:(r0),d4.l ;get c(r0) exponent

move x:(r1),d5.l ;get c(r1) exponent

move d4.l,d6.l ;copy of c(r0) exponent

cmp d5,d4 #63,d7.l ;compare exponents

jeq addmant ;exponents are equal

jpl abig ;c(r0) exponent is greater

;

; X has a larger exponent than c(r0)

;

xbig sub d4,d5 d5.l,d4.l ;c(r1) exponent is greater

cmp d5,d7 #31,d7.l ;is |r0(exp)-r1(exp)| > 63?

jmi aequalx ;yes, then c(r0) + c(r1) = c(r1)

cmp d5,d7 #32,d7.l ;is |r0(exp)-r1(exp)| > 31?

jge dshifta ;no, shift both c(r0) words

sub d7,d5 d0.l,d1.l ;yes, shift ms to ls

clr d0.l d5.l,d0.h ;# of shifts to be performed

lsr d0.h,d1 ;align the c(r0) mantissa

jmp addmant ;add the mantissas

;

; A has a larger exponent than X

;