Motorola DSP96002 User Manual
Page 715
B-196
DSP96002 USER’S MANUAL
MOTOROLA
; extended precision number
;
; Outputs: r0 contains the lowest address of the 4-word internal
; extended precision number with the result
;
; Alters: D0.L,D1.L,D2.L,D3.L,D4.L,D5.L,D6.L,D7.L,D0.H,D1.H
;
dp_sub jsr dp_neg ;negate the operand
jsr dp_add ;add the numbers
jmp dp_neg ;negate the operand
;
; MOTOROLA DSP96002 DPLIB - VERSION 1.0
;
; DP_TST - Test a double precision operand. (The same as "TST.")
;
; Entry point: dp_tst: c(r0) - 0 (Set the flags)
;
; Inputs: r0 contains the lowest address of the 4-word internal
; extended precision number
;
; Outputs: none
;
; CCR CONDITION CODES:
;
; C - NOT AFFECTED.
; V - ALWAYS CLEARED
; Z - SET IF RESULT IS ZERO, CLEARED OTHERWISE.
; N - SET IF RESULT IS NEGATIVE, CLEARED OTHERWISE.
; I - NOT AFFECTED.
; LR - NOT AFFECTED.
; R - NOT AFFECTED.
; A - NOT AFFECTED.
;
; The following Jcc branch conditions can be used after
; calling dp_tst. The other branch conditions should not
; be used.
;
; "cc" Mnemonic Condition
; EQ - equal Z = 1
; 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_tst move x:(r0+ms),d0.l ;get ms
tst d0 x:(r0+sign),d1.l ;test ms = 0, get sign
jeq mszero ;if zero, check if ls = 0
sgntst tst d1 #-1,d0.l ;test the sign
move #2,d1.l ;get offset for negative sign
add d1,d0 ifeq ;make d0 same sign as (r0)