xref: /original-bsd/old/pcc/ccom.vax/table.c (revision 6d73dac9)
1 #ifndef lint
2 static char *sccsid ="@(#)table.c	1.13 (Berkeley) 01/08/86";
3 #endif lint
4 
5 # include "pass2.h"
6 
7 # define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
8 # define AWD SNAME|SOREG|SCON|STARNM|STARREG
9 /* tbl */
10 # define ANYSIGNED TPOINT|TINT|TLONG|TSHORT|TCHAR
11 # define ANYUSIGNED TUNSIGNED|TULONG|TUSHORT|TUCHAR
12 # define ANYFIXED ANYSIGNED|ANYUSIGNED
13 # define TWORD TINT|TUNSIGNED|TPOINT|TLONG|TULONG
14 # define NIAWD SNAME|SCON|STARNM
15 /* tbl */
16 
17 struct optab  table[] = {
18 
19 PCONV,	INAREG|INTAREG,
20 	SAREG|AWD,	TCHAR|TSHORT,
21 	SANY,	TPOINT,
22 		NAREG|NASL,	RESC1,
23 		"	cvtZLl	AL,A1\n",
24 
25 PCONV,	INAREG|INTAREG,
26 	SAREG|AWD,	TUCHAR|TUSHORT,
27 	SANY,	TPOINT,
28 		NAREG|NASL,	RESC1,
29 		"	movzZLl	AL,A1\n",
30 
31 	/* the following entry is to fix a problem with
32 	   the manner that the first pass handles the
33 	   type of a shift expression                 */
34 PCONV,	INAREG|INTAREG,
35 	SAREG|AWD,	TINT|TUNSIGNED,
36 	SANY,	TPOINT,
37 		NAREG|NASL,	RLEFT,
38 		"",
39 
40 #if defined(FORT) || defined(SPRECC)
41 SCONV,	INTAREG|FORCC,
42 	SAREG|AWD,	TDOUBLE,
43 	SANY,	TFLOAT,
44 		NAREG|NASL,	RESC1|RESCC,
45 		"	cvtdf	AL,A1\n",
46 
47 SCONV,	INTAREG|FORCC,
48 	SAREG|AWD,	ANYSIGNED,
49 	SANY,	TFLOAT,
50 		NAREG|NASL,	RESC1|RESCC,
51 		"	cvtZLf	AL,TA1\n",
52 
53 SCONV,	INTAREG|FORCC,
54 	SAREG|AWD,	TUCHAR|TUSHORT,
55 	SANY,	TFLOAT,
56 		NAREG|NASL,	RESC1|RESCC,
57 		"	movzZLl	AL,A1\n	cvtlf	A1,TA1\n",
58 #endif
59 
60 SCONV,	INTAREG|FORCC,
61 	SAREG|AWD,	TUCHAR|TUSHORT,
62 	SANY,	TFLOAT|TDOUBLE,
63 		NAREG|NASL,	RESC1|RESCC,
64 		"	movzZLl	AL,A1\n	cvtld	A1,A1\n",
65 
66 /* take care of redundant conversions introduced by reclaim() */
67 SCONV,	INTAREG,
68 	STAREG,	TWORD,
69 	SANY,	TWORD,
70 		0,	RLEFT,
71 		"",
72 
73 SCONV,	INTAREG|FORCC,
74 	SAREG|AWD,	TANY,
75 	SANY,	TANY,
76 		NAREG|NASL,	RESC1|RESCC,
77 		"	ZA\n",
78 
79 
80 INIT,	FOREFF,
81 	SCON,	TANY,
82 	SANY,	TWORD,
83 		0,	RNOP,
84 		"	.long	CL\n",
85 
86 INIT,	FOREFF,
87 	SCON,	TANY,
88 	SANY,	TSHORT|TUSHORT,
89 		0,	RNOP,
90 		"	.word	CL\n",
91 
92 INIT,	FOREFF,
93 	SCON,	TANY,
94 	SANY,	TCHAR|TUCHAR,
95 		0,	RNOP,
96 		"	.byte	CL\n",
97 
98 	/* for the use of fortran only */
99 
100 GOTO,	FOREFF,
101 	SCON,	TANY,
102 	SANY,	TANY,
103 		0,	RNOP,
104 		"	jbr	CL\n",
105 
106 GOTO,	FOREFF,
107 	SNAME|SOREG,	TANY,
108 	SANY,	TANY,
109 		0,	RNOP,
110 		"	jmp	*AL\n",
111 
112 GOTO,	FOREFF,
113 	SAREG,	TANY,
114 	SANY,	TANY,
115 		0,	RNOP,
116 		"	jmp	(AL)\n",
117 
118 STARG,	FORARG,
119 	SCON|SOREG,	TANY,
120 	SANY,	TANY,
121 		0,	RNULL,
122 		"	subl2	ZT,sp\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 FLD,	INAREG|INTAREG,
143 	SANY,	TANY,
144 	SFLD,	ANYSIGNED,
145 		NAREG|NASR,	RESC1,
146 		"	extv	$H,$S,AR,A1\n",
147 
148 FLD,	INAREG|INTAREG,
149 	SANY,	TANY,
150 	SFLD,	ANYUSIGNED,
151 		NAREG|NASR,	RESC1,
152 		"	extzv	$H,$S,AR,A1\n",
153 
154 FLD,	FORARG,
155 	SANY,	TANY,
156 	SFLD,	ANYSIGNED,
157 		0,	RNULL,
158 		"	extv	$H,$S,AR,-(sp)\n",
159 
160 FLD,	FORARG,
161 	SANY,	TANY,
162 	SFLD,	ANYUSIGNED,
163 		0,	RNULL,
164 		"	extzv	$H,$S,AR,-(sp)\n",
165 
166 OPLOG,	FORCC,
167 	SAREG|AWD,	TWORD,
168 	SAREG|AWD,	TWORD,
169 		0,	RESCC,
170 		"	cmpl	AL,AR\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 	SAREG|AWD,	TCHAR,
186 	SAREG|AWD,	TCHAR,
187 		0,	RESCC,
188 		"	cmpb	AL,AR\nZP",
189 
190 OPLOG,	FORCC,
191 	SAREG|AWD,	TUCHAR,
192 	SAREG|AWD,	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 OPLOG,	FORCC,
203 	SAREG|AWD,	TCHAR|TUCHAR,
204 	SCCON,	TANY,
205 		0,	RESCC,
206 		"	cmpb	AL,AR\nZP",
207 
208 OPLOG,	FORCC,
209 	SAREG|AWD,	TDOUBLE,
210 	SAREG|AWD,	TDOUBLE,
211 		0,	RESCC,
212 		"	cmpd	AL,AR\nZP",
213 
214 OPLOG,	FORCC,
215 	SAREG|AWD,	TDOUBLE,
216 	SAREG|AWD,	TFLOAT,
217 		NAREG|NASR,	RESCC,
218 		"	cvtfd	AR,A1\n	cmpd	AL,A1\nZP",
219 
220 OPLOG,	FORCC,
221 	SAREG|AWD,	TFLOAT,
222 	SAREG|AWD,	TDOUBLE,
223 		NAREG|NASL,	RESCC,
224 		"	cvtfd	AL,A1\n	cmpd	A1,AR\nZP",
225 
226 OPLOG,	FORCC,
227 	SAREG|AWD,	TFLOAT,
228 	SAREG|AWD,	TFLOAT,
229 		0,	RESCC,
230 		"	cmpf	AL,AR\nZP",
231 
232 CCODES,	INAREG|INTAREG,
233 	SANY,	TANY,
234 	SANY,	TANY,
235 		NAREG,	RESC1,
236 		"	movl	$1,A1\nZN",
237 
238 UNARY CALL,	INTAREG,
239 	SCON,	TANY,
240 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
241 		NAREG|NASL,	RESC1,
242 		"	calls	ZC,CL\n",
243 
244 UNARY CALL,	INTAREG,
245 	SAREG,	TANY,
246 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
247 		NAREG|NASL,	RESC1,	/* should be 0 */
248 		"	calls	ZC,(AL)\n",
249 
250 UNARY CALL,	INAREG|INTAREG,
251 	SNAME,	TANY,
252 	SANY,	TANY,
253 		NAREG|NASL,	RESC1,	/* really reg 0 */
254 		"	calls	ZC,*AL\n",
255 
256 UNARY CALL,	INAREG|INTAREG,
257 	SSOREG,	TANY,
258 	SANY,	TANY,
259 		NAREG|NASL,	RESC1,	/* really reg 0 */
260 		"	calls	ZC,*AL\n",
261 
262 ASG RS,	INAREG|FOREFF|FORCC,
263 	SAREG,	TWORD,
264 	SCON,	TINT,
265 		0,	RLEFT|RESCC,
266 		"	extzv	AR,ZU,AL,AL\n",
267 
268 ASG RS,	INAREG|FOREFF|FORCC,
269 	SAREG,	TWORD,
270 	SAREG,	ANYFIXED,
271 		NAREG,	RLEFT|RESCC,
272 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
273 
274 ASG RS,	INAREG|FOREFF|FORCC,
275 	SAREG,	TWORD,
276 	SAREG|AWD,	TWORD,
277 		NAREG,	RLEFT|RESCC,
278 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
279 
280 RS,	INAREG|INTAREG|FORCC,
281 	SAREG,	TWORD,
282 	SCON,	TINT,
283 		NAREG|NASL,	RESC1|RESCC,
284 		"	extzv	AR,ZU,AL,A1\n",
285 
286 ASG LS,	INAREG|FOREFF|FORCC,
287 	SAREG|AWD,	TWORD,
288 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
289 		0,	RLEFT|RESCC,
290 		"	ashl	AR,AL,AL\n",
291 
292 ASG LS,	INAREG|FOREFF|FORCC,
293 	SAREG|AWD,	TWORD,
294 	SSOREG,	ANYSIGNED|ANYUSIGNED,
295 		0,	RLEFT|RESCC,
296 		"	ashl	AR,AL,AL\n",
297 
298 ASG LS,	INAREG|FOREFF|FORCC,
299 	SAREG|AWD,	TWORD,
300 	SOREG,	ANYSIGNED|ANYUSIGNED,
301 		NAREG,	RLEFT|RESCC,
302 		"	ZB	AR,A1\n	ashl	A1,AL,AL\n",
303 
304 LS,	INAREG|INTAREG|FORCC,
305 	SAREG|AWD,	TWORD,
306 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
307 		NAREG|NASL|NASR,	RESC1|RESCC,
308 		"	ashl	AR,AL,A1\n",
309 
310 LS,	INAREG|INTAREG|FORCC,
311 	SAREG|AWD,	TWORD,
312 	SSOREG,	ANYSIGNED|ANYUSIGNED,
313 		NAREG|NASL|NASR,	RESC1|RESCC,
314 		"	ashl	AR,AL,A1\n",
315 
316 LS,	INAREG|INTAREG|FORCC,
317 	SAREG|AWD,	TWORD,
318 	SOREG,	ANYSIGNED|ANYUSIGNED,
319 		NAREG|NASR,	RESC1|RESCC,
320 		"	ZB	AR,A1\n	ashl	A1,AL,A1\n",
321 
322 INCR,	FOREFF,
323 	AWD,	TANY,
324 	SCON,	TANY,
325 		0,	RLEFT,
326 		"	ZE\n",
327 
328 DECR,	FOREFF,
329 	AWD,	TANY,
330 	SCON,	TANY,
331 		0,	RLEFT,
332 		"	ZE\n",
333 
334 INCR,	FOREFF,
335 	SAREG,	TWORD,
336 	SCON,	TANY,
337 		0,	RLEFT,
338 		"	ZE\n",
339 
340 DECR,	FOREFF,
341 	SAREG,	TWORD,
342 	SCON,	TANY,
343 		0,	RLEFT,
344 		"	ZE\n",
345 
346 /* jwf INCR and DECR for SAREG TCHAR|TSHORT matched by ASG PLUS etc */
347 
348 INCR,	INAREG|INTAREG,
349 	AWD,	TANY,
350 	SCON,	TANY,
351 		NAREG,	RESC1,
352 		"	ZD\n",
353 
354 DECR,	INAREG|INTAREG,
355 	AWD,	TANY,
356 	SCON,	TANY,
357 		NAREG,	RESC1,
358 		"	ZD\n",
359 
360 INCR,	INAREG|INTAREG,
361 	SAREG,	TWORD,
362 	SCON,	TANY,
363 		NAREG,	RESC1,
364 		"	ZD\n",
365 
366 DECR,	INAREG|INTAREG,
367 	SAREG,	TWORD,
368 	SCON,	TANY,
369 		NAREG,	RESC1,
370 		"	ZD\n",
371 
372 ASSIGN,	INAREG|FOREFF|FORCC,
373 	SAREG|AWD,	TDOUBLE,
374 	SAREG|AWD,	TUCHAR|TUSHORT,
375 		NAREG|NASR,	RLEFT|RESCC,
376 		"	movzZRl	AR,A1\n	cvtld	A1,AL\n",
377 
378 ASSIGN,	INAREG|FOREFF|FORCC,
379 	SAREG|AWD,	TFLOAT,
380 	SAREG|AWD,	TUCHAR|TUSHORT,
381 		NAREG|NASR,	RLEFT|RESCC,
382 		"	movzZRl	AR,A1\n	cvtlf	A1,AL\n",
383 
384 ASSIGN,	INAREG|FOREFF|FORCC,
385 	SAREG|AWD,	TANY,
386 	SAREG|AWD,	TANY,
387 		0,	RLEFT|RESCC,
388 		"	ZA\n",
389 
390 ASSIGN,	INAREG|FOREFF,
391 	SFLD,	TANY,
392 	SAREG|AWD,	TWORD,
393 		0,	RRIGHT,
394 		"	insv	AR,$H,$S,AL\n",
395 
396 ASSIGN,	INAREG|FOREFF|FORCC,
397 	SAREG|AWD,	TWORD,
398 	SFLD,	ANYSIGNED,
399 		0,	RLEFT|RESCC,
400 		"	extv	$H,$S,AR,AL\n",
401 
402 ASSIGN,	INAREG|FOREFF|FORCC,
403 	SAREG|AWD,	TWORD,
404 	SFLD,	ANYUSIGNED,
405 		0,	RLEFT|RESCC,
406 		"	extzv	$H,$S,AR,AL\n",
407 
408 /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
409 UNARY MUL,	FOREFF,
410 	SCC,	TANY,
411 	SCC,	TANY,
412 		0,	RNULL,
413 		"	HELP HELP HELP\n",
414 
415 REG,	INTEMP,
416 	SANY,	TANY,
417 	SAREG,	TDOUBLE,
418 		2*NTEMP,	RESC1,
419 		"	movd	AR,A1\n",
420 
421 REG,	INTEMP,
422 	SANY,	TANY,
423 	SAREG,	TANY,
424 		NTEMP,	RESC1,
425 		"	movZF	AR,A1\n",
426 
427 #if defined(FORT) || defined(SPRECC)
428 REG,	FORARG,
429 	SANY,	TANY,
430 	SAREG,	TFLOAT,
431 		0,	RNULL,
432 		"	cvtfd	AR,-(sp)\n",
433 
434 REG,	FORARG,
435 	SANY,	TANY,
436 	SAREG,	TDOUBLE,
437 		0,	RNULL,
438 		"	movZR	AR,-(sp)\n",
439 #endif
440 
441 OPLEAF,	FOREFF,
442 	SANY,	TANY,
443 	SAREG|AWD,	TANY,
444 		0,	RLEFT,
445 		"",
446 
447 OPLTYPE,	INAREG|INTAREG,
448 	SANY,	TANY,
449 	SANY,	TANY,
450 		NAREG|NASR,	RESC1,
451 		"	ZA\n",
452 
453 OPLTYPE,	FORCC,
454 	SANY,	TANY,
455 	SANY,	TANY,
456 		0,	RESCC,
457 		"	tstZR	AR\n",
458 
459 OPLTYPE,	FORARG,
460 	SANY,	TANY,
461 	SANY,	TWORD,
462 		0,	RNULL,
463 		"	pushl	AR\n",
464 
465 OPLTYPE,	FORARG,
466 	SANY,	TANY,
467 	SANY,	TCHAR|TSHORT,
468 		0,	RNULL,
469 		"	cvtZRl	AR,-(sp)\n",
470 
471 OPLTYPE,	FORARG,
472 	SANY,	TANY,
473 	SANY,	TUCHAR|TUSHORT,
474 		0,	RNULL,
475 		"	movzZRl	AR,-(sp)\n",
476 
477 OPLTYPE,	FORARG,
478 	SANY,	TANY,
479 	SANY,	TDOUBLE,
480 		0,	RNULL,
481 		"	movd	AR,-(sp)\n",
482 
483 OPLTYPE,	FORARG,
484 	SANY,	TANY,
485 	SANY,	TFLOAT,
486 		0,	RNULL,
487 		"	cvtfd	AR,-(sp)\n",
488 
489 #if defined(FORT) || defined(SPRECC)
490 UNARY MINUS,	INTAREG|FORCC,
491 	SAREG|AWD,	TFLOAT,
492 	SANY,	TANY,
493 		NAREG|NASL,	RESC1|RESCC,
494 		"	mnegZL	TAL,A1\n",
495 
496 #endif
497 
498 UNARY MINUS,	INTAREG|FORCC,
499 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG|TDOUBLE,
500 	SANY,	TANY,
501 		NAREG|NASL,	RESC1|RESCC,
502 		"	mnegZL	AL,A1\n",
503 
504 COMPL,	INTAREG|FORCC,
505 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
506 	SANY,	TANY,
507 		NAREG|NASL,	RESC1|RESCC,
508 		"	mcomZL	AL,A1\n",
509 
510 COMPL,	INTAREG|FORCC,
511 	SAREG|AWD,	ANYSIGNED|ANYUSIGNED,
512 	SANY,	TANY,
513 		NAREG|NASL,	RESC1|RESCC,
514 		"	cvtZLl	AL,A1\n	mcoml	A1,A1\n",
515 
516 AND,	FORCC,
517 	SAREG|AWD,	TWORD,
518 	SCON,	TWORD,
519 		0,	RESCC,
520 		"	bitl	ZZ,AL\n",
521 
522 AND,	FORCC,
523 	SAREG|AWD,	TSHORT|TUSHORT,
524 	SSCON,	TWORD,
525 		0,	RESCC,
526 		"	bitw	ZZ,AL\n",
527 
528 AND,	FORCC,
529 	SAREG|AWD,	TCHAR|TUCHAR,
530 	SCCON,	TWORD,
531 		0,	RESCC,
532 		"	bitb	ZZ,AL\n",
533 
534 ASG AND,	INAREG|FOREFF|FORCC,
535 	SAREG,	TWORD,
536 	SCON,	TWORD,
537 		0,	RLEFT|RESCC,
538 		"	bicl2	AR,AL\n",
539 
540 ASG OPMUL,	INAREG|FOREFF|FORCC,
541 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
542 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
543 		0,	RLEFT|RESCC,
544 		"	OL2	AR,AL\n",
545 
546 OPMUL,	INAREG|INTAREG|FORCC,
547 	STAREG,	TINT|TUNSIGNED|TLONG|TULONG,
548 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
549 		0,	RLEFT|RESCC,
550 		"	OL2	AR,AL\n",
551 
552 OPMUL,	INAREG|INTAREG|FORCC,
553 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
554 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
555 		NAREG|NASL|NASR,	RESC1|RESCC,
556 		"	OL3	AR,AL,A1\n",
557 
558 ASG MOD,	INAREG|INTAREG|FOREFF|FORCC,
559 	SAREG,	TINT|TUNSIGNED|TLONG|TULONG,
560 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
561 		NAREG,	RLEFT|RESCC,
562 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl2	A1,AL\n",
563 
564 MOD,	INAREG|INTAREG,
565 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
566 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
567 		NAREG,	RESC1,
568 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl3	A1,AL,A1\n",
569 
570 ASG PLUS,	INAREG|FOREFF|FORCC,
571 	SAREG,	TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
572 	SONE,	TINT|TLONG,
573 		0,	RLEFT|RESCC,
574 		"	incZL	AL\n",
575 
576 ASG PLUS,	INAREG|FOREFF|FORCC,
577 	AWD,	ANYSIGNED|ANYUSIGNED,
578 	SONE,	TINT|TLONG,
579 		0,	RLEFT|RESCC,
580 		"	incZL	AL\n",
581 
582 ASG PLUS,	INAREG|FOREFF|FORCC,
583 	SAREG,	TSHORT|TCHAR,
584 	SONE,	TINT|TLONG,
585 		0,	RLEFT|RESCC,
586 		"	incZL	AL\n	cvtZLl	AL,AL\n",
587 
588 ASG PLUS,	INAREG|FOREFF|FORCC,
589 	SAREG,	TUSHORT|TUCHAR,
590 	SONE,	TINT|TLONG,
591 		0,	RLEFT|RESCC,
592 		"	incZL	AL\n	movzZLl	AL,AL\n",
593 
594 ASG MINUS,	INAREG|FOREFF|FORCC,
595 	SAREG,	TPOINT|TINT|TLONG|TUNSIGNED|TULONG,
596 	SONE,	TINT|TLONG,
597 		0,	RLEFT|RESCC,
598 		"	decZL	AL\n",
599 
600 ASG MINUS,	INAREG|FOREFF|FORCC,
601 	AWD,	ANYSIGNED|ANYUSIGNED,
602 	SONE,	TINT|TLONG,
603 		0,	RLEFT|RESCC,
604 		"	decZL	AL\n",
605 
606 ASG MINUS,	INAREG|FOREFF|FORCC,
607 	SAREG,	TSHORT|TCHAR,
608 	SONE,	TINT|TLONG,
609 		0,	RLEFT|RESCC,
610 		"	decZL	AL\n	cvtZLl	AL,AL\n",
611 
612 ASG MINUS,	INAREG|FOREFF|FORCC,
613 	SAREG,	TUSHORT|TUCHAR,
614 	SONE,	TINT|TLONG,
615 		0,	RLEFT|RESCC,
616 		"	decZL	AL\n	movzZLl	AL,AL\n",
617 
618 PLUS,	INAREG|INTAREG|FORCC,
619 	STAREG,	TWORD,
620 	SONE,	TWORD,
621 		0,	RLEFT|RESCC,
622 		"	incZL	AL\n",
623 
624 PLUS,	INAREG|INTAREG|FORCC,
625 	STAREG,	TSHORT|TCHAR,
626 	SONE,	TWORD,
627 		0,	RLEFT|RESCC,
628 		"	incZL	AL\n	cvtZLl	AL,AL\n",
629 
630 PLUS,	INAREG|INTAREG|FORCC,
631 	STAREG,	TUSHORT|TUCHAR,
632 	SONE,	TWORD,
633 		0,	RLEFT|RESCC,
634 		"	incZL	AL\n	movzZLl	AL,AL\n",
635 
636 MINUS,	INAREG|INTAREG|FORCC,
637 	STAREG,	TWORD,
638 	SONE,	TWORD,
639 		0,	RLEFT|RESCC,
640 		"	decZL	AL\n",
641 
642 MINUS,	INAREG|INTAREG|FORCC,
643 	STAREG,	TSHORT|TCHAR,
644 	SONE,	TWORD,
645 		0,	RLEFT|RESCC,
646 		"	decZL	AL\n	cvtZLl	AL,AL\n",
647 
648 MINUS,	INAREG|INTAREG|FORCC,
649 	STAREG,	TUSHORT|TUCHAR,
650 	SONE,	TWORD,
651 		0,	RLEFT|RESCC,
652 		"	decZL	AL\n	movzZLl	AL,AL\n",
653 
654 ASG OPSIMP,	INAREG|FOREFF|FORCC,
655 	SAREG|AWD,	TWORD,
656 	SAREG|AWD,	TWORD,
657 		0,	RLEFT|RESCC,
658 		"	OL2	AR,AL\n",
659 
660 ASG OPSIMP,	INAREG|FOREFF|FORCC,
661 	SAREG,	TWORD,
662 	SAREG,	TSHORT|TUSHORT|TCHAR|TUCHAR,
663 		0,	RLEFT|RESCC,
664 		"	OL2	AR,AL\n",
665 
666 ASG OPSIMP,	INAREG|FOREFF|FORCC,
667 	AWD,	TSHORT|TUSHORT,
668 	SAREG|AWD,	TSHORT|TUSHORT,
669 		0,	RLEFT|RESCC,
670 		"	OW2	AR,AL\n",
671 
672 ASG OPSIMP,	INAREG|FOREFF|FORCC,
673 	AWD,	TSHORT|TUSHORT,
674 	SSCON,	TWORD,
675 		0,	RLEFT|RESCC,
676 		"	OW2	AR,AL\n",
677 
678 ASG OPSIMP,	INAREG|FOREFF|FORCC,
679 	AWD,	TCHAR|TUCHAR,
680 	SAREG|AWD,	TCHAR|TUCHAR,
681 		0,	RLEFT|RESCC,
682 		"	OB2	AR,AL\n",
683 
684 ASG OPSIMP,	INAREG|FOREFF|FORCC,
685 	AWD,	TCHAR|TUCHAR,
686 	SCCON,	TWORD,
687 		0,	RLEFT|RESCC,
688 		"	OB2	AR,AL\n",
689 
690 ASG OPSIMP,	INAREG|FOREFF|FORCC,
691 	SAREG,	TSHORT,
692 	SAREG|AWD,	ANYFIXED,
693 		0,	RLEFT|RESCC,
694 		"	OW2	AR,AL\n	cvtZLl	AL,AL\n",
695 
696 ASG OPSIMP,	INAREG|FOREFF|FORCC,
697 	SAREG,	TUSHORT,
698 	SAREG|AWD,	ANYFIXED,
699 		0,	RLEFT|RESCC,
700 		"	OW2	AR,AL\n	movzZLl	AL,AL\n",
701 
702 ASG OPSIMP,	INAREG|FOREFF|FORCC,
703 	SAREG,	TCHAR,
704 	SAREG|AWD,	ANYFIXED,
705 		0,	RLEFT|RESCC,
706 		"	OB2	AR,AL\n	cvtZLl	AL,AL\n",
707 
708 ASG OPSIMP,	INAREG|FOREFF|FORCC,
709 	SAREG,	TUCHAR,
710 	SAREG|AWD,	ANYFIXED,
711 		0,	RLEFT|RESCC,
712 		"	OB2	AR,AL\n	movzZLl	AL,AL\n",
713 
714 OPSIMP,	INAREG|INTAREG|FORCC,
715 	STAREG,	ANYFIXED,
716 	SAREG|AWD,	TWORD,
717 		0,	RLEFT|RESCC,
718 		"	OL2	AR,AL\n",
719 
720 OPSIMP,	INAREG|INTAREG|FORCC,
721 	SAREG|AWD,	TWORD,
722 	SAREG|AWD,	TWORD,
723 		NAREG|NASL|NASR,	RESC1|RESCC,
724 		"	OL3	AR,AL,A1\n",
725 
726 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
727 	SAREG|AWD,	TDOUBLE,
728 	SAREG|AWD,	TDOUBLE,
729 		0,	RLEFT|RESCC,
730 		"	OD2	AR,AL\n",
731 
732 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
733 	SAREG|AWD,	TFLOAT,
734 	SAREG|AWD,	TFLOAT,
735 		0,	RLEFT|RESCC,
736 #if defined(FORT) || defined(SPRECC)
737 		"	OF2	AR,TAL\n",
738 #else
739 		"	OF2	AR,AL\n",
740 #endif
741 
742 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
743 	SAREG|AWD,	TDOUBLE,
744 	SAREG|AWD,	TFLOAT,
745 		NAREG|NASR,	RLEFT|RESCC,
746 		"	cvtfd	AR,A1\n	OD2	A1,AL\n",
747 
748 ASG OPFLOAT,	INAREG|INTAREG|FOREFF|FORCC,
749 	SAREG|AWD,	TFLOAT,
750 	SAREG|AWD,	TDOUBLE,
751 		NAREG,	RLEFT|RESC1|RESCC,
752 		"	cvtfd	AL,A1\n	OD2	AR,A1\n	cvtdf	A1,AL\n",
753 
754 ASG OPFLOAT,	INAREG|FOREFF|FORCC,
755 	SAREG|AWD,	ANYFIXED,
756 #ifndef SPRECC
757 	SAREG|AWD,	TDOUBLE,		/* force FLOAT to register */
758 #else
759 	SAREG|AWD,	TFLOAT|TDOUBLE,
760 #endif
761 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
762 		"	ZG\n",
763 
764 OPFLOAT,	INAREG|INTAREG|FORCC,
765 	STAREG,	TDOUBLE,
766 	SAREG|AWD,	TDOUBLE,
767 		0,	RLEFT|RESCC,
768 		"	OD2	AR,AL\n",
769 
770 OPFLOAT,	INAREG|INTAREG|FORCC,
771 	SAREG|AWD,	TDOUBLE,
772 	SAREG|AWD,	TDOUBLE,
773 		NAREG|NASL|NASR,	RESC1|RESCC,
774 		"	OD3	AR,AL,A1\n",
775 
776 OPFLOAT,	INAREG|INTAREG|FORCC,
777 	SAREG|AWD,	TFLOAT,
778 	SAREG|AWD,	TDOUBLE,
779 		NAREG|NASL,	RESC1|RESCC,
780 		"	cvtfd	AL,A1\n	OD2	AR,A1\n",
781 
782 OPFLOAT,	INAREG|INTAREG|FORCC,
783 	SAREG|AWD,	TDOUBLE,
784 	SAREG|AWD,	TFLOAT,
785 		NAREG|NASR,	RESC1|RESCC,
786 		"	cvtfd	AR,A1\n	OD3	A1,AL,A1\n",
787 
788 #if defined(FORT) || defined(SPRECC)
789 OPFLOAT,	INAREG|INTAREG|FORCC,
790 	STAREG,		TFLOAT,
791 	SAREG|AWD,	TFLOAT,
792 		0,	RLEFT|RESCC,
793 		"	OF2	AR,TAL\n",
794 
795 OPFLOAT,	INAREG|INTAREG|FORCC,
796 	SAREG|AWD,	TFLOAT,
797 	SAREG|AWD,	TFLOAT,
798 		NAREG|NASL|NASR,	RESC1|RESCC,
799 		"	OF3	AR,AL,TA1\n",
800 #endif
801 
802 	/* Default actions for hard trees ... */
803 
804 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
805 
806 UNARY MUL, DF( UNARY MUL ),
807 
808 INCR, DF(INCR),
809 
810 DECR, DF(INCR),
811 
812 ASSIGN, DF(ASSIGN),
813 
814 STASG, DF(STASG),
815 
816 FLD, DF(FLD),
817 
818 OPLEAF, DF(NAME),
819 
820 OPLOG,	FORCC,
821 	SANY,	TANY,
822 	SANY,	TANY,
823 		REWRITE,	BITYPE,
824 		"",
825 
826 OPLOG,	DF(NOT),
827 
828 COMOP, DF(COMOP),
829 
830 INIT, DF(INIT),
831 
832 OPUNARY, DF(UNARY MINUS),
833 
834 
835 ASG OPANY, DF(ASG PLUS),
836 
837 OPANY, DF(BITYPE),
838 
839 FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
840