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