xref: /csrg-svn/old/pcc/ccom.tahoe/table.c (revision 32900)
1 #ifndef lint
2 static char sccsid[] = "@(#)table.c	1.8 (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,	FOREFF,
403 	SFLD,	TANY,
404 	SCON,	TANY,
405 		0,	RNOP,
406 		"	andl2	N,AL\n	orl2	ZF,AL\n",
407 
408 ASSIGN,	FOREFF,
409 	SFLD,	TANY,
410 	SAREG|AWD,	TWORD,
411 		NAREG|NASL,	RNOP,
412 		"	shll	$H,AR,A1\n	andl2	M,A1\n	andl2	N,AL\n\
413 	orl2	A1,AL\n",
414 
415 ASSIGN,	INAREG,
416 	SFLD,	TANY,
417 	SAREG|AWD,	TWORD,
418 		NAREG|NASL,	RESC1,
419 		"	shll	$H,AR,A1\n	andl2	M,A1\n	andl2	N,AL\n\
420 	orl2	A1,AL\n	shrl	$H,A1,A1\n",
421 
422 /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
423 UNARY MUL,	FOREFF,
424 	SCC,	TANY,
425 	SCC,	TANY,
426 		0,	RNULL,
427 		"	help help help\n",
428 
429 REG,	INTEMP,
430 	SANY,	TANY,
431 	SAREG,	TDOUBLE,
432 		2*NTEMP,	RESC1,
433 		"	movl	UR,U1\n	movl	AR,A1\n",
434 
435 REG,	INTEMP,
436 	SANY,	TANY,
437 	SAREG,	TANY,
438 		NTEMP,	RESC1,
439 		"	movl	AR,A1\n",
440 
441 REG,	FORARG,
442 	SANY,	TANY,
443 	SAREG,	TFLOAT,
444 		0,	RNULL,
445 		"	pushl	$0\n	pushl	AR\n",
446 
447 REG,	FORARG,
448 	SANY,	TANY,
449 	SAREG,	TDOUBLE,
450 		0,	RNULL,
451 		"	pushl	UR\n	pushl	AR\n",
452 
453 OPLEAF,	FOREFF,
454 	SANY,	TANY,
455 	SAREG|AWD,	TANY,
456 		0,	RLEFT,
457 		"",
458 
459 OPLTYPE,	INAREG|INTAREG,
460 	SANY,	TANY,
461 	SZERO,	TDOUBLE,
462 		NAREG|NASR,	RESC1,
463 		"	clrl	U1\n	clrl	A1\n",
464 
465 OPLTYPE,	INAREG|INTAREG,
466 	SANY,	TANY,
467 	SIREG,	TDOUBLE,
468 		NAREG|NASR,	RESC1,
469 		"	ldd	AR\n	std	A1\n",
470 
471 OPLTYPE,	INAREG|INTAREG,
472 	SANY,	TANY,
473 	SAREG|SNAME|SOREG|SCON,	TDOUBLE,
474 		NAREG,		RESC1,
475 		"	movl	AR,A1\n	movl	UR,U1\n",
476 
477 OPLTYPE,	INAREG|INTAREG,
478 	SANY,	TANY,
479 	SZERO,	TANY,
480 		NAREG|NASR,	RESC1,
481 		"	clrl	TA1\n",
482 
483 OPLTYPE,	INAREG|INTAREG,
484 	SANY,	TANY,
485 	SAREG|AWD,	TFLOAT,
486 		NAREG|NASR,	RESC1,
487 		"	movl	AR,TA1\n",
488 
489 OPLTYPE,	INAREG|INTAREG,
490 	SANY,	TANY,
491 	SANY,	ANYFIXED,
492 		NAREG|NASR,	RESC1,
493 		"	ZU\n",
494 
495 OPLTYPE,	FORCC,
496 	SANY,	TANY,
497 	SIREG,	TDOUBLE,
498 		0,	RESCC,
499 		"	ldd	AR\n	tstd\n",
500 
501 OPLTYPE,	FORCC,
502 	SANY,	TANY,
503 	SAREG|AWD,	TFLOAT,
504 		0,	RESCC,
505 		"	ldf	AR\n	tstf\n",
506 
507 OPLTYPE,	FORCC,
508 	SANY,	TANY,
509 	SAREG|AWD,	TDOUBLE,
510 		0,	RESCC,
511 		"	ldd	AR\n	tstd\n",
512 
513 OPLTYPE,	FORCC,
514 	SANY,	TANY,
515 	SANY,	ANYFIXED,
516 		0,	RESCC,
517 		"	tstZR	AR\n",
518 
519 OPLTYPE,	FORARG,
520 	SANY,	TANY,
521 	SANY,	TWORD,
522 		0,	RNULL,
523 		"	pushl	AR\n",
524 
525 OPLTYPE,	FORARG,
526 	SANY,	TANY,
527 	SANY,	TCHAR|TSHORT,
528 		0,	RNULL,
529 		"	pushZR	AR\n",
530 
531 OPLTYPE,	FORARG,
532 	SANY,	TANY,
533 	SANY,	TUCHAR|TUSHORT,
534 		0,	RNULL,
535 		"	movzZRl	AR,-(sp)\n",
536 
537 OPLTYPE,	FORARG,
538 	SANY,	TANY,
539 	SZERO,	TFLOAT|TDOUBLE,
540 		0,	RNULL,
541 		"	pushl	$0\n	pushl	$0\n",
542 
543 OPLTYPE,	FORARG,
544 	SANY,	TANY,
545 	SIREG,	TDOUBLE,
546 		0,	RNULL,
547 		"	ldd	AR\n	pushd\n",
548 
549 OPLTYPE,	FORARG,
550 	SANY,	TANY,
551 	SAREG|AWD,	TDOUBLE,
552 		0,	RNULL,
553 		"	pushl	UR\n	pushl	AR\n",
554 
555 OPLTYPE,	FORARG,
556 	SANY,	TANY,
557 	SAREG|AWD,	TFLOAT,
558 		0,	RNULL,
559 		"	pushl	$0\n	pushl	AR\n",
560 
561 UNARY MINUS,	INAREG|INTAREG|FORCC,
562 	SAREG|AWD,	ANYSIGNED|TUNSIGNED,
563 	SANY,	TANY,
564 		NAREG|NASL,	RESC1|RESCC,
565 		"	mnegZL	AL,A1\n",
566 
567 UNARY MINUS,	INAREG|INTAREG|FORCC,
568 	SAREG|AWD,	TFLOAT|TDOUBLE,
569 	SANY,	TANY,
570 		NAREG|NASL,	RESC1|RESCC,
571 		"	lnZL	AL\n	stZL	TA1\n",
572 
573 COMPL,	INAREG|INTAREG|FORCC,
574 	SAREG|AWD,	ANYSIGNED|TUNSIGNED,
575 	SANY,	TANY,
576 		NAREG|NASL,	RESC1|RESCC,
577 		"	mcomZL	AL,A1\n",
578 
579 COMPL,	INAREG|INTAREG|FORCC,
580 	SAREG|AWD,	ANYFIXED,
581 	SANY,	TANY,
582 		NAREG|NASL,	RESC1|RESCC,
583 		"	cvtZLl	AL,A1\n	mcoml	A1,A1\n",
584 
585 AND,	FORCC,
586 	SAREG|AWD,	TWORD,
587 	SAREG|AWD,	TWORD,
588 		0,	RESCC,
589 		"	bitl	AR,AL\n",
590 
591 AND,	FORCC,
592 	SAREG|AWD,	TSHORT|TUSHORT,
593 	SSCON,	TWORD,
594 		0,	RESCC,
595 		"	bitw	AR,AL\n",
596 
597 AND,	FORCC,
598 	SAREG|AWD,	TSHORT|TUSHORT,
599 	SAREG|AWD,	TSHORT|TUSHORT,
600 		0,	RESCC,
601 		"	bitw	AR,AL\n",
602 
603 AND,	FORCC,
604 	SAREG|AWD,	TCHAR|TUCHAR,
605 	SCCON,	TWORD,
606 		0,	RESCC,
607 		"	bitb	AR,AL\n",
608 
609 AND,	FORCC,
610 	SAREG|AWD,	TCHAR|TUCHAR,
611 	SAREG|AWD,	TCHAR|TUCHAR,
612 		0,	RESCC,
613 		"	bitb	AR,AL\n",
614 
615 ASG DIV,	INAREG|FOREFF|FORCC, /* should have been done in mip */
616 	SAREG|AWD,	ANYFIXED,
617 	SONE,	TWORD,
618 		0,	RLEFT|RESCC,
619 		"	tstZL	AL\n",
620 
621 ASG DIV,	INAREG|FOREFF|FORCC,
622 	SAREG|AWD,	TUCHAR|TUSHORT,
623 	SAREG|AWD,	TUCHAR|TUSHORT,
624 		2*NAREG,	RLEFT|RESC1|RESCC,
625 		"ZX	OL2	A2,A1\n	cvtlZL	A1,AL\n",
626 
627 ASG DIV,	INAREG|FOREFF|FORCC,
628 	SAREG|AWD,	TWORD,
629 	SAREG|AWD,	TUNSIGNED,
630 		3*NAREG|NEVEN,	RLEFT|RESCC,
631 		"ZM	OE	AR,A1,A2,A3\n	movl	A2,AL\n",
632 
633 DIV,	INAREG|INTAREG|FORCC,
634 	SAREG|AWD,	TUCHAR|TUSHORT,
635 	SAREG|AWD,	TUCHAR|TUSHORT,
636 		2*NAREG,	RESC1|RESCC,
637 		"ZX	OL2	A2,A1\n",
638 
639 DIV,	INAREG|INTAREG|FORCC,
640 	SAREG|AWD,	TWORD,
641 	SAREG|AWD,	TUNSIGNED,
642 		3*NAREG|NEVEN,	RESC2|RESCC,
643 		"ZM	OE	AR,A1,A2,A3\n",
644 
645 ASG MOD,	INAREG|FOREFF,
646 	SAREG|AWD,	ANYFIXED,
647 	SONE,	TWORD,
648 		0,	RLEFT,
649 		"	clrZL	AL\n",
650 
651 MOD,	INAREG|INTAREG,
652 	STAREG,	TWORD,
653 	SONE,	TWORD,
654 		0,	RLEFT,
655 		"	clrl	AL\n",
656 
657 MOD,	INAREG|INTAREG,
658 	SAREG|AWD,	ANYFIXED,
659 	SONE,	TWORD,
660 		0,	RESC1,
661 		"	clrl	A1\n",
662 
663 ASG MOD,	INAREG|FOREFF,
664 	SAREG|AWD,	TWORD,
665 	SAREG|AWD,	TWORD,
666 		3*NAREG|NEVEN,	RLEFT,
667 		"ZM	OE	AR,A1,A2,A3\n	movl	A3,AL\n",
668 
669 MOD,	INAREG|INTAREG,
670 	SAREG|AWD,	TWORD,
671 	SAREG|AWD,	TWORD,
672 		3*NAREG|NEVEN,	RESC3,
673 		"ZM	OE	AR,A1,A2,A3\n",
674 
675 ASG MUL,	INAREG|FOREFF|FORCC,
676 	SAREG|AWD,	TCHAR|TUCHAR,
677 	SAREG|AWD,	TCHAR|TUCHAR,
678 		2*NAREG,	RLEFT|RESCC,
679 		"ZX	OL2	A2,A1\n	cvtlb	A1,AL\n",
680 
681 ASG MUL,	INAREG|FOREFF|FORCC,
682 	SAREG|AWD,	TUNSIGNED,
683 	SAREG|AWD,	TUNSIGNED|TINT,
684 		NAREG|NEVEN,	RLEFT|RESCC,
685 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
686 
687 ASG MUL,	INAREG|FOREFF|FORCC,
688 	SAREG|AWD,	TUNSIGNED|TINT,
689 	SAREG|AWD,	TUNSIGNED,
690 		NAREG|NEVEN,	RLEFT|RESCC,
691 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
692 
693 ASG OPMUL,	INAREG|FOREFF|FORCC,
694 	SAREG|AWD,	TWORD,
695 	SAREG|AWD,	TWORD,
696 		0,	RLEFT|RESCC,
697 		"	OL2	AR,AL\n",
698 
699 MUL,	INAREG|INTAREG|FORCC,
700 	STAREG,		TUNSIGNED,
701 	SAREG|AWD,	TUNSIGNED|TINT,
702 		NAREG|NEVEN,	RLEFT|RESCC,
703 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
704 
705 MUL,	INAREG|INTAREG|FORCC,
706 	STAREG,		TUNSIGNED|TINT,
707 	SAREG|AWD,	TUNSIGNED,
708 		NAREG|NEVEN,	RLEFT|RESCC,
709 		"	emul	AR,AL,$0,A1\n	movl	U1,AL\n",
710 
711 OPMUL,	INAREG|INTAREG|FORCC,
712 	STAREG,		TWORD,
713 	SAREG|AWD,	TWORD,
714 		0,	RLEFT|RESCC,
715 		"	OL2	AR,AL\n",
716 
717 MUL,	INAREG|INTAREG|FORCC,
718 	SAREG|AWD,	TCHAR|TUCHAR,
719 	SAREG|AWD,	TCHAR|TUCHAR,
720 		2*NAREG,	RESC1|RESCC,
721 		"ZX	mull2	A2,A1\n",
722 
723 MUL,	INAREG|INTAREG|FORCC,
724 	SAREG|AWD,	TUNSIGNED,
725 	SAREG|AWD,	TUNSIGNED|TINT,
726 		NAREG|NEVEN,	RESC1|RESCC,
727 		"	emul	AR,AL,$0,A1\n	movl	U1,A1\n",
728 
729 MUL,	INAREG|INTAREG|FORCC,
730 	SAREG|AWD,	TUNSIGNED|TINT,
731 	SAREG|AWD,	TUNSIGNED,
732 		NAREG|NEVEN,	RESC1|RESCC,
733 		"	emul	AR,AL,$0,A1\n	movl	U1,A1\n",
734 
735 OPMUL,	INAREG|INTAREG|FORCC,
736 	SAREG|AWD,	TWORD,
737 	SAREG|AWD,	TWORD,
738 		NAREG|NASL|NASR,	RESC1|RESCC,
739 		"	OL3	AR,AL,A1\n",
740 
741 ASG PLUS,	INAREG|FOREFF|FORCC,
742 	SAREG,	TWORD,
743 	SONE,	TINT,
744 		0,	RLEFT|RESCC,
745 		"	incZL	AL\n",
746 
747 ASG PLUS,	INAREG|FOREFF|FORCC,
748 	AWD,	ANYFIXED,
749 	SONE,	TINT,
750 		0,	RLEFT|RESCC,
751 		"	incZL	AL\n",
752 
753 ASG MINUS,	INAREG|FOREFF|FORCC,
754 	SAREG,	TWORD,
755 	SONE,	TINT,
756 		0,	RLEFT|RESCC,
757 		"	decZL	AL\n",
758 
759 ASG MINUS,	INAREG|FOREFF|FORCC,
760 	AWD,	ANYFIXED,
761 	SONE,	TINT,
762 		0,	RLEFT|RESCC,
763 		"	decZL	AL\n",
764 
765 PLUS,	INAREG|INTAREG|FORCC,
766 	STAREG,	TWORD,
767 	SONE,	TWORD,
768 		0,	RLEFT|RESCC,
769 		"	incZL	AL\n",
770 
771 MINUS,	INAREG|INTAREG|FORCC,
772 	STAREG,	TWORD,
773 	SONE,	TWORD,
774 		0,	RLEFT|RESCC,
775 		"	decZL	AL\n",
776 
777 ASG OPSIMP,	INAREG|FOREFF|FORCC,
778 	SAREG|AWD,	TWORD,
779 	SAREG|AWD,	TWORD,
780 		0,	RLEFT|RESCC,
781 		"	OL2	AR,AL\n",
782 
783 ASG OPSIMP,	INAREG|FOREFF|FORCC,
784 	SAREG,	TWORD,
785 	SAREG,	TSHORT|TUSHORT|TCHAR|TUCHAR,
786 		0,	RLEFT|RESCC,
787 		"	OL2	AR,AL\n",
788 
789 ASG OPSIMP,	INAREG|FOREFF|FORCC,
790 	AWD,	TSHORT|TUSHORT,
791 	SAREG|AWD,	TSHORT|TUSHORT,
792 		0,	RLEFT|RESCC,
793 		"	OW2	AR,AL\n",
794 
795 ASG OPSIMP,	INAREG|FOREFF|FORCC,
796 	AWD,	TSHORT|TUSHORT,
797 	SSCON,	TWORD,
798 		0,	RLEFT|RESCC,
799 		"	OW2	AR,AL\n",
800 
801 ASG OPSIMP,	INAREG|FOREFF|FORCC,
802 	AWD,	TCHAR|TUCHAR,
803 	SAREG|AWD,	TCHAR|TUCHAR,
804 		0,	RLEFT|RESCC,
805 		"	OB2	AR,AL\n",
806 
807 ASG OPSIMP,	INAREG|FOREFF|FORCC,
808 	AWD,	TCHAR|TUCHAR,
809 	SCCON,	TWORD,
810 		0,	RLEFT|RESCC,
811 		"	OB2	AR,AL\n",
812 
813 OPSIMP,	INAREG|INTAREG|FORCC,
814 	STAREG,	ANYFIXED,
815 	SAREG|AWD,	TWORD,
816 		0,	RLEFT|RESCC,
817 		"	OL2	AR,AL\n",
818 
819 OPSIMP,	INAREG|INTAREG|FORCC,
820 	SAREG|AWD,	TWORD,
821 	SAREG|AWD,	TWORD,
822 		NAREG|NASL|NASR,	RESC1|RESCC,
823 		"	OL3	AR,AL,A1\n",
824 
825 ASG OPSIMP,	INAREG|FOREFF,
826 	SAREG|AWD,	TFLOAT|TDOUBLE,
827 	SZERO,	TANY,
828 		0,	RLEFT,
829 		"",
830 
831 ASG MUL,	INAREG|FOREFF|FORCC,
832 	SIREG,	TDOUBLE,
833 	SZERO,	TANY,
834 		0,	RLEFT|RESCC,
835 		"	cvld	$0\n	std	AL\n",
836 
837 ASG MUL,	INAREG|FOREFF|FORCC,
838 	SAREG|SNAME|SOREG,	TDOUBLE,
839 	SZERO,	TANY,
840 		0,	RLEFT|RESCC,
841 		"	clrl	UL\n	clrl	AL\n",
842 
843 ASG MUL,	INAREG|FOREFF|FORCC,
844 	SAREG|AWD,	TFLOAT,
845 	SZERO,	TANY,
846 		0,	RLEFT|RESCC,
847 		"	clrl	TAL\n",
848 
849 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
850 	SAREG|AWD,	TFLOAT,
851 	SAREG|AWD,	TFLOAT,
852 		0,	RLEFT|RESCC,
853 		"	ldf	AL\n	OF	AR\n	stf	TAL\n",
854 
855 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
856 	SAREG|AWD,	TDOUBLE,
857 	SAREG|AWD,	TDOUBLE,
858 		0,	RLEFT|RESCC,
859 		"	ldd	AL\n	OD	AR\n	std	AL\n",
860 
861 ASG OPFLOAT,	INAREG|FOREFF,
862 	SAREG|AWD,	ANYFIXED,
863 	SAREG|AWD,	TDOUBLE,
864 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
865 		"	ZG\n",
866 
867 OPSIMP,	INAREG|INTAREG,
868 	SAREG,	TFLOAT|TDOUBLE,
869 	SZERO,	TANY,
870 		0,	RLEFT,
871 #if defined(FORT) || defined(SPRECC)
872 		"T",
873 #else
874 		"",
875 #endif
876 
877 OPSIMP,	INAREG|INTAREG|FORCC,
878 	AWD,	TFLOAT,
879 	SZERO,	TANY,
880 		NAREG,	RESC1|RESCC,
881 		"	movl	AL,A1\n",
882 
883 OPSIMP,	INAREG|INTAREG|FORCC,
884 	AWD,	TDOUBLE,
885 	SZERO,	TANY,
886 		NAREG,	RESC1|RESCC,
887 		"	movl	UL,U1\n	movl	AL,A1\n",
888 
889 MUL,	INAREG|INTAREG|FORCC,
890 	SAREG|AWD,	TDOUBLE,
891 	SZERO,	TANY,
892 		NAREG|NASR,	RESC1|RESCC,
893 		"	clrl	U1\n	clrl	A1\n",
894 
895 MUL,	INAREG|INTAREG|FORCC,
896 	SAREG|AWD,	TFLOAT,
897 	SZERO,	TANY,
898 		NAREG|NASR,	RESC1|RESCC,
899 		"	clrl	TA1\n",
900 
901 OPFLOAT,	INAREG|INTAREG|FORCC,
902 	SAREG|AWD,	TFLOAT,
903 	SAREG|AWD,	TFLOAT,
904 		NAREG|NASL|NASR,	RESC1|RESCC,
905 		"	ldf	AL\n	OF	AR\n	stf	TA1\n",
906 
907 OPFLOAT,	INAREG|INTAREG|FORCC,
908 	SZERO,		TANY,
909 	SAREG|AWD,	TDOUBLE,
910 		NAREG,	RESC1|RESCC,
911 		"\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n",
912 
913 OPFLOAT,	INAREG|INTAREG|FORCC,
914 	SAREG|AWD,	TDOUBLE,
915 	SAREG|AWD,	TDOUBLE,
916 		NAREG|NASL|NASR,	RESC1|RESCC,
917 		"	ldd	AL\n	OD	AR\n	std	A1\n",
918 
919 	/* Default actions for hard trees ... */
920 
921 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
922 
923 UNARY MUL, DF( UNARY MUL ),
924 
925 INCR, DF(INCR),
926 
927 DECR, DF(INCR),
928 
929 ASSIGN, DF(ASSIGN),
930 
931 STASG, DF(STASG),
932 
933 FLD, DF(FLD),
934 
935 OPLEAF, DF(NAME),
936 
937 OPLOG,	FORCC,
938 	SANY,	TANY,
939 	SANY,	TANY,
940 		REWRITE,	BITYPE,
941 		"",
942 
943 OPLOG,	DF(NOT),
944 
945 COMOP, DF(COMOP),
946 
947 INIT, DF(INIT),
948 
949 OPUNARY, DF(UNARY MINUS),
950 
951 
952 ASG OPANY, DF(ASG PLUS),
953 
954 OPANY, DF(BITYPE),
955 
956 FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
957