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