Motorola DSP96002 User Manual
Page 703
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
;