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