Motorola DSP96002 User Manual
Page 707
B-188
DSP96002 USER’S MANUAL
MOTOROLA
; GE - greater than or equal N eor V = 0
; GT - greater than Z + (N eor V) = 0
; LE - less than or equal Z + (N eor V) = 1
; LT - less than N eor V = 1
; NE - not equal Z = 0
;
; Alters: D0.L,D1.L,D2.L
;
dp_cmp move x:(r0+sign),d0.l ;get sign
tst d0 x:(r0),d1.l ;get exponent
jeq _pos1 ;positive
bset #31,d1.l ;set sign bit
_pos1 move x:(r1+sign),d0.l ;get sign
tst d0 x:(r1),d2.l ;get exponent
jeq _pos2 ;positive
bset #31,d2.l ;set sign bit
_pos2 cmp d2,d1 ;compare signs and exponents
jeq _same1 ;more if same
rts ;conditions are set
_same1 move x:(r0+ms),d1.l ;get ms parts
move x:(r1+ms),d2.l
cmp d2,d1 ;compare
jeq _same2 ;more if same
rts ;conditions are set
_same2 move x:(r0+ls),d1.l ;get ls parts
move x:(r1+ls),d2.l
cmp d2,d1 ;do final compare
rts
;
; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
;DP_COPYS-Copy sign from one double precision number to another.
;
; Entry point: dp_copys: c(r0+sign)
←
c(r1+sign)
;
; 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
;
; Alters: D0.L
;
dp_copys move x:(r0+ms),d0.l ;get ms
tst d0 ;test for zero
jne notzero ;if not zero, copy the sign
move x:(r0+ls),d0.l ;get ls
tst d0 ;test for zero
jne notzero ;if not zero, copy the sign
rts
notzero move x:(r1+sign),d0.l ;get sources sign