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