xref: /csrg-svn/old/pcc/ccom.tahoe/table.c (revision 32902)
1 #ifndef lint
2 static char sccsid[] = "@(#)table.c	1.10 (Berkeley) 12/10/87";
3 #endif
4 
5 # include "pass2.h"
6 /* special shapes (SSOREG,SZERO etc.) shouldn't be or-ed */
7 # define AWD SNAME|SOREG|SCON|STARNM|STARREG
8 /* tbl */
9 # define ANYSIGNED TPOINT|TINT|TSHORT|TCHAR
10 # define ANYUSIGNED TUNSIGNED|TUSHORT|TUCHAR
11 # define ANYFIXED ANYSIGNED|ANYUSIGNED
12 # define TWORD TINT|TUNSIGNED|TPOINT
13 /* tbl */
14 
15 struct optab  table[] = {
16 
17 PCONV,	INAREG|INTAREG,
18 	SAREG|AWD,	TCHAR|TSHORT,
19 	SANY,	TPOINT,
20 		NAREG|NASL,	RESC1,
21 		"	cvtZLl	AL,A1\n",
22 
23 PCONV,	INAREG|INTAREG,
24 	SAREG|AWD,	TUCHAR|TUSHORT,
25 	SANY,	TPOINT,
26 		NAREG|NASL,	RESC1,
27 		"	movzZLl	AL,A1\n",
28 
29 	/* the following entry is to fix a problem with
30 	   the manner that the first pass handles the
31 	   type of a shift expression                 */
32 PCONV,	INAREG|INTAREG,
33 	SAREG|AWD,	TINT|TUNSIGNED,
34 	SANY,	TPOINT,
35 		NAREG|NASL,	RLEFT,
36 		"",
37 
38 SCONV,	INAREG|INTAREG|FORCC,
39 	SAREG|AWD,	TDOUBLE,
40 	SANY,	TFLOAT,
41 		NAREG|NASL,	RESC1|RESCC,
42 		"	ldd	AL\n	cvdf\n	stf	TA1\n",
43 
44 SCONV,	INAREG|INTAREG|FORCC,
45 	SAREG|AWD,	TFLOAT,
46 	SANY,	TDOUBLE,
47 		NAREG|NASL,	RESC1|RESCC,
48 		"	ldfd	AL\n	std	A1\n",
49 
50 SCONV,	INAREG|INTAREG|FORCC,
51 	SAREG|AWD,	TINT,
52 	SANY,	TFLOAT|TDOUBLE,
53 		NAREG|NASL,	RESC1|RESCC,
54 		"	cvlZR	AL\n	stZR	TA1\n",
55 
56 SCONV,	INAREG|INTAREG|FORCC,
57 	SAREG|AWD,	TUNSIGNED,
58 	SANY,	TFLOAT,
59 		NAREG|NASL,	RESC1|RESCC,
60 		"	ZY\n",
61 
62 SCONV,	INAREG|INTAREG|FORCC,
63 	SAREG|AWD,	TUNSIGNED,
64 	SANY,	TDOUBLE,
65 		NAREG|NASL,	RESC1|RESCC,
66 		"	ZY\n",
67 
68 SCONV,	INAREG|INTAREG|FORCC,
69 	SAREG|AWD,	TFLOAT|TDOUBLE,
70 	SANY,	ANYUSIGNED,
71 		NAREG|NASL,	RESC1|RESCC,
72 		"	ZW\n",
73 
74 SCONV,	INAREG|INTAREG|FORCC,
75 	SAREG|AWD,	TFLOAT|TDOUBLE,
76 	SANY,	ANYSIGNED,
77 		NAREG|NASL,	RESC1|RESCC,
78 		"	ldZL	AL\n	cvZLl	A1\n",
79 
80 SCONV,	INAREG|INTAREG,
81 	SAREG|AWD,	ANYFIXED,
82 	SANY,	ANYFIXED,
83 		NAREG|NASL,	RESC1|RESCC,
84 		"	ZU\n",
85 
86 SCONV,	INAREG|INTAREG|FORCC,
87 	SAREG|AWD,	ANYFIXED,
88 	SANY,	ANYFIXED,
89 		NAREG|NASL,	RESC1|RESCC,
90 		"	ZV\n",
91 
92 INIT,	FOREFF,
93 	SCON,	TANY,
94 	SANY,	TWORD,
95 		0,	RNOP,
96 		"	.long	CL\n",
97 
98 INIT,	FOREFF,
99 	SCON,	TANY,
100 	SANY,	TSHORT|TUSHORT,
101 		0,	RNOP,
102 		"	.word	CL\n",
103 
104 INIT,	FOREFF,
105 	SCON,	TANY,
106 	SANY,	TCHAR|TUCHAR,
107 		0,	RNOP,
108 		"	.byte	CL\n",
109 
110 	/* for the use of fortran only */
111 
112 GOTO,	FOREFF,
113 	SCON,	TANY,
114 	SANY,	TANY,
115 		0,	RNOP,
116 		"	jbr	CL\n",
117 
118 GOTO,	FOREFF,
119 	AWD,	TANY,
120 	SANY,	TANY,
121 		0,	RNOP,
122 		"	jmp	*AL\n",
123 
124 GOTO,	FOREFF,
125 	SAREG,	TANY,
126 	SANY,	TANY,
127 		0,	RNOP,
128 		"	jmp	(AL)\n",
129 
130 STARG,	FORARG,
131 	SCON|SOREG,	TANY,
132 	SANY,	TANY,
133 		NTEMP+2*NAREG,	RESC3,
134 		"ZS",
135 
136 STASG,	FORARG,
137 	SNAME|SOREG,	TANY,
138 	SCON|SAREG,	TANY,
139 		0,	RNULL,
140 		"	ZT\nZS",
141 
142 STASG,	FOREFF,
143 	SNAME|SOREG,	TANY,
144 	SCON|SAREG,	TANY,
145 		0,	RNOP,
146 		"ZS",
147 
148 STASG,	INAREG,
149 	SNAME|SOREG,	TANY,
150 	SCON,	TANY,
151 		NAREG,	RESC1,
152 		"ZS	movl	AR,A1\n",
153 
154 STASG,	INAREG,
155 	SNAME|SOREG,	TANY,
156 	SAREG,	TANY,
157 		0,	RRIGHT,
158 		"	pushl	AR\nZS	movl	(sp)+,AR\n",
159 
160 OPLOG,	FORCC,
161 	SAREG|AWD,	TWORD,
162 	SAREG|AWD,	TWORD,
163 		0,	RESCC,
164 		"	cmpl	AL,AR\nZP",
165 
166 OPLOG,	FORCC,
167 	AWD,		TUSHORT,
168 	SCON,	TANY,
169 		NAREG,	RESCC,
170 		"	movzwl	AL,A1\n	cmpw	A1,AR\nZP",
171 
172 OPLOG,	FORCC,
173 	SAREG|AWD,	TSHORT|TUSHORT,
174 	SCON,	TANY,
175 		0,	RESCC,
176 		"	cmpw	AL,ZZ\nZP",
177 
178 OPLOG,	FORCC,
179 	SAREG|AWD,	TSHORT,
180 	SAREG|AWD,	TSHORT,
181 		0,	RESCC,
182 		"	cmpw	AL,AR\nZP",
183 
184 OPLOG,	FORCC,
185 	SAREG|AWD,	TUSHORT,
186 	SAREG|AWD,	TUSHORT,
187 		0,	RESCC,
188 		"	cmpw	AL,AR\nZP",
189 
190 OPLOG,	FORCC,
191 	AWD,		TUCHAR,
192 	SCON,	 	TANY,
193 		NAREG,	RESCC,
194 		"	movzbl	AL,A1\n	cmpb	A1,AR\nZP",
195 
196 OPLOG,	FORCC,
197 	SAREG|AWD,	TCHAR|TUCHAR,
198 	SCON,	TANY,
199 		0,	RESCC,
200 		"	cmpb	AL,ZZ\nZP",
201 
202 OPLOG,	FORCC,
203 	SAREG|AWD,	TCHAR,
204 	SAREG|AWD,	TCHAR,
205 		0,	RESCC,
206 		"	cmpb	AL,AR\nZP",
207 
208 OPLOG,	FORCC,
209 	SAREG|AWD,	TUCHAR,
210 	SAREG|AWD,	TUCHAR,
211 		0,	RESCC,
212 		"	cmpb	AL,AR\nZP",
213 
214 OPLOG,	FORCC,
215 	SAREG|AWD,	TFLOAT,
216 	SAREG|AWD,	TFLOAT,
217 		0,	RESCC,
218 		"	cmpZL2	AL,AR\nZP",
219 
220 OPLOG,	FORCC,
221 	SZERO,		TDOUBLE,
222 	SAREG|AWD,	TDOUBLE,
223 		0,	RESCC,
224 		"	cmpf2	AL,AR\nZP",
225 
226 OPLOG,	FORCC,
227 	SAREG|AWD,	TDOUBLE,
228 	SAREG|AWD,	TDOUBLE,
229 		0,	RESCC,
230 		"	cmpZL2	AL,AR\nZP",
231 
232 CCODES,	INAREG|INTAREG,
233 	SANY,	TANY,
234 	SANY,	TANY,
235 		NAREG,	RESC1,
236 		"	movl	$1,A1\nZN",
237 
238 UNARY CALL,	INAREG|INTAREG,
239 	SCON,	TANY,
240 	SANY,	TANY,
241 		NAREG|NASL,	RESC1, /* should be register 0 */
242 		"	ZC,CL\n",
243 
244 UNARY CALL,	INAREG|INTAREG,
245 	SAREG,	TANY,
246 	SANY,	TANY,
247 		NAREG|NASL,	RESC1,	/* should be 0 */
248 		"	ZC,(AL)\n",
249 
250 UNARY CALL,	INAREG|INTAREG,
251 	SNAME,	TANY,
252 	SANY,	TANY,
253 		NAREG|NASL,	RESC1,	/* really reg 0 */
254 		"	ZC,*AL\n",
255 
256 UNARY CALL,	INAREG|INTAREG,
257 	SSOREG,	TANY,
258 	SANY,	TANY,
259 		NAREG|NASL,	RESC1,	/* really reg 0 */
260 		"	ZC,*AL\n",
261 
262 FORTCALL,	INAREG|INTAREG,
263 	SCON,	TANY,
264 	SAREG|AWD,	TFLOAT,
265 		NAREG|NASL|NASR,	RESC1,
266 		"	ldf	AR\n	CLf\n	stf	TA1\n",
267 
268 ASG OPSHFT,	INAREG|FOREFF|FORCC,
269 	SAREG|AWD,	TWORD,
270 	SAREG|SCON,	ANYFIXED,
271 		0,	RLEFT|RESCC,
272 		"	ZH	AR,AL,AL\n",
273 
274 ASG OPSHFT,	INAREG|FOREFF|FORCC,
275 	SAREG|AWD,	TWORD,
276 	AWD,	TCHAR|TUCHAR,
277 		0,	RLEFT|RESCC,
278 		"	ZH	AR,AL,AL\n",
279 
280 ASG OPSHFT,	INAREG|FOREFF|FORCC,
281 	SAREG|AWD,	TWORD,
282 	AWD,	ANYFIXED,
283 		NAREG,	RLEFT|RESCC,
284 		"	ZB	AR,A1\n	ZH	A1,AL,AL\n",
285 
286 OPSHFT,	INAREG|INTAREG|FORCC,
287 	SAREG|AWD,	TWORD,
288 	SAREG|SCON,	ANYFIXED,
289 		NAREG|NASL|NASR,	RESC1|RESCC,
290 		"	ZH	AR,AL,A1\n",
291 
292 OPSHFT,	INAREG|INTAREG|FORCC,
293 	SAREG|AWD,	TWORD,
294 	AWD,	TCHAR|TUCHAR,
295 		NAREG|NASL|NASR,	RESC1|RESCC,
296 		"	ZH	AR,AL,A1\n",
297 
298 OPSHFT,	INAREG|INTAREG|FORCC,
299 	SAREG|AWD,	TWORD,
300 	AWD,	ANYFIXED,
301 		NAREG|NASR,	RESC1|RESCC,
302 		"	ZB	AR,A1\n	ZH	A1,AL,A1\n",
303 
304 INCR,	FOREFF,
305 	AWD,	TWORD,
306 	SCON,	TANY,
307 		0,	RLEFT,
308 		"	ZE\n",
309 
310 DECR,	FOREFF,
311 	AWD,	TWORD,
312 	SCON,	TANY,
313 		0,	RLEFT,
314 		"	ZE\n",
315 
316 INCR,	FOREFF,
317 	SAREG,	TWORD,
318 	SCON,	TANY,
319 		0,	RLEFT,
320 		"	ZE\n",
321 
322 DECR,	FOREFF,
323 	SAREG,	TWORD,
324 	SCON,	TANY,
325 		0,	RLEFT,
326 		"	ZE\n",
327 
328 /* jwf INCR and DECR for SAREG TCHAR|TSHORT matched by ASG PLUS etc */
329 
330 INCR,	INAREG|INTAREG,
331 	AWD,	TANY,
332 	SCON,	TANY,
333 		NAREG,	RESC1,
334 		"	ZD\n",
335 
336 DECR,	INAREG|INTAREG,
337 	AWD,	TANY,
338 	SCON,	TANY,
339 		NAREG,	RESC1,
340 		"	ZD\n",
341 
342 INCR,	INAREG|INTAREG,
343 	SAREG,	TWORD,
344 	SCON,	TANY,
345 		NAREG,	RESC1,
346 		"	ZD\n",
347 
348 DECR,	INAREG|INTAREG,
349 	SAREG,	TWORD,
350 	SCON,	TANY,
351 		NAREG,	RESC1,
352 		"	ZD\n",
353 
354 ASSIGN,	INAREG|FOREFF|FORCC,
355 	SIREG,	TDOUBLE,
356 	SZERO,	TANY,
357 		0,	RLEFT|RESCC,
358 		"	cvld	$0\n	std	AL\n",
359 
360 ASSIGN,	INAREG|FOREFF|FORCC,
361 	SAREG|SNAME|SOREG,	TDOUBLE,
362 	SZERO,	TANY,
363 		0,	RLEFT|RESCC,
364 		"	clrl	UL\n	clrl	AL\n",
365 
366 ASSIGN,	INAREG|FOREFF|FORCC,
367 	SAREG|AWD,	TDOUBLE,
368 	SIREG,	TDOUBLE,
369 		0,	RLEFT|RRIGHT|RESCC,
370 		"	ldd	AR\n	std	AL\n",
371 
372 ASSIGN,	INAREG|FOREFF|FORCC,
373 	SIREG,	TDOUBLE,
374 	SAREG|AWD,	TDOUBLE,
375 		0,	RLEFT|RRIGHT|RESCC,
376 		"	ldd	AR\n	std	AL\n",
377 
378 ASSIGN,	INAREG|FOREFF|FORCC,
379 	SAREG|SNAME|SOREG,	TDOUBLE,
380 	SAREG|SNAME|SOREG,	TDOUBLE,
381 		0,	RLEFT|RRIGHT|RESCC,
382 		"	movl	UR,UL\n	movl	AR,AL\n",
383 
384 ASSIGN,	INAREG|FOREFF|FORCC,
385 	SAREG|AWD,	TFLOAT,
386 	SZERO,	TANY,
387 		0,	RLEFT|RESCC,
388 		"	clrl	TAL\n",
389 
390 ASSIGN,	INAREG|FOREFF|FORCC,
391 	SAREG|AWD,	TFLOAT,
392 	SAREG|AWD,	TFLOAT,
393 		0,	RLEFT|RRIGHT|RESCC,
394 		"	movl	AR,TAL\n",
395 
396 ASSIGN, INAREG|FOREFF|FORCC,
397 	SAREG|AWD,	TUNSIGNED,
398 	SAREG|AWD,	TFLOAT|TDOUBLE,
399 		0,	RLEFT,
400 		"	ZW\n",
401 
402 ASSIGN, INAREG|FOREFF|FORCC,
403 	SAREG|AWD,	TFLOAT|TDOUBLE,
404 	SAREG|AWD,	TUNSIGNED,
405 		0,	RLEFT,
406 		"	ZY\n",
407 
408 ASSIGN,	INAREG|FOREFF|FORCC,
409 	SAREG|AWD,	ANYFIXED,
410 	SAREG|AWD,	ANYFIXED,
411 		0,	RLEFT|RRIGHT|RESCC,
412 		"	ZU\n",
413 
414 ASSIGN,	INAREG|FOREFF,
415 	SFLD,	TANY,
416 	SZERO,	TANY,
417 		0,	RRIGHT,
418 		"	andl2	N,AL\n",
419 
420 ASSIGN,	FOREFF,
421 	SFLD,	TANY,
422 	SCON,	TANY,
423 		0,	RNOP,
424 		"	andl2	N,AL\n	orl2	ZF,AL\n",
425 
426 ASSIGN,	INAREG,
427 	SFLD,	TANY,
428 	SCON,	TANY,
429 		NAREG,	RESC1,
430 		"	andl2	N,AL\n	orl2	ZF,AL\n	ZI\n",
431 
432 ASSIGN,	FOREFF,
433 	SFLD,	TANY,
434 	SAREG|AWD,	TWORD,
435 		NAREG|NASR,	RNOP,
436 		"	shll	$H,AR,A1\n	andl2	M,A1\n	andl2	N,AL\n\
437 	orl2	A1,AL\n",
438 
439 ASSIGN,	INAREG,
440 	SFLD,	TANY,
441 	SAREG|AWD,	TWORD,
442 		NAREG,	RESC1,
443 		"	shll	$H,AR,A1\n	andl2	M,A1\n	andl2	N,AL\n\
444 	orl2	A1,AL\n	ZI\n",
445 
446 /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
447 UNARY MUL,	FOREFF,
448 	SCC,	TANY,
449 	SCC,	TANY,
450 		0,	RNULL,
451 		"	help help help\n",
452 
453 REG,	INTEMP,
454 	SANY,	TANY,
455 	SAREG,	TDOUBLE,
456 		2*NTEMP,	RESC1,
457 		"	movl	UR,U1\n	movl	AR,A1\n",
458 
459 REG,	INTEMP,
460 	SANY,	TANY,
461 	SAREG,	TANY,
462 		NTEMP,	RESC1,
463 		"	movl	AR,A1\n",
464 
465 REG,	FORARG,
466 	SANY,	TANY,
467 	SAREG,	TFLOAT,
468 		0,	RNULL,
469 		"	pushl	$0\n	pushl	AR\n",
470 
471 REG,	FORARG,
472 	SANY,	TANY,
473 	SAREG,	TDOUBLE,
474 		0,	RNULL,
475 		"	pushl	UR\n	pushl	AR\n",
476 
477 OPLEAF,	FOREFF,
478 	SANY,	TANY,
479 	SAREG|AWD,	TANY,
480 		0,	RLEFT,
481 		"",
482 
483 OPLTYPE,	INAREG|INTAREG,
484 	SANY,	TANY,
485 	SZERO,	TDOUBLE,
486 		NAREG|NASR,	RESC1,
487 		"	clrl	U1\n	clrl	A1\n",
488 
489 OPLTYPE,	INAREG|INTAREG,
490 	SANY,	TANY,
491 	SIREG,	TDOUBLE,
492 		NAREG|NASR,	RESC1,
493 		"	ldd	AR\n	std	A1\n",
494 
495 OPLTYPE,	INAREG|INTAREG,
496 	SANY,	TANY,
497 	SAREG|SNAME|SOREG|SCON,	TDOUBLE,
498 		NAREG,		RESC1,
499 		"	movl	AR,A1\n	movl	UR,U1\n",
500 
501 OPLTYPE,	INAREG|INTAREG,
502 	SANY,	TANY,
503 	SZERO,	TANY,
504 		NAREG|NASR,	RESC1,
505 		"	clrl	TA1\n",
506 
507 OPLTYPE,	INAREG|INTAREG,
508 	SANY,	TANY,
509 	SAREG|AWD,	TFLOAT,
510 		NAREG|NASR,	RESC1,
511 		"	movl	AR,TA1\n",
512 
513 OPLTYPE,	INAREG|INTAREG,
514 	SANY,	TANY,
515 	SANY,	ANYFIXED,
516 		NAREG|NASR,	RESC1,
517 		"	ZU\n",
518 
519 OPLTYPE,	FORCC,
520 	SANY,	TANY,
521 	SIREG,	TDOUBLE,
522 		0,	RESCC,
523 		"	ldd	AR\n	tstd\n",
524 
525 OPLTYPE,	FORCC,
526 	SANY,	TANY,
527 	SAREG|AWD,	TFLOAT,
528 		0,	RESCC,
529 		"	ldf	AR\n	tstf\n",
530 
531 OPLTYPE,	FORCC,
532 	SANY,	TANY,
533 	SAREG|AWD,	TDOUBLE,
534 		0,	RESCC,
535 		"	ldd	AR\n	tstd\n",
536 
537 OPLTYPE,	FORCC,
538 	SANY,	TANY,
539 	SANY,	ANYFIXED,
540 		0,	RESCC,
541 		"	tstZR	AR\n",
542 
543 OPLTYPE,	FORARG,
544 	SANY,	TANY,
545 	SANY,	TWORD,
546 		0,	RNULL,
547 		"	pushl	AR\n",
548 
549 OPLTYPE,	FORARG,
550 	SANY,	TANY,
551 	SANY,	TCHAR|TSHORT,
552 		0,	RNULL,
553 		"	pushZR	AR\n",
554 
555 OPLTYPE,	FORARG,
556 	SANY,	TANY,
557 	SANY,	TUCHAR|TUSHORT,
558 		0,	RNULL,
559 		"	movzZRl	AR,-(sp)\n",
560 
561 OPLTYPE,	FORARG,
562 	SANY,	TANY,
563 	SZERO,	TFLOAT|TDOUBLE,
564 		0,	RNULL,
565 		"	pushl	$0\n	pushl	$0\n",
566 
567 OPLTYPE,	FORARG,
568 	SANY,	TANY,
569 	SIREG,	TDOUBLE,
570 		0,	RNULL,
571 		"	ldd	AR\n	pushd\n",
572 
573 OPLTYPE,	FORARG,
574 	SANY,	TANY,
575 	SAREG|AWD,	TDOUBLE,
576 		0,	RNULL,
577 		"	pushl	UR\n	pushl	AR\n",
578 
579 OPLTYPE,	FORARG,
580 	SANY,	TANY,
581 	SAREG|AWD,	TFLOAT,
582 		0,	RNULL,
583 		"	pushl	$0\n	pushl	AR\n",
584 
585 UNARY MINUS,	INAREG|INTAREG|FORCC,
586 	SAREG|AWD,	ANYSIGNED|TUNSIGNED,
587 	SANY,	TANY,
588 		NAREG|NASL,	RESC1|RESCC,
589 		"	mnegZL	AL,A1\n",
590 
591 UNARY MINUS,	INAREG|INTAREG|FORCC,
592 	SAREG|AWD,	TFLOAT|TDOUBLE,
593 	SANY,	TANY,
594 		NAREG|NASL,	RESC1|RESCC,
595 		"	lnZL	AL\n	stZL	TA1\n",
596 
597 COMPL,	INAREG|INTAREG|FORCC,
598 	SAREG|AWD,	ANYSIGNED|TUNSIGNED,
599 	SANY,	TANY,
600 		NAREG|NASL,	RESC1|RESCC,
601 		"	mcomZL	AL,A1\n",
602 
603 COMPL,	INAREG|INTAREG|FORCC,
604 	SAREG|AWD,	ANYFIXED,
605 	SANY,	TANY,
606 		NAREG|NASL,	RESC1|RESCC,
607 		"	cvtZLl	AL,A1\n	mcoml	A1,A1\n",
608 
609 AND,	FORCC,
610 	SAREG|AWD,	TWORD,
611 	SAREG|AWD,	TWORD,
612 		0,	RESCC,
613 		"	bitl	AR,AL\n",
614 
615 AND,	FORCC,
616 	SAREG|AWD,	TSHORT|TUSHORT,
617 	SSCON,	TWORD,
618 		0,	RESCC,
619 		"	bitw	AR,AL\n",
620 
621 AND,	FORCC,
622 	SAREG|AWD,	TSHORT|TUSHORT,
623 	SAREG|AWD,	TSHORT|TUSHORT,
624 		0,	RESCC,
625 		"	bitw	AR,AL\n",
626 
627 AND,	FORCC,
628 	SAREG|AWD,	TCHAR|TUCHAR,
629 	SCCON,	TWORD,
630 		0,	RESCC,
631 		"	bitb	AR,AL\n",
632 
633 AND,	FORCC,
634 	SAREG|AWD,	TCHAR|TUCHAR,
635 	SAREG|AWD,	TCHAR|TUCHAR,
636 		0,	RESCC,
637 		"	bitb	AR,AL\n",
638 
639 ASG DIV,	INAREG|FOREFF|FORCC, /* should have been done in mip */
640 	SAREG|AWD,	ANYFIXED,
641 	SONE,	TWORD,
642 		0,	RLEFT|RESCC,
643 		"	tstZL	AL\n",
644 
645 ASG DIV,	INAREG|FOREFF|FORCC,
646 	SAREG|AWD,	TUCHAR|TUSHORT,
647 	SAREG|AWD,	TUCHAR|TUSHORT,
648 		2*NAREG,	RLEFT|RESC1|RESCC,
649 		"ZX	OL2	A2,A1\n	cvtlZL	A1,AL\n",
650 
651 ASG DIV,	INAREG|FOREFF|FORCC,
652 	SAREG|AWD,	TWORD,
653 	SAREG|AWD,	TUNSIGNED,
654 		3*NAREG|NEVEN,	RLEFT|RESCC,
655 		"ZM	OE	AR,A1,A2,A3\n	movl	A2,AL\n",
656 
657 DIV,	INAREG|INTAREG|FORCC,
658 	SAREG|AWD,	TUCHAR|TUSHORT,
659 	SAREG|AWD,	TUCHAR|TUSHORT,
660 		2*NAREG,	RESC1|RESCC,
661 		"ZX	OL2	A2,A1\n",
662 
663 DIV,	INAREG|INTAREG|FORCC,
664 	SAREG|AWD,	TWORD,
665 	SAREG|AWD,	TUNSIGNED,
666 		3*NAREG|NEVEN,	RESC2|RESCC,
667 		"ZM	OE	AR,A1,A2,A3\n",
668 
669 ASG MOD,	INAREG|FOREFF,
670 	SAREG|AWD,	ANYFIXED,
671 	SONE,	TWORD,
672 		0,	RLEFT,
673 		"	clrZL	AL\n",
674 
675 MOD,	INAREG|INTAREG,
676 	STAREG,	TWORD,
677 	SONE,	TWORD,
678 		0,	RLEFT,
679 		"	clrl	AL\n",
680 
681 MOD,	INAREG|INTAREG,
682 	SAREG|AWD,	ANYFIXED,
683 	SONE,	TWORD,
684 		0,	RESC1,
685 		"	clrl	A1\n",
686 
687 ASG MOD,	INAREG|FOREFF,
688 	SAREG|AWD,	TWORD,
689 	SAREG|AWD,	TWORD,
690 		3*NAREG|NEVEN,	RLEFT,
691 		"ZM	OE	AR,A1,A2,A3\n	movl	A3,AL\n",
692 
693 MOD,	INAREG|INTAREG,
694 	SAREG|AWD,	TWORD,
695 	SAREG|AWD,	TWORD,
696 		3*NAREG|NEVEN,	RESC3,
697 		"ZM	OE	AR,A1,A2,A3\n",
698 
699 ASG MUL,	INAREG|FOREFF|FORCC,
700 	SAREG|AWD,	TCHAR|TUCHAR,
701 	SAREG|AWD,	TCHAR|TUCHAR,
702 		2*NAREG,	RLEFT|RESCC,
703 		"ZX	OL2	A2,A1\n	cvtlb	A1,AL\n",
704 
705 ASG MUL,	INAREG|FOREFF|FORCC,
706 	SAREG|AWD,	TUNSIGNED,
707 	SAREG|AWD,	TUNSIGNED|TINT,
708 		NAREG|NEVEN,	RLEFT|RESCC,
709 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
710 
711 ASG MUL,	INAREG|FOREFF|FORCC,
712 	SAREG|AWD,	TUNSIGNED|TINT,
713 	SAREG|AWD,	TUNSIGNED,
714 		NAREG|NEVEN,	RLEFT|RESCC,
715 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
716 
717 ASG OPMUL,	INAREG|FOREFF|FORCC,
718 	SAREG|AWD,	TWORD,
719 	SAREG|AWD,	TWORD,
720 		0,	RLEFT|RESCC,
721 		"	OL2	AR,AL\n",
722 
723 MUL,	INAREG|INTAREG|FORCC,
724 	STAREG,		TUNSIGNED,
725 	SAREG|AWD,	TUNSIGNED|TINT,
726 		NAREG|NEVEN,	RLEFT|RESCC,
727 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
728 
729 MUL,	INAREG|INTAREG|FORCC,
730 	STAREG,		TUNSIGNED|TINT,
731 	SAREG|AWD,	TUNSIGNED,
732 		NAREG|NEVEN,	RLEFT|RESCC,
733 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
734 
735 OPMUL,	INAREG|INTAREG|FORCC,
736 	STAREG,		TWORD,
737 	SAREG|AWD,	TWORD,
738 		0,	RLEFT|RESCC,
739 		"	OL2	AR,AL\n",
740 
741 MUL,	INAREG|INTAREG|FORCC,
742 	SAREG|AWD,	TCHAR|TUCHAR,
743 	SAREG|AWD,	TCHAR|TUCHAR,
744 		2*NAREG,	RESC1|RESCC,
745 		"ZX	mull2	A2,A1\n",
746 
747 MUL,	INAREG|INTAREG|FORCC,
748 	SAREG|AWD,	TUNSIGNED,
749 	SAREG|AWD,	TUNSIGNED|TINT,
750 		NAREG|NEVEN,	RESC1|RESCC,
751 		"	emul	AR,AL,$0,A1\n	movl	U1,A1\n",
752 
753 MUL,	INAREG|INTAREG|FORCC,
754 	SAREG|AWD,	TUNSIGNED|TINT,
755 	SAREG|AWD,	TUNSIGNED,
756 		NAREG|NEVEN,	RESC1|RESCC,
757 		"	emul	AR,AL,$0,A1\n	movl	U1,A1\n",
758 
759 OPMUL,	INAREG|INTAREG|FORCC,
760 	SAREG|AWD,	TWORD,
761 	SAREG|AWD,	TWORD,
762 		NAREG|NASL|NASR,	RESC1|RESCC,
763 		"	OL3	AR,AL,A1\n",
764 
765 ASG PLUS,	INAREG|FOREFF|FORCC,
766 	SAREG,	TWORD,
767 	SONE,	TINT,
768 		0,	RLEFT|RESCC,
769 		"	incZL	AL\n",
770 
771 ASG PLUS,	INAREG|FOREFF|FORCC,
772 	AWD,	ANYFIXED,
773 	SONE,	TINT,
774 		0,	RLEFT|RESCC,
775 		"	incZL	AL\n",
776 
777 ASG MINUS,	INAREG|FOREFF|FORCC,
778 	SAREG,	TWORD,
779 	SONE,	TINT,
780 		0,	RLEFT|RESCC,
781 		"	decZL	AL\n",
782 
783 ASG MINUS,	INAREG|FOREFF|FORCC,
784 	AWD,	ANYFIXED,
785 	SONE,	TINT,
786 		0,	RLEFT|RESCC,
787 		"	decZL	AL\n",
788 
789 PLUS,	INAREG|INTAREG|FORCC,
790 	STAREG,	TWORD,
791 	SONE,	TWORD,
792 		0,	RLEFT|RESCC,
793 		"	incZL	AL\n",
794 
795 MINUS,	INAREG|INTAREG|FORCC,
796 	STAREG,	TWORD,
797 	SONE,	TWORD,
798 		0,	RLEFT|RESCC,
799 		"	decZL	AL\n",
800 
801 ASG OPSIMP,	INAREG|FOREFF|FORCC,
802 	SAREG|AWD,	TWORD,
803 	SAREG|AWD,	TWORD,
804 		0,	RLEFT|RESCC,
805 		"	OL2	AR,AL\n",
806 
807 ASG OPSIMP,	INAREG|FOREFF|FORCC,
808 	SAREG,	TWORD,
809 	SAREG,	TSHORT|TUSHORT|TCHAR|TUCHAR,
810 		0,	RLEFT|RESCC,
811 		"	OL2	AR,AL\n",
812 
813 ASG OPSIMP,	INAREG|FOREFF|FORCC,
814 	AWD,	TSHORT|TUSHORT,
815 	SAREG|AWD,	TSHORT|TUSHORT,
816 		0,	RLEFT|RESCC,
817 		"	OW2	AR,AL\n",
818 
819 ASG OPSIMP,	INAREG|FOREFF|FORCC,
820 	AWD,	TSHORT|TUSHORT,
821 	SSCON,	TWORD,
822 		0,	RLEFT|RESCC,
823 		"	OW2	AR,AL\n",
824 
825 ASG OPSIMP,	INAREG|FOREFF|FORCC,
826 	AWD,	TCHAR|TUCHAR,
827 	SAREG|AWD,	TCHAR|TUCHAR,
828 		0,	RLEFT|RESCC,
829 		"	OB2	AR,AL\n",
830 
831 ASG OPSIMP,	INAREG|FOREFF|FORCC,
832 	AWD,	TCHAR|TUCHAR,
833 	SCCON,	TWORD,
834 		0,	RLEFT|RESCC,
835 		"	OB2	AR,AL\n",
836 
837 OPSIMP,	INAREG|INTAREG|FORCC,
838 	STAREG,	ANYFIXED,
839 	SAREG|AWD,	TWORD,
840 		0,	RLEFT|RESCC,
841 		"	OL2	AR,AL\n",
842 
843 OPSIMP,	INAREG|INTAREG|FORCC,
844 	SAREG|AWD,	TWORD,
845 	SAREG|AWD,	TWORD,
846 		NAREG|NASL|NASR,	RESC1|RESCC,
847 		"	OL3	AR,AL,A1\n",
848 
849 ASG OPSIMP,	INAREG|FOREFF,
850 	SAREG|AWD,	TFLOAT|TDOUBLE,
851 	SZERO,	TANY,
852 		0,	RLEFT,
853 		"",
854 
855 ASG MUL,	INAREG|FOREFF|FORCC,
856 	SIREG,	TDOUBLE,
857 	SZERO,	TANY,
858 		0,	RLEFT|RESCC,
859 		"	cvld	$0\n	std	AL\n",
860 
861 ASG MUL,	INAREG|FOREFF|FORCC,
862 	SAREG|SNAME|SOREG,	TDOUBLE,
863 	SZERO,	TANY,
864 		0,	RLEFT|RESCC,
865 		"	clrl	UL\n	clrl	AL\n",
866 
867 ASG MUL,	INAREG|FOREFF|FORCC,
868 	SAREG|AWD,	TFLOAT,
869 	SZERO,	TANY,
870 		0,	RLEFT|RESCC,
871 		"	clrl	TAL\n",
872 
873 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
874 	SAREG|AWD,	TFLOAT,
875 	SAREG|AWD,	TFLOAT,
876 		0,	RLEFT|RESCC,
877 		"	ldf	AL\n	OF	AR\n	stf	TAL\n",
878 
879 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
880 	SAREG|AWD,	TDOUBLE,
881 	SAREG|AWD,	TDOUBLE,
882 		0,	RLEFT|RESCC,
883 		"	ldd	AL\n	OD	AR\n	std	AL\n",
884 
885 ASG OPFLOAT,	INAREG|FOREFF,
886 	SAREG|AWD,	ANYFIXED,
887 	SAREG|AWD,	TDOUBLE,
888 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
889 		"	ZG\n",
890 
891 OPSIMP,	INAREG|INTAREG,
892 	SAREG,	TFLOAT|TDOUBLE,
893 	SZERO,	TANY,
894 		0,	RLEFT,
895 #if defined(FORT) || defined(SPRECC)
896 		"T",
897 #else
898 		"",
899 #endif
900 
901 OPSIMP,	INAREG|INTAREG|FORCC,
902 	AWD,	TFLOAT,
903 	SZERO,	TANY,
904 		NAREG,	RESC1|RESCC,
905 		"	movl	AL,A1\n",
906 
907 OPSIMP,	INAREG|INTAREG|FORCC,
908 	AWD,	TDOUBLE,
909 	SZERO,	TANY,
910 		NAREG,	RESC1|RESCC,
911 		"	movl	UL,U1\n	movl	AL,A1\n",
912 
913 MUL,	INAREG|INTAREG|FORCC,
914 	SAREG|AWD,	TDOUBLE,
915 	SZERO,	TANY,
916 		NAREG|NASR,	RESC1|RESCC,
917 		"	clrl	U1\n	clrl	A1\n",
918 
919 MUL,	INAREG|INTAREG|FORCC,
920 	SAREG|AWD,	TFLOAT,
921 	SZERO,	TANY,
922 		NAREG|NASR,	RESC1|RESCC,
923 		"	clrl	TA1\n",
924 
925 OPFLOAT,	INAREG|INTAREG|FORCC,
926 	SAREG|AWD,	TFLOAT,
927 	SAREG|AWD,	TFLOAT,
928 		NAREG|NASL|NASR,	RESC1|RESCC,
929 		"	ldf	AL\n	OF	AR\n	stf	TA1\n",
930 
931 OPFLOAT,	INAREG|INTAREG|FORCC,
932 	SZERO,		TANY,
933 	SAREG|AWD,	TDOUBLE,
934 		NAREG,	RESC1|RESCC,
935 		"\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n",
936 
937 OPFLOAT,	INAREG|INTAREG|FORCC,
938 	SAREG|AWD,	TDOUBLE,
939 	SAREG|AWD,	TDOUBLE,
940 		NAREG|NASL|NASR,	RESC1|RESCC,
941 		"	ldd	AL\n	OD	AR\n	std	A1\n",
942 
943 	/* Default actions for hard trees ... */
944 
945 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
946 
947 UNARY MUL, DF( UNARY MUL ),
948 
949 INCR, DF(INCR),
950 
951 DECR, DF(INCR),
952 
953 ASSIGN, DF(ASSIGN),
954 
955 STASG, DF(STASG),
956 
957 FLD, DF(FLD),
958 
959 OPLEAF, DF(NAME),
960 
961 OPLOG,	FORCC,
962 	SANY,	TANY,
963 	SANY,	TANY,
964 		REWRITE,	BITYPE,
965 		"",
966 
967 OPLOG,	DF(NOT),
968 
969 COMOP, DF(COMOP),
970 
971 INIT, DF(INIT),
972 
973 OPUNARY, DF(UNARY MINUS),
974 
975 
976 ASG OPANY, DF(ASG PLUS),
977 
978 OPANY, DF(BITYPE),
979 
980 FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
981