Commit | Line | Data |
---|---|---|
08bd3641 | 1 | /* Copyright (c) 1979, 1984 Regents of the University of California */ |
b3e05d18 | 2 | |
08bd3641 | 3 | #ifndef lint |
aa2758a3 | 4 | static char sccsid[] = "@(#)langpats.c 2.2 (Berkeley) %G%"; |
08bd3641 | 5 | #endif not lint |
b3e05d18 | 6 | |
08bd3641 | 7 | #include "inline.h" |
af054913 | 8 | |
a83071b9 | 9 | /* |
08bd3641 | 10 | * Pattern table for Pascal library routines. |
a83071b9 | 11 | */ |
08bd3641 | 12 | struct pats language_ptab[] = { |
b3e05d18 | 13 | |
08bd3641 | 14 | #ifdef vax |
a83071b9 | 15 | /* |
08bd3641 | 16 | * General Pascal library routines |
a83071b9 | 17 | */ |
b3df80a8 | 18 | { "2,_ROUND\n", |
08bd3641 KM |
19 | " movd (sp)+,r0\n\ |
20 | cvtrdl r0,r0\n" }, | |
b3e05d18 | 21 | |
b3df80a8 | 22 | { "2,_TRUNC\n", |
08bd3641 KM |
23 | " movd (sp)+,r0\n\ |
24 | cvtdl r0,r0\n" }, | |
b3e05d18 | 25 | |
a83071b9 KM |
26 | { "1,_ACTFILE\n", |
27 | " movl (sp)+,r1\n\ | |
28 | movl 12(r1),r0\n" }, | |
29 | ||
6b4e6ddb | 30 | { "2,_FCALL\n", |
08bd3641 KM |
31 | " movl (sp)+,r5\n\ |
32 | movl (sp),r0\n\ | |
33 | movc3 4(r0),__disply+8,(r5)\n\ | |
6b4e6ddb | 34 | movl (sp)+,r0\n\ |
9d34bc3a | 35 | movc3 4(r0),8(r0),__disply+8\n" }, |
b3e05d18 | 36 | |
25d46c52 | 37 | { "2,_FRTN\n", |
6b4e6ddb | 38 | " movl (sp)+,r0\n\ |
08bd3641 KM |
39 | movl (sp)+,r5\n\ |
40 | movc3 4(r0),(r5),__disply+8\n" }, | |
b3e05d18 | 41 | |
25d46c52 | 42 | { "3,_FSAV\n", |
08bd3641 KM |
43 | " movl (sp)+,r3\n\ |
44 | movl (sp)+,r4\n\ | |
45 | movl (sp),r5\n\ | |
46 | movl r3,(r5)\n\ | |
47 | ashl $3,r4,4(r5)\n\ | |
48 | movc3 4(r5),__disply+8,8(r5)\n\ | |
9d34bc3a | 49 | movl (sp)+,r0\n" }, |
b3e05d18 | 50 | |
a83071b9 KM |
51 | /* |
52 | * Pascal relational comparisons | |
53 | */ | |
25d46c52 | 54 | { "3,_RELEQ\n", |
08bd3641 KM |
55 | " movl (sp)+,r0\n\ |
56 | movl (sp)+,r1\n\ | |
57 | movl (sp)+,r3\n\ | |
9d34bc3a | 58 | movl r0,r4\n\ |
b3e05d18 | 59 | 1:\n\ |
f703f747 KM |
60 | movzwl $65535,r0\n\ |
61 | cmpl r4,r0\n\ | |
945bf1d0 | 62 | jleq 3f\n\ |
f703f747 KM |
63 | subl2 r0,r4\n\ |
64 | cmpc3 r0,(r1),(r3)\n\ | |
65 | jeql 1b\n\ | |
f703f747 | 66 | 2:\n\ |
945bf1d0 | 67 | clrl r0\n\ |
f703f747 KM |
68 | jbr 4f\n\ |
69 | 3:\n\ | |
945bf1d0 KM |
70 | cmpc3 r4,(r1),(r3)\n\ |
71 | jneq 2b\n\ | |
72 | incl r0\n\ | |
f703f747 | 73 | 4:\n" }, |
b3e05d18 | 74 | |
25d46c52 | 75 | { "3,_RELNE\n", |
08bd3641 KM |
76 | " movl (sp)+,r0\n\ |
77 | movl (sp)+,r1\n\ | |
78 | movl (sp)+,r3\n\ | |
9d34bc3a | 79 | movl r0,r4\n\ |
b3e05d18 | 80 | 1:\n\ |
f703f747 KM |
81 | movzwl $65535,r0\n\ |
82 | cmpl r4,r0\n\ | |
945bf1d0 | 83 | jleq 3f\n\ |
f703f747 KM |
84 | subl2 r0,r4\n\ |
85 | cmpc3 r0,(r1),(r3)\n\ | |
86 | jeql 1b\n\ | |
f703f747 | 87 | 2:\n\ |
b3e05d18 | 88 | movl $1,r0\n\ |
945bf1d0 KM |
89 | jbr 4f\n\ |
90 | 3:\n\ | |
91 | cmpc3 r4,(r1),(r3)\n\ | |
92 | jneq 2b\n\ | |
f703f747 | 93 | 4:\n" }, |
b3e05d18 | 94 | |
25d46c52 | 95 | { "3,_RELSLT\n", |
08bd3641 KM |
96 | " movl (sp)+,r0\n\ |
97 | movl (sp)+,r1\n\ | |
98 | movl (sp)+,r3\n\ | |
9d34bc3a | 99 | movl r0,r4\n\ |
945bf1d0 | 100 | jbr 2f\n\ |
b3e05d18 | 101 | 1:\n\ |
f703f747 KM |
102 | subl2 r0,r4\n\ |
103 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 104 | jneq 3f\n\ |
f703f747 | 105 | 2:\n\ |
945bf1d0 KM |
106 | movzwl $65535,r0\n\ |
107 | cmpl r4,r0\n\ | |
108 | jgtr 1b\n\ | |
f703f747 KM |
109 | cmpc3 r4,(r1),(r3)\n\ |
110 | 3:\n\ | |
111 | jlss 4f\n\ | |
112 | clrl r0\n\ | |
113 | jbr 5f\n\ | |
114 | 4:\n\ | |
b3e05d18 | 115 | movl $1,r0\n\ |
f703f747 | 116 | 5:\n" }, |
b3e05d18 | 117 | |
25d46c52 | 118 | { "3,_RELSLE\n", |
08bd3641 KM |
119 | " movl (sp)+,r0\n\ |
120 | movl (sp)+,r1\n\ | |
121 | movl (sp)+,r3\n\ | |
9d34bc3a | 122 | movl r0,r4\n\ |
945bf1d0 | 123 | jbr 2f\n\ |
b3e05d18 | 124 | 1:\n\ |
f703f747 KM |
125 | subl2 r0,r4\n\ |
126 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 127 | jneq 3f\n\ |
f703f747 | 128 | 2:\n\ |
945bf1d0 KM |
129 | movzwl $65535,r0\n\ |
130 | cmpl r4,r0\n\ | |
131 | jgtr 1b\n\ | |
f703f747 KM |
132 | cmpc3 r4,(r1),(r3)\n\ |
133 | 3:\n\ | |
134 | jleq 4f\n\ | |
135 | clrl r0\n\ | |
136 | jbr 5f\n\ | |
137 | 4:\n\ | |
b3e05d18 | 138 | movl $1,r0\n\ |
f703f747 | 139 | 5:\n" }, |
b3e05d18 | 140 | |
25d46c52 | 141 | { "3,_RELSGT\n", |
08bd3641 KM |
142 | " movl (sp)+,r0\n\ |
143 | movl (sp)+,r1\n\ | |
144 | movl (sp)+,r3\n\ | |
9d34bc3a | 145 | movl r0,r4\n\ |
945bf1d0 | 146 | jbr 2f\n\ |
b3e05d18 | 147 | 1:\n\ |
f703f747 KM |
148 | subl2 r0,r4\n\ |
149 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 150 | jneq 3f\n\ |
f703f747 | 151 | 2:\n\ |
945bf1d0 KM |
152 | movzwl $65535,r0\n\ |
153 | cmpl r4,r0\n\ | |
154 | jgtr 1b\n\ | |
f703f747 KM |
155 | cmpc3 r4,(r1),(r3)\n\ |
156 | 3:\n\ | |
157 | jgtr 4f\n\ | |
158 | clrl r0\n\ | |
159 | jbr 5f\n\ | |
160 | 4:\n\ | |
b3e05d18 | 161 | movl $1,r0\n\ |
f703f747 | 162 | 5:\n" }, |
b3e05d18 | 163 | |
25d46c52 | 164 | { "3,_RELSGE\n", |
08bd3641 KM |
165 | " movl (sp)+,r0\n\ |
166 | movl (sp)+,r1\n\ | |
167 | movl (sp)+,r3\n\ | |
9d34bc3a | 168 | movl r0,r4\n\ |
945bf1d0 | 169 | jbr 2f\n\ |
b3e05d18 | 170 | 1:\n\ |
f703f747 KM |
171 | subl2 r0,r4\n\ |
172 | cmpc3 r0,(r1),(r3)\n\ | |
945bf1d0 | 173 | jneq 3f\n\ |
f703f747 | 174 | 2:\n\ |
945bf1d0 KM |
175 | movzwl $65535,r0\n\ |
176 | cmpl r4,r0\n\ | |
177 | jgtr 1b\n\ | |
f703f747 KM |
178 | cmpc3 r4,(r1),(r3)\n\ |
179 | 3:\n\ | |
180 | jgeq 4f\n\ | |
181 | clrl r0\n\ | |
182 | jbr 5f\n\ | |
183 | 4:\n\ | |
b3e05d18 | 184 | movl $1,r0\n\ |
f703f747 | 185 | 5:\n" }, |
b3e05d18 | 186 | |
a83071b9 KM |
187 | /* |
188 | * Pascal set operations. | |
189 | */ | |
25d46c52 | 190 | { "4,_ADDT\n", |
08bd3641 KM |
191 | " movl (sp)+,r0\n\ |
192 | movl (sp)+,r1\n\ | |
193 | movl (sp)+,r2\n\ | |
194 | movl (sp)+,r4\n\ | |
b3e05d18 | 195 | movl r0,r3\n\ |
b3e05d18 KM |
196 | 1:\n\ |
197 | bisl3 (r1)+,(r2)+,(r3)+\n\ | |
198 | sobgtr r4,1b\n" }, | |
199 | ||
25d46c52 | 200 | { "4,_SUBT\n", |
08bd3641 KM |
201 | " movl (sp)+,r0\n\ |
202 | movl (sp)+,r1\n\ | |
203 | movl (sp)+,r2\n\ | |
204 | movl (sp)+,r4\n\ | |
b3e05d18 | 205 | movl r0,r3\n\ |
b3e05d18 KM |
206 | 1:\n\ |
207 | bicl3 (r2)+,(r1)+,(r3)+\n\ | |
208 | sobgtr r4,1b\n" }, | |
209 | ||
25d46c52 | 210 | { "4,_MULT\n", |
08bd3641 KM |
211 | " movl (sp)+,r0\n\ |
212 | movl (sp)+,r1\n\ | |
213 | movl (sp)+,r2\n\ | |
214 | movl (sp)+,r4\n\ | |
b3e05d18 | 215 | movl r0,r3\n\ |
b3e05d18 KM |
216 | 1:\n\ |
217 | mcoml (r1)+,r5\n\ | |
218 | bicl3 r5,(r2)+,(r3)+\n\ | |
219 | sobgtr r4,1b\n" }, | |
220 | ||
25d46c52 | 221 | { "4,_IN\n", |
08bd3641 KM |
222 | " movl (sp)+,r1\n\ |
223 | movl (sp)+,r2\n\ | |
224 | movl (sp)+,r3\n\ | |
225 | movl (sp)+,r4\n\ | |
0d53952d | 226 | clrl r0\n\ |
945bf1d0 KM |
227 | subl2 r2,r1\n\ |
228 | cmpl r1,r3\n\ | |
f703f747 | 229 | jgtru 1f\n\ |
945bf1d0 KM |
230 | jbc r1,(r4),1f\n\ |
231 | incl r0\n\ | |
a83071b9 KM |
232 | 1:\n" }, |
233 | ||
234 | /* | |
235 | * Pascal runtime checks | |
236 | */ | |
237 | { "1,_ASRT\n", | |
08bd3641 KM |
238 | " movl (sp)+,r0\n\ |
239 | tstl r0\n\ | |
a83071b9 KM |
240 | jneq 1f\n\ |
241 | pushl $0\n\ | |
242 | pushl $_EASRT\n\ | |
243 | calls $2,_ERROR\n\ | |
244 | 1:\n" }, | |
245 | ||
246 | { "2,_ASRTS\n", | |
08bd3641 KM |
247 | " movl (sp)+,r0\n\ |
248 | movl (sp)+,r1\n\ | |
a83071b9 KM |
249 | tstl r0\n\ |
250 | jneq 1f\n\ | |
251 | pushl r1\n\ | |
252 | pushl $_EASRTS\n\ | |
253 | calls $2,_ERROR\n\ | |
254 | 1:\n" }, | |
255 | ||
256 | { "1,_CHR\n", | |
257 | " movl (sp)+,r0\n\ | |
258 | cmpl r0,$127\n\ | |
259 | jlequ 1f\n\ | |
260 | pushl r0\n\ | |
261 | pushl $_ECHR\n\ | |
262 | calls $2,_ERROR\n\ | |
263 | 1:\n" }, | |
264 | ||
265 | { "0,_LINO\n", | |
266 | " incl __stcnt\n\ | |
267 | cmpl __stcnt,__stlim\n\ | |
268 | jlss 1f\n\ | |
269 | pushl __stcnt\n\ | |
270 | pushl $_ELINO\n\ | |
271 | calls $2,_ERROR\n\ | |
272 | 1:\n" }, | |
273 | ||
274 | { "1,_NIL\n", | |
275 | " movl (sp)+,r0\n\ | |
276 | cmpl r0,__maxptr\n\ | |
277 | jgtr 1f\n\ | |
278 | cmpl r0,__minptr\n\ | |
279 | jgeq 2f\n\ | |
280 | 1:\n\ | |
281 | pushl $0\n\ | |
282 | pushl $_ENIL\n\ | |
283 | calls $2,_ERROR\n\ | |
284 | 2:\n" }, | |
285 | ||
286 | { "2,_RANDOM\n", | |
08bd3641 | 287 | " movd (sp)+,r0\n\ |
a83071b9 KM |
288 | emul __seed,$1103515245,$0,r0\n\ |
289 | ediv $0x7fffffff,r0,r1,r0\n\ | |
290 | movl r0,__seed\n\ | |
291 | cvtld r0,r0\n\ | |
292 | divd2 $0d2.147483647e+09,r0\n" }, | |
293 | ||
294 | { "3,_RANG4\n", | |
08bd3641 KM |
295 | " movl (sp)+,r0\n\ |
296 | movl (sp)+,r1\n\ | |
297 | movl (sp)+,r2\n\ | |
a83071b9 KM |
298 | cmpl r0,r1\n\ |
299 | jlss 1f\n\ | |
300 | cmpl r0,r2\n\ | |
301 | jleq 2f\n\ | |
302 | 1:\n\ | |
303 | pushl r0\n\ | |
304 | pushl $_ERANG\n\ | |
305 | calls $2,_ERROR\n\ | |
306 | 2:\n" }, | |
307 | ||
308 | { "2,_RSNG4\n", | |
08bd3641 KM |
309 | " movl (sp)+,r0\n\ |
310 | movl (sp)+,r1\n\ | |
a83071b9 KM |
311 | cmpl r0,r1\n\ |
312 | jlequ 1f\n\ | |
313 | pushl r0\n\ | |
314 | pushl $_ERANG\n\ | |
315 | calls $2,_ERROR\n\ | |
316 | 1:\n" }, | |
317 | ||
318 | { "1,_SEED\n", | |
08bd3641 KM |
319 | " movl (sp)+,r1\n\ |
320 | movl __seed,r0\n\ | |
321 | movl r1,__seed\n" }, | |
a83071b9 KM |
322 | |
323 | { "3,_SUBSC\n", | |
08bd3641 KM |
324 | " movl (sp)+,r0\n\ |
325 | movl (sp)+,r1\n\ | |
326 | movl (sp)+,r2\n\ | |
a83071b9 KM |
327 | cmpl r0,r1\n\ |
328 | jlss 1f\n\ | |
329 | cmpl r0,r2\n\ | |
330 | jleq 2f\n\ | |
331 | 1:\n\ | |
332 | pushl r0\n\ | |
333 | pushl $_ESUBSC\n\ | |
334 | calls $2,_ERROR\n\ | |
335 | 2:\n" }, | |
336 | ||
337 | { "2,_SUBSCZ\n", | |
08bd3641 KM |
338 | " movl (sp)+,r0\n\ |
339 | movl (sp)+,r1\n\ | |
a83071b9 KM |
340 | cmpl r0,r1\n\ |
341 | jlequ 1f\n\ | |
342 | pushl r0\n\ | |
343 | pushl $_ESUBSC\n\ | |
344 | calls $2,_ERROR\n\ | |
345 | 1:\n" }, | |
af054913 KM |
346 | #endif vax |
347 | ||
348 | #ifdef mc68000 | |
f83c4f18 KM |
349 | /* |
350 | * General Pascal library routines | |
351 | */ | |
352 | { "_ACTFILE\n", | |
aa2758a3 | 353 | " movl sp@+,a0\n\ |
f83c4f18 KM |
354 | movl a0@(12),d0\n" }, |
355 | ||
356 | { "_ADDT\n", | |
aa2758a3 KM |
357 | " movl sp@+,a0\n\ |
358 | movl sp@+,d0\n\ | |
359 | movl sp@+,a1\n\ | |
360 | movl sp@+,d1\n\ | |
361 | movl a0,sp@-\n\ | |
362 | movl a2,sp@-\n\ | |
363 | movl d0,a2\n\ | |
f83c4f18 KM |
364 | subql #1,d1\n\ |
365 | 1:\n\ | |
366 | movl a2@+,d0\n\ | |
367 | orl a1@+,d0\n\ | |
368 | movl d0,a0@+\n\ | |
369 | dbra d1,1b\n\ | |
370 | movl sp@+,a2\n\ | |
aa2758a3 | 371 | movl sp@+,d0\n" }, |
f83c4f18 KM |
372 | |
373 | { "_SUBT\n", | |
aa2758a3 KM |
374 | " movl sp@+,a0\n\ |
375 | movl sp@+,d0\n\ | |
376 | movl sp@+,a1\n\ | |
377 | movl sp@+,d1\n\ | |
378 | movl a0,sp@-\n\ | |
379 | movl a2,sp@-\n\ | |
380 | movl d0,a2\n\ | |
f83c4f18 KM |
381 | subql #1,d1\n\ |
382 | 1:\n\ | |
383 | movl a1@+,d0\n\ | |
384 | notl d0\n\ | |
385 | andl a2@+,d0\n\ | |
386 | movl d0,a0@+\n\ | |
387 | dbra d1,1b\n\ | |
388 | movl sp@+,a2\n\ | |
aa2758a3 | 389 | movl sp@+,d0\n" }, |
f83c4f18 KM |
390 | |
391 | { "_MULT\n", | |
aa2758a3 KM |
392 | " movl sp@+,a0\n\ |
393 | movl sp@+,d0\n\ | |
394 | movl sp@+,a1\n\ | |
395 | movl sp@+,d1\n\ | |
396 | movl a0,sp@-\n\ | |
397 | movl a2,sp@-\n\ | |
398 | movl d0,a2\n\ | |
f83c4f18 KM |
399 | subql #1,d1\n\ |
400 | 1:\n\ | |
401 | movl a2@+,d0\n\ | |
402 | andl a1@+,d0\n\ | |
403 | movl d0,a0@+\n\ | |
404 | dbra d1,1b\n\ | |
405 | movl sp@+,a2\n\ | |
aa2758a3 | 406 | movl sp@+,d0\n" }, |
f83c4f18 KM |
407 | |
408 | { "_IN\n", | |
aa2758a3 KM |
409 | " movl sp@+,d0\n\ |
410 | movl sp@+,a0\n\ | |
411 | movl sp@+,d1\n\ | |
412 | movl sp@+,a1\n\ | |
413 | subl a0,d0\n\ | |
414 | cmpl d1,d0\n\ | |
a2793457 | 415 | jhi 1f\n\ |
aa2758a3 KM |
416 | movl d0,d1\n\ |
417 | lsrl #3,d1\n\ | |
418 | btst d0,a1@(0,d1:l)\n\ | |
a2793457 | 419 | jeq 1f\n\ |
f83c4f18 | 420 | moveq #1,d0\n\ |
a2793457 | 421 | jra 2f\n\ |
f83c4f18 KM |
422 | 1:\n\ |
423 | moveq #0,d0\n\ | |
424 | 2:\n" }, | |
aa2758a3 | 425 | |
6dc72518 | 426 | { "_RANG4\n", |
aa2758a3 KM |
427 | " movl sp@+,d0\n\ |
428 | movl sp@+,a0\n\ | |
429 | movl sp@+,a1\n\ | |
430 | cmpl a0,d0\n\ | |
6dc72518 | 431 | jlt 1f\n\ |
aa2758a3 | 432 | cmpl a1,d0\n\ |
6dc72518 PA |
433 | jle 2f\n\ |
434 | 1:\n\ | |
435 | pea _ERANG\n\ | |
436 | jbsr _ERROR\n\ | |
437 | addqw #4,sp\n\ | |
438 | 2:\n" }, | |
439 | { "_RSNG4\n", | |
aa2758a3 KM |
440 | " movl sp@+,a0\n\ |
441 | movl sp@+,a1\n\ | |
442 | cmpl a1,a0\n\ | |
6dc72518 PA |
443 | jls 1f\n\ |
444 | pea _ERANG\n\ | |
445 | jbsr _ERROR\n\ | |
446 | addqw #4,sp\n\ | |
447 | 1:\n" }, | |
aa2758a3 KM |
448 | |
449 | { "_SUBSC\n", | |
450 | " movl sp@+,d0\n\ | |
451 | movl sp@+,a0\n\ | |
452 | movl sp@+,a1\n\ | |
453 | cmpl a0,d0\n\ | |
454 | jlt 1f\n\ | |
455 | cmpl a1,d0\n\ | |
456 | jle 2f\n\ | |
457 | 1:\n\ | |
458 | pea _ESUBSC\n\ | |
459 | jbsr _ERROR\n\ | |
460 | addqw #4,sp\n\ | |
461 | 2:\n" }, | |
462 | ||
463 | { "_SUBSCZ\n", | |
464 | " movl sp@+,a0\n\ | |
465 | movl sp@+,a1\n\ | |
466 | cmpl a1,a0\n\ | |
467 | jls 1f\n\ | |
468 | pea _ESUBSC\n\ | |
469 | jbsr _ERROR\n\ | |
470 | addqw #4,sp\n\ | |
471 | 1:\n" }, | |
472 | ||
af054913 | 473 | #endif mc68000 |
a83071b9 | 474 | |
08bd3641 | 475 | { "", "" } |
b3e05d18 | 476 | }; |