Motorola DSP96002 User Manual
Page 681
B-162
DSP96002 USER’S MANUAL
MOTOROLA
; d4.h d4.l
; d5.h d5.l
; d6.l
; d7.l
;
; Alters Program Control Registers
; pc sr
;
;
; Version 1.0
; Latest Revision - 01-Aug-88
;
section
ieeesub
emsk equ $7ff ; exponent mask
eden equ $1 ; denorm exponent
grsmsk equ $700 ; GRS (guard-round-sticky) bits mask
grmsk equ $fffffe00 ; GR (guard-round) bits mask
smsk equ $ffffff00 ; mask to clear bits to right of the sticky bit
onemsk equ $1ff ; mask to set bits to right of the round bit
inum equ $100 ; increment number
imsk equ $7fffffff ; infinity mask
qnane equ $7ff ; quiet NaN exponent
qnanmh equ $7fffffff ; quiet NaN mantissa high
qnanml equ $ffffffff ; quiet NaN mantissa low
maxnum equ $fffff800 ; low part of maximum number
;
sdptest ; double precision subtraction subroutine
;
; Clear ER portion of status register
;
andi #0,er
;
; Check for Maximum and Minimum Exponents
;
bchg #31,d1.h ; change sign of addend 1
move #0,d6.l ; addend 0 flag
move d0.h,d4.l ; get exp0
move #emsk,d7.l ; get exponent mask
and d7,d4 d0.m,d2.l ; delete tags, get m0.h
cmp d7,d4 d1.m,d3.l ; check max exp, get m1.h
jeq _mant1 ; jump if exp0 = max exp
move d1.h,d5.l ; get exp1
and d7,d5 #1,d6.l ; delete tags, a1 flag
cmp d7,d5 #0,d2.m ; check max exp, sticky=0
jeq _mant2 ; jump if exp1 = max exp
tst d4 #0,d6.l ; check min exp, a0 flag
jeq _mant3 ; jump if exp0 = min exp
tst d5 #1,d6.l ; check min exp, a1 flag
jeq _mant4 ; jump if exp1 = min exp
jmp _nadd ; jump to normalized add
;
; Check if Addend 0 is Infinity
;
_mant1 move #imsk,d7.l ; get infinity mask