xref: /csrg-svn/old/pcc/ccom.vax/table.c (revision 32971)
117740Sralph #ifndef lint
2*32971Sdonn static char *sccsid ="@(#)table.c	1.27 (Berkeley) 12/11/87";
317740Sralph #endif lint
417740Sralph 
518558Sralph # include "pass2.h"
69705Slinton 
79705Slinton # define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
89705Slinton # define AWD SNAME|SOREG|SCON|STARNM|STARREG
99705Slinton /* tbl */
109705Slinton # define ANYSIGNED TPOINT|TINT|TLONG|TSHORT|TCHAR
119705Slinton # define ANYUSIGNED TUNSIGNED|TULONG|TUSHORT|TUCHAR
129705Slinton # define ANYFIXED ANYSIGNED|ANYUSIGNED
139705Slinton # define TWORD TINT|TUNSIGNED|TPOINT|TLONG|TULONG
149705Slinton # define NIAWD SNAME|SCON|STARNM
159705Slinton /* tbl */
169705Slinton 
179705Slinton struct optab  table[] = {
189705Slinton 
199705Slinton 	/* the following entry is to fix a problem with
209705Slinton 	   the manner that the first pass handles the
219705Slinton 	   type of a shift expression                 */
229705Slinton PCONV,	INAREG|INTAREG,
239705Slinton 	SAREG|AWD,	TINT|TUNSIGNED,
249705Slinton 	SANY,	TPOINT,
259705Slinton 		NAREG|NASL,	RLEFT,
269705Slinton 		"",
279705Slinton 
2817740Sralph #if defined(FORT) || defined(SPRECC)
299705Slinton SCONV,	INTAREG|FORCC,
3016182Sralph 	SAREG|AWD,	TDOUBLE,
3116182Sralph 	SANY,	TFLOAT,
3216182Sralph 		NAREG|NASL,	RESC1|RESCC,
3316182Sralph 		"	cvtdf	AL,A1\n",
349705Slinton 
359705Slinton SCONV,	INTAREG|FORCC,
3625753Sdonn 	SAREG|AWD,	ANYSIGNED,
379705Slinton 	SANY,	TFLOAT,
389705Slinton 		NAREG|NASL,	RESC1|RESCC,
399705Slinton 		"	cvtZLf	AL,TA1\n",
40*32971Sdonn #else
41*32971Sdonn SCONV,	INTAREG|FORCC,		/* rub some bits off that mantissa... */
42*32971Sdonn 	SAREG|AWD,	TWORD|TDOUBLE,
439705Slinton 	SANY,	TFLOAT,
449705Slinton 		NAREG|NASL,	RESC1|RESCC,
45*32971Sdonn 		"	cvtZLf	AL,A1\n	clrl	U1\n",
469705Slinton #endif
479705Slinton 
4819934Smckusick /* take care of redundant conversions introduced by reclaim() */
4919934Smckusick SCONV,	INTAREG,
5019934Smckusick 	STAREG,	TWORD,
5119934Smckusick 	SANY,	TWORD,
5219934Smckusick 		0,	RLEFT,
5319934Smckusick 		"",
5419934Smckusick 
55*32971Sdonn SCONV,	INTAREG,
56*32971Sdonn 	STAREG,	TDOUBLE,
57*32971Sdonn 	SANY,	TDOUBLE,
58*32971Sdonn 		0,	RLEFT,
59*32971Sdonn 		"",
60*32971Sdonn 
619705Slinton SCONV,	INTAREG|FORCC,
6216182Sralph 	SAREG|AWD,	TANY,
639705Slinton 	SANY,	TANY,
649705Slinton 		NAREG|NASL,	RESC1|RESCC,
6516182Sralph 		"	ZA\n",
669705Slinton 
6732970Sdonn SCONV,	FORARG,
68*32971Sdonn 	SAREG|AWD,	TWORD|TDOUBLE,
69*32971Sdonn 	SANY,	TFLOAT,
70*32971Sdonn 		NAREG|NASL,	RNULL,
71*32971Sdonn 		"	cvtZLf	AL,A1\n	cvtfd	A1,-(sp)\n",
729705Slinton 
7332970Sdonn SCONV,	FORARG,
7432970Sdonn 	SAREG|AWD,	TANY,
7532970Sdonn 	SANY,	TANY,
7632970Sdonn 		0,	RNULL,
7732970Sdonn 		"	ZV\n",
7832970Sdonn 
799705Slinton INIT,	FOREFF,
809705Slinton 	SCON,	TANY,
819705Slinton 	SANY,	TWORD,
829705Slinton 		0,	RNOP,
839705Slinton 		"	.long	CL\n",
849705Slinton 
859705Slinton INIT,	FOREFF,
869705Slinton 	SCON,	TANY,
879705Slinton 	SANY,	TSHORT|TUSHORT,
889705Slinton 		0,	RNOP,
899705Slinton 		"	.word	CL\n",
909705Slinton 
919705Slinton INIT,	FOREFF,
929705Slinton 	SCON,	TANY,
939705Slinton 	SANY,	TCHAR|TUCHAR,
949705Slinton 		0,	RNOP,
959705Slinton 		"	.byte	CL\n",
969705Slinton 
97*32971Sdonn #ifdef FORT
989705Slinton 	/* for the use of fortran only */
999705Slinton 
1009705Slinton GOTO,	FOREFF,
1019705Slinton 	SCON,	TANY,
1029705Slinton 	SANY,	TANY,
1039705Slinton 		0,	RNOP,
1049705Slinton 		"	jbr	CL\n",
105*32971Sdonn #endif
1069705Slinton 
1079705Slinton GOTO,	FOREFF,
10817740Sralph 	SNAME|SOREG,	TANY,
1099705Slinton 	SANY,	TANY,
1109705Slinton 		0,	RNOP,
1119705Slinton 		"	jmp	*AL\n",
1129705Slinton 
1139705Slinton GOTO,	FOREFF,
1149705Slinton 	SAREG,	TANY,
1159705Slinton 	SANY,	TANY,
1169705Slinton 		0,	RNOP,
1179705Slinton 		"	jmp	(AL)\n",
1189705Slinton 
1199705Slinton STARG,	FORARG,
1209705Slinton 	SCON|SOREG,	TANY,
1219705Slinton 	SANY,	TANY,
1229705Slinton 		0,	RNULL,
1239705Slinton 		"	subl2	ZT,sp\nZS",
1249705Slinton 
1259705Slinton STASG,	FOREFF,
1269705Slinton 	SNAME|SOREG,	TANY,
1279705Slinton 	SCON|SAREG,	TANY,
1289705Slinton 		0,	RNOP,
1299705Slinton 		"ZS",
1309705Slinton 
1319705Slinton STASG,	INAREG,
1329705Slinton 	SNAME|SOREG,	TANY,
1339705Slinton 	SCON,	TANY,
1349705Slinton 		NAREG,	RESC1,
1359705Slinton 		"ZS	movl	AR,A1\n",
1369705Slinton 
1379705Slinton STASG,	INAREG,
1389705Slinton 	SNAME|SOREG,	TANY,
1399705Slinton 	SAREG,	TANY,
1409705Slinton 		0,	RRIGHT,
1419705Slinton 		"	pushl	AR\nZS	movl	(sp)+,AR\n",
1429705Slinton 
1439705Slinton FLD,	INAREG|INTAREG,
1449705Slinton 	SANY,	TANY,
1459705Slinton 	SFLD,	ANYSIGNED,
1469705Slinton 		NAREG|NASR,	RESC1,
1479705Slinton 		"	extv	$H,$S,AR,A1\n",
1489705Slinton 
1499705Slinton FLD,	INAREG|INTAREG,
1509705Slinton 	SANY,	TANY,
1519705Slinton 	SFLD,	ANYUSIGNED,
1529705Slinton 		NAREG|NASR,	RESC1,
1539705Slinton 		"	extzv	$H,$S,AR,A1\n",
1549705Slinton 
1559705Slinton FLD,	FORARG,
1569705Slinton 	SANY,	TANY,
1579705Slinton 	SFLD,	ANYSIGNED,
1589705Slinton 		0,	RNULL,
1599705Slinton 		"	extv	$H,$S,AR,-(sp)\n",
1609705Slinton 
1619705Slinton FLD,	FORARG,
1629705Slinton 	SANY,	TANY,
1639705Slinton 	SFLD,	ANYUSIGNED,
1649705Slinton 		0,	RNULL,
1659705Slinton 		"	extzv	$H,$S,AR,-(sp)\n",
1669705Slinton 
1679705Slinton OPLOG,	FORCC,
1689705Slinton 	SAREG|AWD,	TWORD,
1699705Slinton 	SAREG|AWD,	TWORD,
1709705Slinton 		0,	RESCC,
1719705Slinton 		"	cmpl	AL,AR\nZP",
1729705Slinton 
1739705Slinton OPLOG,	FORCC,
17419934Smckusick 	SAREG|AWD,	TSHORT,
17519934Smckusick 	SAREG|AWD,	TSHORT,
1769705Slinton 		0,	RESCC,
1779705Slinton 		"	cmpw	AL,AR\nZP",
1789705Slinton 
1799705Slinton OPLOG,	FORCC,
18019934Smckusick 	SAREG|AWD,	TUSHORT,
18119934Smckusick 	SAREG|AWD,	TUSHORT,
1829705Slinton 		0,	RESCC,
18319934Smckusick 		"	cmpw	AL,AR\nZP",
18419934Smckusick 
18519934Smckusick OPLOG,	FORCC,
18619934Smckusick 	SAREG|AWD,	TCHAR,
18719934Smckusick 	SAREG|AWD,	TCHAR,
18819934Smckusick 		0,	RESCC,
1899705Slinton 		"	cmpb	AL,AR\nZP",
1909705Slinton 
1919705Slinton OPLOG,	FORCC,
19219934Smckusick 	SAREG|AWD,	TUCHAR,
19319934Smckusick 	SAREG|AWD,	TUCHAR,
19419934Smckusick 		0,	RESCC,
19519934Smckusick 		"	cmpb	AL,AR\nZP",
19619934Smckusick 
197*32971Sdonn /* optim2() handles degenerate comparisons with constants */
19819934Smckusick OPLOG,	FORCC,
199*32971Sdonn 	SAREG|AWD,	TCHAR|TUCHAR|TSHORT|TUSHORT,
200*32971Sdonn 	SCON,	ANYFIXED,
2019705Slinton 		0,	RESCC,
202*32971Sdonn 		"	cmpZL	AL,AR\nZP",
2039705Slinton 
2049705Slinton OPLOG,	FORCC,
2059705Slinton 	SAREG|AWD,	TDOUBLE,
2069705Slinton 	SAREG|AWD,	TDOUBLE,
2079705Slinton 		0,	RESCC,
2089705Slinton 		"	cmpd	AL,AR\nZP",
2099705Slinton 
2109705Slinton OPLOG,	FORCC,
2119705Slinton 	SAREG|AWD,	TFLOAT,
2129705Slinton 	SAREG|AWD,	TFLOAT,
2139705Slinton 		0,	RESCC,
2149705Slinton 		"	cmpf	AL,AR\nZP",
2159705Slinton 
2169705Slinton CCODES,	INAREG|INTAREG,
2179705Slinton 	SANY,	TANY,
2189705Slinton 	SANY,	TANY,
2199705Slinton 		NAREG,	RESC1,
2209705Slinton 		"	movl	$1,A1\nZN",
2219705Slinton 
2229705Slinton UNARY CALL,	INTAREG,
2239705Slinton 	SCON,	TANY,
22416182Sralph 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
22516182Sralph 		NAREG|NASL,	RESC1,
22616182Sralph 		"	calls	ZC,CL\n",
22716182Sralph 
22816182Sralph UNARY CALL,	INTAREG,
2299705Slinton 	SAREG,	TANY,
2309705Slinton 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
2319705Slinton 		NAREG|NASL,	RESC1,	/* should be 0 */
2329705Slinton 		"	calls	ZC,(AL)\n",
2339705Slinton 
2349705Slinton UNARY CALL,	INAREG|INTAREG,
2359705Slinton 	SNAME,	TANY,
2369705Slinton 	SANY,	TANY,
2379705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2389705Slinton 		"	calls	ZC,*AL\n",
2399705Slinton 
2409705Slinton UNARY CALL,	INAREG|INTAREG,
2419705Slinton 	SSOREG,	TANY,
2429705Slinton 	SANY,	TANY,
2439705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2449705Slinton 		"	calls	ZC,*AL\n",
2459705Slinton 
2469705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2479705Slinton 	SAREG,	TWORD,
24832964Sdonn 	SCON,	TINT|TUNSIGNED,
2499705Slinton 		0,	RLEFT|RESCC,
2509705Slinton 		"	extzv	AR,ZU,AL,AL\n",
2519705Slinton 
2529705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2539705Slinton 	SAREG,	TWORD,
2549705Slinton 	SAREG,	ANYFIXED,
2559705Slinton 		NAREG,	RLEFT|RESCC,
2569705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2579705Slinton 
2589705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2599705Slinton 	SAREG,	TWORD,
2609705Slinton 	SAREG|AWD,	TWORD,
2619705Slinton 		NAREG,	RLEFT|RESCC,
2629705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2639705Slinton 
2649705Slinton RS,	INAREG|INTAREG|FORCC,
2659705Slinton 	SAREG,	TWORD,
26632964Sdonn 	SCON,	TINT|TUNSIGNED,
2679705Slinton 		NAREG|NASL,	RESC1|RESCC,
2689705Slinton 		"	extzv	AR,ZU,AL,A1\n",
2699705Slinton 
2709705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2719705Slinton 	SAREG|AWD,	TWORD,
2729705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2739705Slinton 		0,	RLEFT|RESCC,
2749705Slinton 		"	ashl	AR,AL,AL\n",
2759705Slinton 
2769705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2779705Slinton 	SAREG|AWD,	TWORD,
2789705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
2799705Slinton 		0,	RLEFT|RESCC,
2809705Slinton 		"	ashl	AR,AL,AL\n",
2819705Slinton 
2829705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2839705Slinton 	SAREG|AWD,	TWORD,
2849705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
2859705Slinton 		NAREG,	RLEFT|RESCC,
2869705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,AL\n",
2879705Slinton 
2889705Slinton LS,	INAREG|INTAREG|FORCC,
2899705Slinton 	SAREG|AWD,	TWORD,
2909705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2919705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
2929705Slinton 		"	ashl	AR,AL,A1\n",
2939705Slinton 
2949705Slinton LS,	INAREG|INTAREG|FORCC,
2959705Slinton 	SAREG|AWD,	TWORD,
2969705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
2979705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
2989705Slinton 		"	ashl	AR,AL,A1\n",
2999705Slinton 
3009705Slinton LS,	INAREG|INTAREG|FORCC,
3019705Slinton 	SAREG|AWD,	TWORD,
3029705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
3039705Slinton 		NAREG|NASR,	RESC1|RESCC,
3049705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,A1\n",
3059705Slinton 
3069705Slinton INCR,	FOREFF,
307*32971Sdonn 	SAREG|AWD,	TANY,
30832969Sdonn 	SCON|SNAME,	TANY,
3099705Slinton 		0,	RLEFT,
3109705Slinton 		"	ZE\n",
3119705Slinton 
3129705Slinton DECR,	FOREFF,
313*32971Sdonn 	SAREG|AWD,	TANY,
31432969Sdonn 	SCON|SNAME,	TANY,
3159705Slinton 		0,	RLEFT,
3169705Slinton 		"	ZE\n",
3179705Slinton 
3189705Slinton INCR,	INAREG|INTAREG,
319*32971Sdonn 	SAREG|AWD,	TANY,
32032969Sdonn 	SCON|SNAME,	TANY,
3219705Slinton 		NAREG,	RESC1,
3229705Slinton 		"	ZD\n",
3239705Slinton 
3249705Slinton DECR,	INAREG|INTAREG,
325*32971Sdonn 	SAREG|AWD,	TANY,
32632969Sdonn 	SCON|SNAME,	TANY,
3279705Slinton 		NAREG,	RESC1,
3289705Slinton 		"	ZD\n",
3299705Slinton 
3309705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3319705Slinton 	SAREG|AWD,	TANY,
3329705Slinton 	SAREG|AWD,	TANY,
33325582Sbloom 		0,	RLEFT|RESCC,
3349705Slinton 		"	ZA\n",
3359705Slinton 
33632958Sdonn ASSIGN,	FOREFF,
3379705Slinton 	SFLD,	TANY,
3389705Slinton 	SAREG|AWD,	TWORD,
33932958Sdonn 		0,	RNOP,
3409705Slinton 		"	insv	AR,$H,$S,AL\n",
3419705Slinton 
34232958Sdonn ASSIGN,	INAREG,
34332960Sdonn 	SFLD,	ANYSIGNED,
34432958Sdonn 	SAREG|AWD,	TWORD,
34532958Sdonn 		NAREG,	RESC1,
34632958Sdonn 		"	insv	AR,$H,$S,AL\n	extv	$H,$S,AL,A1\n",
34732958Sdonn 
34832960Sdonn ASSIGN,	INAREG,
34932960Sdonn 	SFLD,	ANYUSIGNED,
35032960Sdonn 	SAREG|AWD,	TWORD,
35132960Sdonn 		NAREG,	RESC1,
35232960Sdonn 		"	insv	AR,$H,$S,AL\n	extzv	$H,$S,AL,A1\n",
35332960Sdonn 
3549705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3559705Slinton 	SAREG|AWD,	TWORD,
3569705Slinton 	SFLD,	ANYSIGNED,
3579705Slinton 		0,	RLEFT|RESCC,
3589705Slinton 		"	extv	$H,$S,AR,AL\n",
3599705Slinton 
3609705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3619705Slinton 	SAREG|AWD,	TWORD,
3629705Slinton 	SFLD,	ANYUSIGNED,
3639705Slinton 		0,	RLEFT|RESCC,
3649705Slinton 		"	extzv	$H,$S,AR,AL\n",
3659705Slinton 
3669705Slinton /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
3679705Slinton UNARY MUL,	FOREFF,
3689705Slinton 	SCC,	TANY,
3699705Slinton 	SCC,	TANY,
3709705Slinton 		0,	RNULL,
3719705Slinton 		"	HELP HELP HELP\n",
3729705Slinton 
37332959Sdonn OREG,	INTEMP,
37432959Sdonn 	SANY,	TANY,
37532959Sdonn 	SOREG,	TDOUBLE,
37632959Sdonn 		2*NTEMP,	RESC1,
377*32971Sdonn 		"	movq	AR,A1\n",
37832959Sdonn 
37932959Sdonn OREG,	INTEMP,
38032959Sdonn 	SANY,	TANY,
38132959Sdonn 	SOREG,	TANY,
38232959Sdonn 		NTEMP,	RESC1,
38332959Sdonn 		"	movZF	AR,A1\n",
38432959Sdonn 
3859705Slinton REG,	INTEMP,
3869705Slinton 	SANY,	TANY,
3879705Slinton 	SAREG,	TDOUBLE,
3889705Slinton 		2*NTEMP,	RESC1,
389*32971Sdonn 		"	movq	AR,A1\n",
3909705Slinton 
3919705Slinton REG,	INTEMP,
3929705Slinton 	SANY,	TANY,
3939705Slinton 	SAREG,	TANY,
3949705Slinton 		NTEMP,	RESC1,
3959705Slinton 		"	movZF	AR,A1\n",
3969705Slinton 
39717740Sralph #if defined(FORT) || defined(SPRECC)
39817740Sralph REG,	FORARG,
3999705Slinton 	SANY,	TANY,
4009705Slinton 	SAREG,	TFLOAT,
4019705Slinton 		0,	RNULL,
4029705Slinton 		"	cvtfd	AR,-(sp)\n",
4039705Slinton 
4049705Slinton REG,	FORARG,
4059705Slinton 	SANY,	TANY,
4069705Slinton 	SAREG,	TDOUBLE,
4079705Slinton 		0,	RNULL,
408*32971Sdonn 		"	movq	AR,-(sp)\n",
4099705Slinton #endif
4109705Slinton 
4119705Slinton OPLEAF,	FOREFF,
4129705Slinton 	SANY,	TANY,
4139705Slinton 	SAREG|AWD,	TANY,
4149705Slinton 		0,	RLEFT,
4159705Slinton 		"",
4169705Slinton 
4179705Slinton OPLTYPE,	INAREG|INTAREG,
4189705Slinton 	SANY,	TANY,
4199705Slinton 	SANY,	TANY,
4209705Slinton 		NAREG|NASR,	RESC1,
4219705Slinton 		"	ZA\n",
4229705Slinton 
4239705Slinton OPLTYPE,	FORCC,
4249705Slinton 	SANY,	TANY,
4259705Slinton 	SANY,	TANY,
4269705Slinton 		0,	RESCC,
4279705Slinton 		"	tstZR	AR\n",
4289705Slinton 
4299705Slinton OPLTYPE,	FORARG,
4309705Slinton 	SANY,	TANY,
4319705Slinton 	SANY,	TANY,
4329705Slinton 		0,	RNULL,
43332970Sdonn 		"	ZV\n",
4349705Slinton 
43517740Sralph #if defined(FORT) || defined(SPRECC)
4369705Slinton UNARY MINUS,	INTAREG|FORCC,
43724417Smckusick 	SAREG|AWD,	TFLOAT,
43816182Sralph 	SANY,	TANY,
43916182Sralph 		NAREG|NASL,	RESC1|RESCC,
44016182Sralph 		"	mnegZL	TAL,A1\n",
44116182Sralph 
44224417Smckusick #endif
44316182Sralph 
44416182Sralph UNARY MINUS,	INTAREG|FORCC,
445*32971Sdonn 	SAREG|AWD,	TWORD|TDOUBLE,
4469705Slinton 	SANY,	TANY,
4479705Slinton 		NAREG|NASL,	RESC1|RESCC,
4489705Slinton 		"	mnegZL	AL,A1\n",
4499705Slinton 
4509705Slinton COMPL,	INTAREG|FORCC,
451*32971Sdonn 	SAREG|AWD,	TWORD,
4529705Slinton 	SANY,	TANY,
4539705Slinton 		NAREG|NASL,	RESC1|RESCC,
4549705Slinton 		"	mcomZL	AL,A1\n",
4559705Slinton 
4569705Slinton AND,	FORCC,
457*32971Sdonn 	SAREG|AWD,	TCHAR|TSHORT,
458*32971Sdonn 	SCON,	ANYFIXED,
459*32971Sdonn 		NAREG|NASL,	RESCC,
460*32971Sdonn 		"	ZZ\n",
4619705Slinton 
4629705Slinton AND,	FORCC,
463*32971Sdonn 	SAREG|AWD,	TWORD|ANYUSIGNED,
464*32971Sdonn 	SCON,	ANYFIXED,
4659705Slinton 		0,	RESCC,
466*32971Sdonn 		"	ZZ\n",
4679705Slinton 
4689705Slinton ASG AND,	INAREG|FOREFF|FORCC,
4699705Slinton 	SAREG,	TWORD,
4709705Slinton 	SCON,	TWORD,
4719705Slinton 		0,	RLEFT|RESCC,
4729705Slinton 		"	bicl2	AR,AL\n",
4739705Slinton 
474*32971Sdonn /* General cases for DIV and ASG DIV are handled below with OPMUL */
475*32971Sdonn /* Some special cases are handled in optim2() */
476*32971Sdonn 
47732962Sdonn DIV,	INAREG|FOREFF|FORCC,
47832962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
47932967Sdonn 	SCON,	ANYUSIGNED,
48032962Sdonn 		NAREG|NEVEN,	RESC1|RESCC,
48132963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,U1\n",
48232962Sdonn 
48332962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
484*32971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
48532967Sdonn 	SMCON,	ANYUSIGNED,
48632962Sdonn 		0,	RLEFT|RESCC,
48732962Sdonn 		"	ZJ\n",
48832962Sdonn 
48932962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
490*32971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
49132967Sdonn 	SCON,	ANYUSIGNED,
49232962Sdonn 		NAREG|NEVEN,	RLEFT|RESCC,
49332963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,AL,U1\n",
49432962Sdonn 
49532962Sdonn MOD,	INAREG|INTAREG,
49632962Sdonn 	SAREG|AWD,	TINT|TLONG,
49732962Sdonn 	SAREG|AWD,	TINT|TLONG,
49832962Sdonn 		NAREG,	RESC1,
49932962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl3	A1,AL,A1\n",
50032962Sdonn 
50132962Sdonn MOD,	INAREG|FOREFF,
50232962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
50332967Sdonn 	SMCON,	ANYUSIGNED,
50432962Sdonn 		NAREG|NASL,	RLEFT|RESC1,
50532962Sdonn 		"	ZJ\n",
50632962Sdonn 
50732962Sdonn MOD,	INAREG|FOREFF,
50832962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
50932967Sdonn 	SCON,	ANYUSIGNED,
510*32971Sdonn 		NAREG|NEVEN,	RESC1,
51132963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,U1,A1\n",
51232962Sdonn 
51332967Sdonn /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
51432967Sdonn ASG MOD,	INAREG|FOREFF|FORCC,
51532967Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
51632962Sdonn 	SAREG|AWD,	TINT|TLONG,
51732962Sdonn 		NAREG,	RLEFT|RESCC,
51832962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl2	A1,AL\n",
51932962Sdonn 
52032962Sdonn ASG MOD,	INAREG|FOREFF,
521*32971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
52232967Sdonn 	SMCON,	ANYUSIGNED,
523*32971Sdonn 		0,	RLEFT,
52432962Sdonn 		"	ZJ\n",
52532962Sdonn 
52632962Sdonn ASG MOD,	INAREG|FOREFF,
527*32971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
52832967Sdonn 	SCON,	ANYUSIGNED,
529*32971Sdonn 		NAREG|NEVEN,	RLEFT,
53032963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,AL\n",
53132962Sdonn 
5329705Slinton ASG OPMUL,	INAREG|FOREFF|FORCC,
5339705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5349705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5359705Slinton 		0,	RLEFT|RESCC,
5369705Slinton 		"	OL2	AR,AL\n",
5379705Slinton 
5389705Slinton OPMUL,	INAREG|INTAREG|FORCC,
5399705Slinton 	STAREG,	TINT|TUNSIGNED|TLONG|TULONG,
5409705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5419705Slinton 		0,	RLEFT|RESCC,
5429705Slinton 		"	OL2	AR,AL\n",
5439705Slinton 
5449705Slinton OPMUL,	INAREG|INTAREG|FORCC,
5459705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5469705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5479705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
5489705Slinton 		"	OL3	AR,AL,A1\n",
5499705Slinton 
5509705Slinton ASG PLUS,	INAREG|FOREFF|FORCC,
551*32971Sdonn 	SAREG|AWD,	ANYFIXED,
552*32971Sdonn 	SONE,	TANY,
5539705Slinton 		0,	RLEFT|RESCC,
5549705Slinton 		"	incZL	AL\n",
5559705Slinton 
5569705Slinton ASG MINUS,	INAREG|FOREFF|FORCC,
557*32971Sdonn 	SAREG|AWD,	ANYFIXED,
558*32971Sdonn 	SONE,	TANY,
5599705Slinton 		0,	RLEFT|RESCC,
5609705Slinton 		"	decZL	AL\n",
5619705Slinton 
5629705Slinton PLUS,	INAREG|INTAREG|FORCC,
5639705Slinton 	STAREG,	TWORD,
5649705Slinton 	SONE,	TWORD,
5659705Slinton 		0,	RLEFT|RESCC,
5669705Slinton 		"	incZL	AL\n",
5679705Slinton 
5689705Slinton MINUS,	INAREG|INTAREG|FORCC,
5699705Slinton 	STAREG,	TWORD,
5709705Slinton 	SONE,	TWORD,
5719705Slinton 		0,	RLEFT|RESCC,
5729705Slinton 		"	decZL	AL\n",
5739705Slinton 
5749705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5759705Slinton 	SAREG|AWD,	TWORD,
5769705Slinton 	SAREG|AWD,	TWORD,
5779705Slinton 		0,	RLEFT|RESCC,
5789705Slinton 		"	OL2	AR,AL\n",
5799705Slinton 
5809705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5819705Slinton 	AWD,	TSHORT|TUSHORT,
582*32971Sdonn 	SAREG|SNAME|STARNM,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5839705Slinton 		0,	RLEFT|RESCC,
5849705Slinton 		"	OW2	AR,AL\n",
5859705Slinton 
5869705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5879705Slinton 	AWD,	TSHORT|TUSHORT,
588*32971Sdonn 	SSOREG,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5899705Slinton 		0,	RLEFT|RESCC,
5909705Slinton 		"	OW2	AR,AL\n",
5919705Slinton 
5929705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
59332961Sdonn 	AWD,	TSHORT|TUSHORT,
59432961Sdonn 	SSCON,	ANYFIXED,
59532961Sdonn 		0,	RLEFT|RESCC,
59632961Sdonn 		"	OW2	AR,AL\n",
59732961Sdonn 
59832961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
59932961Sdonn 	AWD,	TSHORT|TUSHORT,
60032961Sdonn 	AWD,	TSHORT|TUSHORT,
60132961Sdonn 		0,	RLEFT|RESCC,
60232961Sdonn 		"	OW2	AR,AL\n",
60332961Sdonn 
60432961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
6059705Slinton 	AWD,	TCHAR|TUCHAR,
60632961Sdonn 	SSOREG,	ANYFIXED,
6079705Slinton 		0,	RLEFT|RESCC,
6089705Slinton 		"	OB2	AR,AL\n",
6099705Slinton 
6109705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
6119705Slinton 	AWD,	TCHAR|TUCHAR,
61232961Sdonn 	SAREG|SNAME|STARNM,	ANYFIXED,
6139705Slinton 		0,	RLEFT|RESCC,
6149705Slinton 		"	OB2	AR,AL\n",
6159705Slinton 
6169705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
61732961Sdonn 	AWD,	TCHAR|TUCHAR,
61832961Sdonn 	SCCON,	ANYFIXED,
61932961Sdonn 		0,	RLEFT|RESCC,
62032961Sdonn 		"	OB2	AR,AL\n",
62132961Sdonn 
62232961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
62332961Sdonn 	AWD,	TCHAR|TUCHAR,
62432961Sdonn 	AWD,	TCHAR|TUCHAR,
62532961Sdonn 		0,	RLEFT|RESCC,
62632961Sdonn 		"	OB2	AR,AL\n",
62732961Sdonn 
6289705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6299705Slinton 	STAREG,	ANYFIXED,
6309705Slinton 	SAREG|AWD,	TWORD,
6319705Slinton 		0,	RLEFT|RESCC,
6329705Slinton 		"	OL2	AR,AL\n",
6339705Slinton 
6349705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6359705Slinton 	SAREG|AWD,	TWORD,
6369705Slinton 	SAREG|AWD,	TWORD,
6379705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6389705Slinton 		"	OL3	AR,AL,A1\n",
6399705Slinton 
6409705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6419705Slinton 	SAREG|AWD,	TDOUBLE,
6429705Slinton 	SAREG|AWD,	TDOUBLE,
6439705Slinton 		0,	RLEFT|RESCC,
6449705Slinton 		"	OD2	AR,AL\n",
6459705Slinton 
6469705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6479705Slinton 	SAREG|AWD,	TFLOAT,
6489705Slinton 	SAREG|AWD,	TFLOAT,
6499705Slinton 		0,	RLEFT|RESCC,
65017740Sralph #if defined(FORT) || defined(SPRECC)
65116937Sralph 		"	OF2	AR,TAL\n",
65216937Sralph #else
6539705Slinton 		"	OF2	AR,AL\n",
65416937Sralph #endif
6559705Slinton 
6569705Slinton ASG OPFLOAT,	INAREG|INTAREG|FOREFF|FORCC,
6579705Slinton 	SAREG|AWD,	TFLOAT,
6589705Slinton 	SAREG|AWD,	TDOUBLE,
6599705Slinton 		NAREG,	RLEFT|RESC1|RESCC,
6609705Slinton 		"	cvtfd	AL,A1\n	OD2	AR,A1\n	cvtdf	A1,AL\n",
6619705Slinton 
66225753Sdonn ASG OPFLOAT,	INAREG|FOREFF|FORCC,
66325753Sdonn 	SAREG|AWD,	ANYFIXED,
66425753Sdonn #ifndef SPRECC
66525753Sdonn 	SAREG|AWD,	TDOUBLE,		/* force FLOAT to register */
66625753Sdonn #else
66725753Sdonn 	SAREG|AWD,	TFLOAT|TDOUBLE,
66825753Sdonn #endif
66925753Sdonn 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
67025753Sdonn 		"	ZG\n",
67125753Sdonn 
6729705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6739705Slinton 	STAREG,	TDOUBLE,
6749705Slinton 	SAREG|AWD,	TDOUBLE,
6759705Slinton 		0,	RLEFT|RESCC,
6769705Slinton 		"	OD2	AR,AL\n",
6779705Slinton 
6789705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6799705Slinton 	SAREG|AWD,	TDOUBLE,
6809705Slinton 	SAREG|AWD,	TDOUBLE,
6819705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6829705Slinton 		"	OD3	AR,AL,A1\n",
6839705Slinton 
68417740Sralph #if defined(FORT) || defined(SPRECC)
6859705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
68616937Sralph 	STAREG,		TFLOAT,
68716937Sralph 	SAREG|AWD,	TFLOAT,
6889705Slinton 		0,	RLEFT|RESCC,
68916937Sralph 		"	OF2	AR,TAL\n",
6909705Slinton 
6919705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6929705Slinton 	SAREG|AWD,	TFLOAT,
6939705Slinton 	SAREG|AWD,	TFLOAT,
6949705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6959705Slinton 		"	OF3	AR,AL,TA1\n",
6969705Slinton #endif
6979705Slinton 
6989705Slinton 	/* Default actions for hard trees ... */
6999705Slinton 
7009705Slinton # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
7019705Slinton 
7029705Slinton UNARY MUL, DF( UNARY MUL ),
7039705Slinton 
7049705Slinton INCR, DF(INCR),
7059705Slinton 
7069705Slinton DECR, DF(INCR),
7079705Slinton 
7089705Slinton ASSIGN, DF(ASSIGN),
7099705Slinton 
7109705Slinton STASG, DF(STASG),
7119705Slinton 
7129705Slinton FLD, DF(FLD),
7139705Slinton 
7149705Slinton OPLEAF, DF(NAME),
7159705Slinton 
7169705Slinton OPLOG,	FORCC,
7179705Slinton 	SANY,	TANY,
7189705Slinton 	SANY,	TANY,
7199705Slinton 		REWRITE,	BITYPE,
7209705Slinton 		"",
7219705Slinton 
7229705Slinton OPLOG,	DF(NOT),
7239705Slinton 
7249705Slinton COMOP, DF(COMOP),
7259705Slinton 
7269705Slinton INIT, DF(INIT),
7279705Slinton 
7289705Slinton OPUNARY, DF(UNARY MINUS),
7299705Slinton 
7309705Slinton ASG OPANY, DF(ASG PLUS),
7319705Slinton 
7329705Slinton OPANY, DF(BITYPE),
7339705Slinton 
7349705Slinton FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
735