Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /INTEGER MATH PACKAGE OS8 FORTRAN II LIBRARY |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1974,1977 BY DIGITAL EQUIPMENT CORPORATION | |
12 | / | |
13 | / | |
14 | / | |
15 | / | |
16 | / | |
17 | / | |
18 | / | |
19 | / | |
20 | / | |
21 | / | |
22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE | |
23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT | |
24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY | |
25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL. | |
26 | / | |
27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER | |
28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED | |
29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH | |
30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. | |
31 | / | |
32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE | |
33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY | |
34 | /DIGITAL. | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | / | |
41 | / | |
42 | / | |
43 | / | |
44 | / | |
45 | \f/ VERSION 5A | |
46 | / APRIL 28, 1977 | |
47 | / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS | |
48 | / | |
49 | / | |
50 | ENTRY IREM | |
51 | ENTRY IABS | |
52 | ENTRY DIV | |
53 | ENTRY MPY | |
54 | ENTRY IRDSW | |
55 | ENTRY CLEAR | |
56 | ENTRY SUBSC | |
57 | ||
58 | /THE FOLLOWING DEFINITIONS ARE TO ENABLE LIBRARY | |
59 | /OPTIMIZATIONS WHERE CRITICAL TIMING CONSIDERATIONS | |
60 | /EXIST. THEY SHOULD BE USED WITH EXTREME CAUTION, | |
61 | /AND MUST REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS | |
62 | /ONLY. | |
63 | ||
64 | OPDEF TADI 1400 | |
65 | OPDEF DCAI 3400 | |
66 | OPDEF JMSI 4400 | |
67 | OPDEF JMPI 5400 | |
68 | ||
69 | LAP /LV AUTO PAGING FOR PAL-III LIKE CODE | |
70 | ||
71 | AC, 0 /LOCATIONS USED BY MPY & DIV | |
72 | MQ, 0 | |
73 | SIGN, 0 | |
74 | CTR, 0 | |
75 | LOC, 0 | |
76 | SAV, 0 | |
77 | ||
78 | MPY, BLOCK 1 | |
79 | 5 /INTEGER MULTIPLY SUBROUTINE | |
80 | DCA MQ / CALL 1,MPY | |
81 | TAD MPY / ARG <NUMBER> | |
82 | DCA MPY1 | |
83 | MPY1, NOP /REPLACED BY CDF | |
84 | TADI MPY# | |
85 | INC MPY# | |
86 | DCA MPY2 | |
87 | TADI MPY# | |
88 | INC MPY# | |
89 | DCA DIV | |
90 | MPY2, NOP /REPLACED BY CDF | |
91 | TADI DIV | |
92 | JMS MPYSB | |
93 | RETRN MPY | |
94 | ||
95 | MPYSB, 0 /INTERNAL MULTIPLICATION SUBR | |
96 | DCA DIV | |
97 | TAD (-14 | |
98 | DCA CTR | |
99 | BACK, CLL RAL | |
100 | DCA AC | |
101 | TAD MQ | |
102 | CLL RAL | |
103 | DCA MQ | |
104 | SZL | |
105 | TAD DIV | |
106 | TAD AC | |
107 | ISZ CTR | |
108 | JMP BACK | |
109 | JMPI MPYSB | |
110 | / | |
111 | CPAGE 4 | |
112 | DIVZA, DIVZ | |
113 | DVERR, 4411 /"DIVZ" ERROR | |
114 | 2632 | |
115 | DIV, BLOCK 1 | |
116 | 5 /INTEGER DIVIDE SUBROUTINE | |
117 | SMA / CALL 1,DIV | |
118 | JMP AD1 / ARG <DIVISOR> | |
119 | INC SIGN | |
120 | CIA | |
121 | AD1, DCA MQ | |
122 | DCA CTR | |
123 | TAD DIV | |
124 | DCA DIV1 | |
125 | DIV1, NOP /REPLACED BY CDF | |
126 | TADI DIV# | |
127 | INC DIV# | |
128 | DCA DIV2 | |
129 | TADI DIV# | |
130 | INC DIV# | |
131 | DCA MPY | |
132 | DIV2, NOP | |
133 | TADI MPY | |
134 | SNA | |
135 | JMPI DIVZA /ATTEMPTING TO DIVIDE BY ZERO | |
136 | SMA | |
137 | JMP LOOP1 | |
138 | INC SIGN | |
139 | CIA | |
140 | LOOP1, CLL RAL | |
141 | INC CTR | |
142 | SMA | |
143 | JMP LOOP1 | |
144 | CLL RAR | |
145 | DCA LOC | |
146 | TAD LOC | |
147 | CIA | |
148 | DCA MPY | |
149 | TAD CTR | |
150 | CMA | |
151 | DCA CTR | |
152 | TAD CTR | |
153 | DCA SAV | |
154 | DCA AC | |
155 | TAD MQ | |
156 | LOOP2, TAD MPY | |
157 | LOOP3, ISZ CTR | |
158 | SKP | |
159 | JMP DONE | |
160 | STL | |
161 | SPA | |
162 | CLL | |
163 | DCA MQ | |
164 | TAD AC | |
165 | RAL | |
166 | DCA AC | |
167 | TAD MQ | |
168 | CLL RAL | |
169 | SNL | |
170 | JMP LOOP2 | |
171 | TAD LOC | |
172 | JMP LOOP3 | |
173 | DONE, CLA | |
174 | TAD SIGN | |
175 | RAR | |
176 | CLA | |
177 | DCA SIGN | |
178 | TAD AC | |
179 | SZL | |
180 | CIA | |
181 | RETRN DIV | |
182 | ||
183 | IREM, BLOCK 1 | |
184 | 5 /INTEGER REMAINDER SUBROUTINE | |
185 | CLA / CALL 1,IREM | |
186 | INC IREM# / ARG <UNUSED VARIABLE> | |
187 | INC IREM# | |
188 | INC SAV /IREM MUST HAVE AN ARGUMENT | |
189 | TAD MQ /BECAUSE IT IS A FUNCTION. | |
190 | SPA /IREM CAN BE CALLED ONLY ONCE | |
191 | TAD LOC /AFTER EACH DIVISION ... | |
192 | SKP /SUBSEQUENT CALLS WILL RETURN ZERO. | |
193 | LOP, CLL RAR | |
194 | ISZ SAV | |
195 | JMP LOP | |
196 | RETRN IREM | |
197 | / | |
198 | PAGE | |
199 | \f | |
200 | IABS, BLOCK 1 | |
201 | 5 /INTEGER ABS VALUE FUNCTION | |
202 | TAD IABS / CALL 1,IABS | |
203 | DCA IAB1 / ARG <INTEGER VARIABLE> | |
204 | IAB1, NOP | |
205 | TADI IABS# | |
206 | INC IABS# | |
207 | DCA IAB2 | |
208 | TADI IABS# | |
209 | INC IABS# | |
210 | DCA IRDSW | |
211 | IAB2, NOP /CDF TO ARGUMENT FIELD | |
212 | TADI IRDSW | |
213 | SPA | |
214 | CIA | |
215 | RETRN IABS | |
216 | ||
217 | IRDSW, BLOCK 1 | |
218 | 5 /READ SWITCH REGISTER FUNCTION | |
219 | CLA OSR | |
220 | INC IRDSW# | |
221 | INC IRDSW# | |
222 | RETRN IRDSW | |
223 | ||
224 | DIVZ, CALL 1,ERROR /ZERO DIVIDE ERROR | |
225 | ARG DVERR | |
226 | CLA CLL CMA RAR | |
227 | RETRN DIV | |
228 | ||
229 | /THE FLOATING POINT CLEAR ROUTINE WAS ADDED TO "INTEGR" | |
230 | /SO THAT PROGRAMS WHICH DO NOT USE FLOATING POINT MATH | |
231 | /CAN RUN WITHOUT LOADING THE F.P. MATH PACKAGE. | |
232 | ||
233 | CLEAR, BLOCK 1 | |
234 | 5 /FLOATING POINT CLEAR FUNCTION | |
235 | DCA IRDSW | |
236 | DCA ACH | |
237 | DCA ACM | |
238 | DCA ACL | |
239 | TAD IRDSW | |
240 | RETRN CLEAR | |
241 | ||
242 | \f | |
243 | / THE FOLLOWING CAN BE USED FOR DOUBLY OR SINGLY | |
244 | / SUBSCRIPTED ARRAYS. ON ENTRY THE AC SHOULD BE | |
245 | / NEGATIVE FOR FLOATING POINT VARIABLES. THIS MAY | |
246 | / BE ANY NEGATIVE NUMBER FOR SINGLY SUBSCRIPTED | |
247 | / VARIABLES, AND MUST BE THE FIRST DIMENSION FOR | |
248 | / DOUBLY SUBSCRIPTED VARIABLES. SOME EXAMPLES | |
249 | / FOLLOW: (TO LOAD THE I,JTH ELEMENT OF AN FP ARRAY) | |
250 | ||
251 | / TAD (-M /DIMENSIONS ARE M BY N | |
252 | / CALL 3,SUBSC | |
253 | / ARG J | |
254 | / ARG I | |
255 | / ARG ARRAY | |
256 | / LOC /MUST BE A DUMMY VARIABLE | |
257 | / CALL 1,IFAD | |
258 | / ARG LOC | |
259 | ||
260 | / TO LOAD THE JTH ELEMENT OF AN INTEGER ARRAY: | |
261 | ||
262 | / CALL 2,SUBSC | |
263 | / ARG J | |
264 | / ARG INTARR | |
265 | / LOC /STILL A DUMMY VARIABLE | |
266 | / TAD I LOC | |
267 | ||
268 | ||
269 | S1, BLOCK 1 /ADDR OF 1ST SUBSC | |
270 | S2, BLOCK 1 /ADDR OF 2ND SUBSC | |
271 | A, BLOCK 2 /ADDR OF ARRAY | |
272 | R, BLOCK 1 /ADDR FOR RESULT | |
273 | TM, 0 | |
274 | FL, 0 /DOUBLE SUBSC FLAG | |
275 | N, 0 /DIMENSION -- NEGATIVE IF FLOATING | |
276 | MQA, MQ /FOR INDIRECT DCA | |
277 | ||
278 | SUBSC, BLOCK 1 | |
279 | 5 /FORTRAN SUBSCRIPTING ROUTINE | |
280 | DCA N /SAVE THE DIMENSION | |
281 | TAD N | |
282 | SPA /... ALSO ABS VALUE | |
283 | CMA | |
284 | DCAI MQA /WARNING **THIS ASSUMES DF=CURR FIELD** | |
285 | CLA CLL CMA RAL /HOW MANY ARGS? | |
286 | TAD SUBSC# | |
287 | DCA 10 | |
288 | TAD SUBSC | |
289 | DCA SUB1 | |
290 | SUB1, NOP /REPLACED BY CDF | |
291 | TADI 10 | |
292 | AND (100 | |
293 | SNA CLA /DOUBLE SUBSCRIPTS? | |
294 | JMP SB0 | |
295 | TADI 10 /YES, PICK UP ARGS... | |
296 | DCA SB2 | |
297 | TADI 10 | |
298 | DCA S2 | |
299 | CMA | |
300 | SB0, DCA FL /SET DBL SUBSC FLAG | |
301 | TADI 10 | |
302 | DCA SB1 | |
303 | TADI 10 | |
304 | DCA S1 | |
305 | TADI 10 | |
306 | DCA A | |
307 | TADI 10 | |
308 | DCA A# | |
309 | TAD SUBSC | |
310 | DCA SUB2 | |
311 | TADI 10 | |
312 | DCA R | |
313 | TAD 10 | |
314 | IAC | |
315 | DCA SUBSC# | |
316 | ISZ FL /DBL SUBSCRIPTING? | |
317 | JMP SB1 | |
318 | CLA CMA /GET THE 2ND SUBSC | |
319 | SB2, NOP /CDF TO FIELD OF 2ND SUBSCRIPT | |
320 | TADI S2 | |
321 | SZA /IS IT A 1? | |
322 | JMSI MPYSBA /NO, MULTIPLY BY DIMENSION | |
323 | SB1, NOP /CDF TO FIELD OF 1ST SUBSCRIPT | |
324 | TADI S1 | |
325 | TAD (-1 /MINUS ONE | |
326 | DCA TM | |
327 | SUB2, NOP /REPLACED BY CDF | |
328 | TAD A | |
329 | DCAI R | |
330 | INC R | |
331 | TAD N | |
332 | SPA CLA /FIXED OR FLOATING | |
333 | TAD TM | |
334 | CLL RAL | |
335 | TAD TM | |
336 | TAD A# | |
337 | DCAI R | |
338 | STL CLA RTL /FAST 'RETRN SUBSC' | |
339 | TAD SUBSC | |
340 | DCA SUB3 | |
341 | SUB3, NOP /REPLACED BY 'CDF CIF' | |
342 | JMPI SUBSC# | |
343 | ||
344 | MPYSBA, MPYSB | |
345 | ||
346 | END | |
347 | \f |