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