beautypg.com

Motorola DSP96002 User Manual

Page 708

background image

MOTOROLA

DSP96002 USER’S MANUAL

B-189

move d0.l,x:(r0+sign) ;apply to destination

rts

page

;

; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
; DP_DIV - Divide two double precision numbers.

;

; Entry point: dp_div: c(r0)

c(r0)/c(r1)

;

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

; extended precision number

; r1 contains the lowest address of a 4-word internal

; extended precision number

;

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

; extended precision number

;

; NOTE: Error checking:

; 0/0 returns 0

; finite/0 returns saturated value

;

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

;

dp_div move x:(r1),d0.l ;get divisor exponent

tst d0 x:(r1),d1.l ;test, get ms

jne _notdiv0 ;non-zero

tst d1 ;test

jne _notdiv0

move x:(r0+sign),d0.l ;get sign

move x:(r1+sign),d1.l ;get sign

eor d0,d1 x:(r0),d0.l ;new sign, get dividend exp

move d1.l,x:(r0+sign) ;save new sign

tst d0 x:(r0+ms),d1.l ;test, get ms

jne oflow ;finite/0 => overflow

tst d1 ;test

jne oflow ;finite/0 => overflow

jmp uflow ;0/0 => zero

_notdiv0 move x:(r0),d1.l ;get exponent a

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

sub d0,d1 #bias,d0.l ;new exponent, get bias

add d0,d1 ;Add bias back

move x:(r0+ms),d7.l ;a ms

move x:(r0+ls),d6.l ;a ls

move x:(r1+ms),d5.l ;x ms

move x:(r1+ls),d4.l ;x ls

cmp d5,d7 ;compare magnitudes

jhi _startdiv ;dividend>divisor

jlo _adj ;adjust if <

cmp d4,d6 ;extend comparison

jhs _startdiv ;dividend >= divisor

_adj lsr d5 ;scale down divisor

ror d4