Motorola DSP96002 User Manual
Page 712
MOTOROLA
DSP96002 USER’S MANUAL
B-193
eor d7,d1 d6.l,x:(r0) ;new sign, save exp
move d1.l,x:(r0+sign) ;save sign
jmp echeck ;go check for errors
page
;
; Check for overflow and underflow and saturate or flush to zero
;
echeck move x:(r0),d0.l ;get exponent
jset #31,d0.l,uflow ;bit 31 indicates underflow
jset #30,d0.l,oflow ;bit 30 indicates overflow
rts ;no errors
oflow move #$3fffffff,d0.l ;max exponent
move d0.l,x:(r0)
move #$ffffffff,d0.l ;max significand
move d0.l,x:(r0+ms)
move d0.l,x:(r0+ls)
rts
uflow clr d0 ;min exponent and significand
move d0.l,x:(r0)
move d0.l,x:(r0+sign)
move d0.l,x:(r0+ms)
move d0.l,x:(r0+ls)
rts
page
;
; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
; DP_NEG - Negate the double precision number pointed to by r0.
;
; Entry point: dp_neg: c(r0) = -c(r0)
;
; Inputs: r0 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
;
; Alters: D0.L,D1.L
;
dp_neg move x:(r0+ms),d0.l ;get mantissa ms
move x:(r0+ls),d1.l ;get mantissa ls
or d1,d0 ;check to see if zero
jeq negzero ;can’t have negative zero
move x:(r0+sign),d0.l ;get sign
neg d0 ;negate
inc d0 ;correct
move d0.l,x:(r0+sign) ;save sign
negzero rts ;and return
;
; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
; DP_SCALE: scale the double precision number
;