Skip to content

Commit 2772992

Browse files
MotorolaEric Smith
Motorola
authored and
Eric Smith
committed
Original release.
0 parents  commit 2772992

34 files changed

+14196
-0
lines changed

src/check.sa

+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
*
2+
NAM CHECK
3+
TTL ROUTINES TO CHECK SPECIAL CASES AND INVALID OPS.
4+
*
5+
* LINKING LOADER DEFINTIONS
6+
*
7+
XDEF CKINVD,CHKZER,CHKINF,DIVZER
8+
*
9+
XREF RTAR1,IOPSUB,RTINF,ISDNRM
10+
*
11+
* REVISION HISTORY:
12+
* DATE PROGRAMMER REASON
13+
*
14+
* 23.MAY.80 G. STEVENS ORIGINAL
15+
* 28.MAY.80 G. STEVENS REWRITE CKINVD
16+
* 03.JUNE.80 G. STEVENS MAKE CKINVD HANDLE NAN,ZEROS
17+
* AND INFINITIES CORRECTLY
18+
* 21.AUG.80 G. STEVENS REMOVE IOP 17 FROM DIVZER
19+
*
20+
PAGE
21+
*
22+
* HERE ARE SOME OF THE COMPONENT ROUTINES
23+
* FOR THE FP09. THEY INCLUDE CHKZER, CHECK
24+
* ZERO AGAINST THE ROUNDING MODES; CHECK
25+
* CHECK INFINITY AGAINST A/P MODES OF
26+
* CLOSURE; DIVZER, HANDLES DIVISION BY ZERO;
27+
* RTNAN, BUILD UP A "NAN" WITH PROPER
28+
* NAN ADDRES INSERTED.
29+
*
30+
***************************************************************
31+
*
32+
* PROCEDURE CHKZER
33+
*
34+
* THIS ROUTINE CHECKS ZERO AGAINST ROUNDING
35+
* MODES IN A FLP ADDITION WHEN BOTH OPERANDS
36+
* ARE ZERO IN ORDER TO RETURN A ZERO RESULT
37+
* OF THE CORRECT SIGN. IF SIGNS ARE THE SAME
38+
* A ZERO OF THAT SIGN IS RETURNED. IF THE
39+
* SIGN ARE OPPOSITE THEN +0 IS RETURNED
40+
* IN ROUDING MODES RN,RZ,RP AND -O IS
41+
* RETURNED IN ROUNDING MODE RM.
42+
*
43+
* RETURN A ZERO TO RESULT
44+
*
45+
CHKZER LBSR RTAR1
46+
*
47+
* NOW CHECK TO SEE IF THE SIGN NEEDS
48+
* MODIFYING.
49+
*
50+
LDA ARG1,U
51+
EORA ARG2,U
52+
*
53+
* IF THE SIGNS ARE NOT EQUAL, CHECK THE ROUNDING
54+
* MODE TO DETERMINE THE PROPER SIGN.
55+
*
56+
IFCC LT
57+
LDA [PFPCB,U]
58+
ANDA #CTLRND GET ROUNDING MODE INFO.
59+
IF A,GE,#BIT1+BIT2 RM MODE
60+
LDA #BIT7
61+
STA RESULT,U RETURN -0
62+
*
63+
ELSE
64+
CLR RESULT,U RETURN +0
65+
ENDIF
66+
ENDIF
67+
*
68+
RTS RETURN
69+
*
70+
PAG
71+
*******************************************************************
72+
*
73+
* PROCEDURE CHKINF
74+
*
75+
* THIS ROUTINE CHECKS INFINITY AGAINST
76+
* CLOSURE MODES IN A FLP ADDITION WHEN
77+
* BOTH OPERANDS ARE INFINITY TO DETERMINE
78+
* WHETHER TO RETURN INFINITY OR A NAN
79+
* WITH PROPER INVALID OPERATION CODE
80+
*
81+
*
82+
* CHECK FOR A/P MODES
83+
*
84+
CHKINF LDA [PFPCB,U]
85+
ANDA #BIT0
86+
IFCC GT AFFINE MODE
87+
LDA ARG1,U
88+
EORA ARG2,U
89+
*
90+
* IF SIGNS THE SAME RETURN INFINITY
91+
* OF THAT SIGN.
92+
*
93+
IFCC GE
94+
LBSR RTAR1
95+
*
96+
* IF SIGNS DIFFER RETURN "NAN" AND
97+
* SET IOP = 2
98+
*
99+
ELSE
100+
IOP 2 (+INF)+(-INF); AFFINE MODE
101+
ENDIF
102+
*
103+
* ELSE IN THE PROTECTIVE MODE RETURN NAN
104+
* AND SET IOP = 8
105+
*
106+
ELSE
107+
IOP 8 +/- INF; PROTECTIVE MODE
108+
ENDIF
109+
*
110+
RTS RETURN
111+
*
112+
PAG
113+
***************************************************************
114+
*
115+
* PROCEDURE DIVZER
116+
*
117+
* THIS ROUTINE HANDLES THE CASE OF DIVISION
118+
* BY ZERO.
119+
*
120+
* ON ENTRY: ARG2 CONTAINS A TRUE ZERO
121+
* U - STACK FRAME POINTER
122+
*
123+
* ON EXIT: RESULT CONTAINS AN INFINITY W/
124+
* SIGN OF THE INPUT ARGUMENT.
125+
* U, S - UNCHANGED
126+
* X,Y,D,CC - DESTROYED
127+
*
128+
* OPERATION: THE DIVISION BY ZERO FLAG IN TSTAT IS SET
129+
* AND AN INFINITY OF THE SIGN OF THE INPUT ARGUMENT IS
130+
* RETURNED IN THE STACK FRAME RESULT.
131+
*
132+
*
133+
* CHECK DIVISION BY ZERO TRAP ENABLE
134+
*
135+
DIVZER EQU *
136+
*
137+
BSETA BIT3,(TSTAT,U)
138+
LBSR RTINF
139+
*
140+
RTS RETURN
141+
*
142+
PAG
143+
******************************************************************
144+
*
145+
* PROCEDURE CKINVD
146+
*
147+
* CKINVD CHECKS FOR AN INVALID RESULT OF AN ARITHMETIC
148+
* OPERATION. IF THE RESULTIS UNORMALIZED AND THE DESTINATION
149+
* IS SINGLE OR DOUBLE THEN SIGNAL IOP. = 16 AND RETURN A
150+
* NON TRAPPING NAN.
151+
*
152+
*
153+
CKINVD EQU *
154+
*
155+
* CHECK FOR ZERO OR NAN OR INFINITY
156+
*
157+
LDD EXPR,U
158+
IF D,NE,#INFEX
159+
IF D,NE,#ZEROEX
160+
*
161+
* CHECK THE PRECISION OF THE RESULT
162+
*
163+
LDA RPREC,U
164+
IF A,LE,#DBL SINGLE OR DOUBLE
165+
LBSR ISDNRM CHECK FOR DENORMALZED
166+
IFCC EQ RESULT IS DENORMALIZD
167+
LDD EXPR,U SUBTRACT BIAS FROM EXPONENT
168+
SUBD #01
169+
STD EXPR,U
170+
*
171+
ELSE
172+
LDA FRACTR,U
173+
IFCC GE NOT NORMALIZED
174+
IOP 16 SIGNAL INVALID OPERATION
175+
*
176+
ENDIF NOT NORMALIZED
177+
*
178+
ENDIF IS DENORMALIZED
179+
*
180+
ENDIF SINGLE OR DOUBLE
181+
*
182+
ENDIF NOT A ZERO
183+
*
184+
ENDIF NOT A NAN OR INFINITY
185+
*
186+
*
187+
RTS RETURN
188+
*
189+
*
190+


0 commit comments

Comments
 (0)