xref: /csrg-svn/old/pcc/ccom.vax/table.c (revision 32973)
117740Sralph #ifndef lint
2*32973Sdonn static char *sccsid ="@(#)table.c	1.29 (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",
409705Slinton #endif
419705Slinton 
4219934Smckusick /* take care of redundant conversions introduced by reclaim() */
4319934Smckusick SCONV,	INTAREG,
4419934Smckusick 	STAREG,	TWORD,
4519934Smckusick 	SANY,	TWORD,
4619934Smckusick 		0,	RLEFT,
4719934Smckusick 		"",
4819934Smckusick 
4932971Sdonn SCONV,	INTAREG,
5032971Sdonn 	STAREG,	TDOUBLE,
5132971Sdonn 	SANY,	TDOUBLE,
5232971Sdonn 		0,	RLEFT,
5332971Sdonn 		"",
5432971Sdonn 
559705Slinton SCONV,	INTAREG|FORCC,
5616182Sralph 	SAREG|AWD,	TANY,
579705Slinton 	SANY,	TANY,
589705Slinton 		NAREG|NASL,	RESC1|RESCC,
5916182Sralph 		"	ZA\n",
609705Slinton 
6132970Sdonn SCONV,	FORARG,
6232970Sdonn 	SAREG|AWD,	TANY,
6332970Sdonn 	SANY,	TANY,
64*32973Sdonn 		NAREG|NASL,	RNULL,
6532970Sdonn 		"	ZV\n",
6632970Sdonn 
679705Slinton INIT,	FOREFF,
689705Slinton 	SCON,	TANY,
699705Slinton 	SANY,	TWORD,
709705Slinton 		0,	RNOP,
719705Slinton 		"	.long	CL\n",
729705Slinton 
739705Slinton INIT,	FOREFF,
749705Slinton 	SCON,	TANY,
759705Slinton 	SANY,	TSHORT|TUSHORT,
769705Slinton 		0,	RNOP,
779705Slinton 		"	.word	CL\n",
789705Slinton 
799705Slinton INIT,	FOREFF,
809705Slinton 	SCON,	TANY,
819705Slinton 	SANY,	TCHAR|TUCHAR,
829705Slinton 		0,	RNOP,
839705Slinton 		"	.byte	CL\n",
849705Slinton 
8532971Sdonn #ifdef FORT
869705Slinton 	/* for the use of fortran only */
879705Slinton 
889705Slinton GOTO,	FOREFF,
899705Slinton 	SCON,	TANY,
909705Slinton 	SANY,	TANY,
919705Slinton 		0,	RNOP,
929705Slinton 		"	jbr	CL\n",
9332971Sdonn #endif
949705Slinton 
959705Slinton GOTO,	FOREFF,
9617740Sralph 	SNAME|SOREG,	TANY,
979705Slinton 	SANY,	TANY,
989705Slinton 		0,	RNOP,
999705Slinton 		"	jmp	*AL\n",
1009705Slinton 
1019705Slinton GOTO,	FOREFF,
1029705Slinton 	SAREG,	TANY,
1039705Slinton 	SANY,	TANY,
1049705Slinton 		0,	RNOP,
1059705Slinton 		"	jmp	(AL)\n",
1069705Slinton 
1079705Slinton STARG,	FORARG,
1089705Slinton 	SCON|SOREG,	TANY,
1099705Slinton 	SANY,	TANY,
1109705Slinton 		0,	RNULL,
1119705Slinton 		"	subl2	ZT,sp\nZS",
1129705Slinton 
1139705Slinton STASG,	FOREFF,
1149705Slinton 	SNAME|SOREG,	TANY,
1159705Slinton 	SCON|SAREG,	TANY,
1169705Slinton 		0,	RNOP,
1179705Slinton 		"ZS",
1189705Slinton 
1199705Slinton STASG,	INAREG,
1209705Slinton 	SNAME|SOREG,	TANY,
1219705Slinton 	SCON,	TANY,
1229705Slinton 		NAREG,	RESC1,
1239705Slinton 		"ZS	movl	AR,A1\n",
1249705Slinton 
1259705Slinton STASG,	INAREG,
1269705Slinton 	SNAME|SOREG,	TANY,
1279705Slinton 	SAREG,	TANY,
1289705Slinton 		0,	RRIGHT,
1299705Slinton 		"	pushl	AR\nZS	movl	(sp)+,AR\n",
1309705Slinton 
1319705Slinton FLD,	INAREG|INTAREG,
1329705Slinton 	SANY,	TANY,
1339705Slinton 	SFLD,	ANYSIGNED,
1349705Slinton 		NAREG|NASR,	RESC1,
1359705Slinton 		"	extv	$H,$S,AR,A1\n",
1369705Slinton 
1379705Slinton FLD,	INAREG|INTAREG,
1389705Slinton 	SANY,	TANY,
1399705Slinton 	SFLD,	ANYUSIGNED,
1409705Slinton 		NAREG|NASR,	RESC1,
1419705Slinton 		"	extzv	$H,$S,AR,A1\n",
1429705Slinton 
1439705Slinton FLD,	FORARG,
1449705Slinton 	SANY,	TANY,
1459705Slinton 	SFLD,	ANYSIGNED,
1469705Slinton 		0,	RNULL,
1479705Slinton 		"	extv	$H,$S,AR,-(sp)\n",
1489705Slinton 
1499705Slinton FLD,	FORARG,
1509705Slinton 	SANY,	TANY,
1519705Slinton 	SFLD,	ANYUSIGNED,
1529705Slinton 		0,	RNULL,
1539705Slinton 		"	extzv	$H,$S,AR,-(sp)\n",
1549705Slinton 
1559705Slinton OPLOG,	FORCC,
1569705Slinton 	SAREG|AWD,	TWORD,
1579705Slinton 	SAREG|AWD,	TWORD,
1589705Slinton 		0,	RESCC,
1599705Slinton 		"	cmpl	AL,AR\nZP",
1609705Slinton 
1619705Slinton OPLOG,	FORCC,
16219934Smckusick 	SAREG|AWD,	TSHORT,
16319934Smckusick 	SAREG|AWD,	TSHORT,
1649705Slinton 		0,	RESCC,
1659705Slinton 		"	cmpw	AL,AR\nZP",
1669705Slinton 
1679705Slinton OPLOG,	FORCC,
16819934Smckusick 	SAREG|AWD,	TUSHORT,
16919934Smckusick 	SAREG|AWD,	TUSHORT,
1709705Slinton 		0,	RESCC,
17119934Smckusick 		"	cmpw	AL,AR\nZP",
17219934Smckusick 
17319934Smckusick OPLOG,	FORCC,
17419934Smckusick 	SAREG|AWD,	TCHAR,
17519934Smckusick 	SAREG|AWD,	TCHAR,
17619934Smckusick 		0,	RESCC,
1779705Slinton 		"	cmpb	AL,AR\nZP",
1789705Slinton 
1799705Slinton OPLOG,	FORCC,
18019934Smckusick 	SAREG|AWD,	TUCHAR,
18119934Smckusick 	SAREG|AWD,	TUCHAR,
18219934Smckusick 		0,	RESCC,
18319934Smckusick 		"	cmpb	AL,AR\nZP",
18419934Smckusick 
18532971Sdonn /* optim2() handles degenerate comparisons with constants */
18619934Smckusick OPLOG,	FORCC,
18732971Sdonn 	SAREG|AWD,	TCHAR|TUCHAR|TSHORT|TUSHORT,
18832971Sdonn 	SCON,	ANYFIXED,
1899705Slinton 		0,	RESCC,
19032971Sdonn 		"	cmpZL	AL,AR\nZP",
1919705Slinton 
1929705Slinton OPLOG,	FORCC,
1939705Slinton 	SAREG|AWD,	TDOUBLE,
1949705Slinton 	SAREG|AWD,	TDOUBLE,
1959705Slinton 		0,	RESCC,
1969705Slinton 		"	cmpd	AL,AR\nZP",
1979705Slinton 
1989705Slinton OPLOG,	FORCC,
1999705Slinton 	SAREG|AWD,	TFLOAT,
2009705Slinton 	SAREG|AWD,	TFLOAT,
2019705Slinton 		0,	RESCC,
2029705Slinton 		"	cmpf	AL,AR\nZP",
2039705Slinton 
2049705Slinton CCODES,	INAREG|INTAREG,
2059705Slinton 	SANY,	TANY,
2069705Slinton 	SANY,	TANY,
2079705Slinton 		NAREG,	RESC1,
2089705Slinton 		"	movl	$1,A1\nZN",
2099705Slinton 
2109705Slinton UNARY CALL,	INTAREG,
2119705Slinton 	SCON,	TANY,
21216182Sralph 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
21316182Sralph 		NAREG|NASL,	RESC1,
21416182Sralph 		"	calls	ZC,CL\n",
21516182Sralph 
21616182Sralph UNARY CALL,	INTAREG,
2179705Slinton 	SAREG,	TANY,
2189705Slinton 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
2199705Slinton 		NAREG|NASL,	RESC1,	/* should be 0 */
2209705Slinton 		"	calls	ZC,(AL)\n",
2219705Slinton 
2229705Slinton UNARY CALL,	INAREG|INTAREG,
2239705Slinton 	SNAME,	TANY,
2249705Slinton 	SANY,	TANY,
2259705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2269705Slinton 		"	calls	ZC,*AL\n",
2279705Slinton 
2289705Slinton UNARY CALL,	INAREG|INTAREG,
2299705Slinton 	SSOREG,	TANY,
2309705Slinton 	SANY,	TANY,
2319705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2329705Slinton 		"	calls	ZC,*AL\n",
2339705Slinton 
2349705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2359705Slinton 	SAREG,	TWORD,
23632964Sdonn 	SCON,	TINT|TUNSIGNED,
2379705Slinton 		0,	RLEFT|RESCC,
2389705Slinton 		"	extzv	AR,ZU,AL,AL\n",
2399705Slinton 
2409705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2419705Slinton 	SAREG,	TWORD,
2429705Slinton 	SAREG,	ANYFIXED,
2439705Slinton 		NAREG,	RLEFT|RESCC,
2449705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2459705Slinton 
2469705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2479705Slinton 	SAREG,	TWORD,
2489705Slinton 	SAREG|AWD,	TWORD,
2499705Slinton 		NAREG,	RLEFT|RESCC,
2509705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2519705Slinton 
2529705Slinton RS,	INAREG|INTAREG|FORCC,
2539705Slinton 	SAREG,	TWORD,
25432964Sdonn 	SCON,	TINT|TUNSIGNED,
2559705Slinton 		NAREG|NASL,	RESC1|RESCC,
2569705Slinton 		"	extzv	AR,ZU,AL,A1\n",
2579705Slinton 
2589705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2599705Slinton 	SAREG|AWD,	TWORD,
2609705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2619705Slinton 		0,	RLEFT|RESCC,
2629705Slinton 		"	ashl	AR,AL,AL\n",
2639705Slinton 
2649705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2659705Slinton 	SAREG|AWD,	TWORD,
2669705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
2679705Slinton 		0,	RLEFT|RESCC,
2689705Slinton 		"	ashl	AR,AL,AL\n",
2699705Slinton 
2709705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2719705Slinton 	SAREG|AWD,	TWORD,
2729705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
2739705Slinton 		NAREG,	RLEFT|RESCC,
2749705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,AL\n",
2759705Slinton 
2769705Slinton LS,	INAREG|INTAREG|FORCC,
2779705Slinton 	SAREG|AWD,	TWORD,
2789705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2799705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
2809705Slinton 		"	ashl	AR,AL,A1\n",
2819705Slinton 
2829705Slinton LS,	INAREG|INTAREG|FORCC,
2839705Slinton 	SAREG|AWD,	TWORD,
2849705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
2859705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
2869705Slinton 		"	ashl	AR,AL,A1\n",
2879705Slinton 
2889705Slinton LS,	INAREG|INTAREG|FORCC,
2899705Slinton 	SAREG|AWD,	TWORD,
2909705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
2919705Slinton 		NAREG|NASR,	RESC1|RESCC,
2929705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,A1\n",
2939705Slinton 
2949705Slinton INCR,	FOREFF,
29532971Sdonn 	SAREG|AWD,	TANY,
29632969Sdonn 	SCON|SNAME,	TANY,
2979705Slinton 		0,	RLEFT,
2989705Slinton 		"	ZE\n",
2999705Slinton 
3009705Slinton DECR,	FOREFF,
30132971Sdonn 	SAREG|AWD,	TANY,
30232969Sdonn 	SCON|SNAME,	TANY,
3039705Slinton 		0,	RLEFT,
3049705Slinton 		"	ZE\n",
3059705Slinton 
3069705Slinton INCR,	INAREG|INTAREG,
30732971Sdonn 	SAREG|AWD,	TANY,
30832969Sdonn 	SCON|SNAME,	TANY,
3099705Slinton 		NAREG,	RESC1,
3109705Slinton 		"	ZD\n",
3119705Slinton 
3129705Slinton DECR,	INAREG|INTAREG,
31332971Sdonn 	SAREG|AWD,	TANY,
31432969Sdonn 	SCON|SNAME,	TANY,
3159705Slinton 		NAREG,	RESC1,
3169705Slinton 		"	ZD\n",
3179705Slinton 
3189705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
319*32973Sdonn 	SAREG|AWD,	TFLOAT|TDOUBLE,
320*32973Sdonn 	SAREG|AWD,	TUCHAR|TUSHORT,
321*32973Sdonn 		NAREG|NASL,	RLEFT|RESCC,
322*32973Sdonn 		"	ZA\n",
323*32973Sdonn 
324*32973Sdonn ASSIGN,	INAREG|FOREFF|FORCC,
3259705Slinton 	SAREG|AWD,	TANY,
3269705Slinton 	SAREG|AWD,	TANY,
32725582Sbloom 		0,	RLEFT|RESCC,
3289705Slinton 		"	ZA\n",
3299705Slinton 
33032958Sdonn ASSIGN,	FOREFF,
3319705Slinton 	SFLD,	TANY,
3329705Slinton 	SAREG|AWD,	TWORD,
33332958Sdonn 		0,	RNOP,
3349705Slinton 		"	insv	AR,$H,$S,AL\n",
3359705Slinton 
33632958Sdonn ASSIGN,	INAREG,
33732960Sdonn 	SFLD,	ANYSIGNED,
33832958Sdonn 	SAREG|AWD,	TWORD,
33932958Sdonn 		NAREG,	RESC1,
34032958Sdonn 		"	insv	AR,$H,$S,AL\n	extv	$H,$S,AL,A1\n",
34132958Sdonn 
34232960Sdonn ASSIGN,	INAREG,
34332960Sdonn 	SFLD,	ANYUSIGNED,
34432960Sdonn 	SAREG|AWD,	TWORD,
34532960Sdonn 		NAREG,	RESC1,
34632960Sdonn 		"	insv	AR,$H,$S,AL\n	extzv	$H,$S,AL,A1\n",
34732960Sdonn 
3489705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3499705Slinton 	SAREG|AWD,	TWORD,
3509705Slinton 	SFLD,	ANYSIGNED,
3519705Slinton 		0,	RLEFT|RESCC,
3529705Slinton 		"	extv	$H,$S,AR,AL\n",
3539705Slinton 
3549705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3559705Slinton 	SAREG|AWD,	TWORD,
3569705Slinton 	SFLD,	ANYUSIGNED,
3579705Slinton 		0,	RLEFT|RESCC,
3589705Slinton 		"	extzv	$H,$S,AR,AL\n",
3599705Slinton 
3609705Slinton /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
3619705Slinton UNARY MUL,	FOREFF,
3629705Slinton 	SCC,	TANY,
3639705Slinton 	SCC,	TANY,
3649705Slinton 		0,	RNULL,
3659705Slinton 		"	HELP HELP HELP\n",
3669705Slinton 
36732959Sdonn OREG,	INTEMP,
36832959Sdonn 	SANY,	TANY,
36932959Sdonn 	SOREG,	TDOUBLE,
37032959Sdonn 		2*NTEMP,	RESC1,
37132971Sdonn 		"	movq	AR,A1\n",
37232959Sdonn 
37332959Sdonn OREG,	INTEMP,
37432959Sdonn 	SANY,	TANY,
37532959Sdonn 	SOREG,	TANY,
37632959Sdonn 		NTEMP,	RESC1,
37732959Sdonn 		"	movZF	AR,A1\n",
37832959Sdonn 
3799705Slinton REG,	INTEMP,
3809705Slinton 	SANY,	TANY,
3819705Slinton 	SAREG,	TDOUBLE,
3829705Slinton 		2*NTEMP,	RESC1,
38332971Sdonn 		"	movq	AR,A1\n",
3849705Slinton 
3859705Slinton REG,	INTEMP,
3869705Slinton 	SANY,	TANY,
3879705Slinton 	SAREG,	TANY,
3889705Slinton 		NTEMP,	RESC1,
3899705Slinton 		"	movZF	AR,A1\n",
3909705Slinton 
39117740Sralph #if defined(FORT) || defined(SPRECC)
39217740Sralph REG,	FORARG,
3939705Slinton 	SANY,	TANY,
3949705Slinton 	SAREG,	TFLOAT,
3959705Slinton 		0,	RNULL,
3969705Slinton 		"	cvtfd	AR,-(sp)\n",
3979705Slinton 
3989705Slinton REG,	FORARG,
3999705Slinton 	SANY,	TANY,
4009705Slinton 	SAREG,	TDOUBLE,
4019705Slinton 		0,	RNULL,
40232971Sdonn 		"	movq	AR,-(sp)\n",
4039705Slinton #endif
4049705Slinton 
4059705Slinton OPLEAF,	FOREFF,
4069705Slinton 	SANY,	TANY,
4079705Slinton 	SAREG|AWD,	TANY,
4089705Slinton 		0,	RLEFT,
4099705Slinton 		"",
4109705Slinton 
4119705Slinton OPLTYPE,	INAREG|INTAREG,
4129705Slinton 	SANY,	TANY,
4139705Slinton 	SANY,	TANY,
4149705Slinton 		NAREG|NASR,	RESC1,
4159705Slinton 		"	ZA\n",
4169705Slinton 
4179705Slinton OPLTYPE,	FORCC,
4189705Slinton 	SANY,	TANY,
4199705Slinton 	SANY,	TANY,
4209705Slinton 		0,	RESCC,
4219705Slinton 		"	tstZR	AR\n",
4229705Slinton 
4239705Slinton OPLTYPE,	FORARG,
4249705Slinton 	SANY,	TANY,
4259705Slinton 	SANY,	TANY,
4269705Slinton 		0,	RNULL,
42732970Sdonn 		"	ZV\n",
4289705Slinton 
42917740Sralph #if defined(FORT) || defined(SPRECC)
4309705Slinton UNARY MINUS,	INTAREG|FORCC,
43124417Smckusick 	SAREG|AWD,	TFLOAT,
43216182Sralph 	SANY,	TANY,
43316182Sralph 		NAREG|NASL,	RESC1|RESCC,
43416182Sralph 		"	mnegZL	TAL,A1\n",
43516182Sralph 
43624417Smckusick #endif
43716182Sralph 
43816182Sralph UNARY MINUS,	INTAREG|FORCC,
43932971Sdonn 	SAREG|AWD,	TWORD|TDOUBLE,
4409705Slinton 	SANY,	TANY,
4419705Slinton 		NAREG|NASL,	RESC1|RESCC,
4429705Slinton 		"	mnegZL	AL,A1\n",
4439705Slinton 
4449705Slinton COMPL,	INTAREG|FORCC,
44532971Sdonn 	SAREG|AWD,	TWORD,
4469705Slinton 	SANY,	TANY,
4479705Slinton 		NAREG|NASL,	RESC1|RESCC,
4489705Slinton 		"	mcomZL	AL,A1\n",
4499705Slinton 
4509705Slinton AND,	FORCC,
45132971Sdonn 	SAREG|AWD,	TCHAR|TSHORT,
45232971Sdonn 	SCON,	ANYFIXED,
45332971Sdonn 		NAREG|NASL,	RESCC,
45432971Sdonn 		"	ZZ\n",
4559705Slinton 
4569705Slinton AND,	FORCC,
45732971Sdonn 	SAREG|AWD,	TWORD|ANYUSIGNED,
45832971Sdonn 	SCON,	ANYFIXED,
4599705Slinton 		0,	RESCC,
46032971Sdonn 		"	ZZ\n",
4619705Slinton 
4629705Slinton ASG AND,	INAREG|FOREFF|FORCC,
4639705Slinton 	SAREG,	TWORD,
4649705Slinton 	SCON,	TWORD,
4659705Slinton 		0,	RLEFT|RESCC,
4669705Slinton 		"	bicl2	AR,AL\n",
4679705Slinton 
46832971Sdonn /* General cases for DIV and ASG DIV are handled below with OPMUL */
46932971Sdonn /* Some special cases are handled in optim2() */
47032971Sdonn 
47132962Sdonn DIV,	INAREG|FOREFF|FORCC,
47232962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
47332967Sdonn 	SCON,	ANYUSIGNED,
47432962Sdonn 		NAREG|NEVEN,	RESC1|RESCC,
47532963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,U1\n",
47632962Sdonn 
47732962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
47832971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
47932967Sdonn 	SMCON,	ANYUSIGNED,
48032962Sdonn 		0,	RLEFT|RESCC,
48132962Sdonn 		"	ZJ\n",
48232962Sdonn 
48332962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
48432971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
48532967Sdonn 	SCON,	ANYUSIGNED,
48632962Sdonn 		NAREG|NEVEN,	RLEFT|RESCC,
48732963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,AL,U1\n",
48832962Sdonn 
48932962Sdonn MOD,	INAREG|INTAREG,
49032962Sdonn 	SAREG|AWD,	TINT|TLONG,
49132962Sdonn 	SAREG|AWD,	TINT|TLONG,
49232962Sdonn 		NAREG,	RESC1,
49332962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl3	A1,AL,A1\n",
49432962Sdonn 
49532962Sdonn MOD,	INAREG|FOREFF,
49632962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
49732967Sdonn 	SMCON,	ANYUSIGNED,
49832962Sdonn 		NAREG|NASL,	RLEFT|RESC1,
49932962Sdonn 		"	ZJ\n",
50032962Sdonn 
50132962Sdonn MOD,	INAREG|FOREFF,
50232962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
50332967Sdonn 	SCON,	ANYUSIGNED,
50432971Sdonn 		NAREG|NEVEN,	RESC1,
50532963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,U1,A1\n",
50632962Sdonn 
50732967Sdonn /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
50832967Sdonn ASG MOD,	INAREG|FOREFF|FORCC,
50932967Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
51032962Sdonn 	SAREG|AWD,	TINT|TLONG,
51132962Sdonn 		NAREG,	RLEFT|RESCC,
51232962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl2	A1,AL\n",
51332962Sdonn 
51432962Sdonn ASG MOD,	INAREG|FOREFF,
51532971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
51632967Sdonn 	SMCON,	ANYUSIGNED,
51732971Sdonn 		0,	RLEFT,
51832962Sdonn 		"	ZJ\n",
51932962Sdonn 
52032962Sdonn ASG MOD,	INAREG|FOREFF,
52132971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
52232967Sdonn 	SCON,	ANYUSIGNED,
52332971Sdonn 		NAREG|NEVEN,	RLEFT,
52432963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,AL\n",
52532962Sdonn 
5269705Slinton ASG OPMUL,	INAREG|FOREFF|FORCC,
5279705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5289705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5299705Slinton 		0,	RLEFT|RESCC,
5309705Slinton 		"	OL2	AR,AL\n",
5319705Slinton 
5329705Slinton OPMUL,	INAREG|INTAREG|FORCC,
5339705Slinton 	STAREG,	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 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5409705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5419705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
5429705Slinton 		"	OL3	AR,AL,A1\n",
5439705Slinton 
5449705Slinton ASG PLUS,	INAREG|FOREFF|FORCC,
54532971Sdonn 	SAREG|AWD,	ANYFIXED,
54632971Sdonn 	SONE,	TANY,
5479705Slinton 		0,	RLEFT|RESCC,
5489705Slinton 		"	incZL	AL\n",
5499705Slinton 
5509705Slinton ASG MINUS,	INAREG|FOREFF|FORCC,
55132971Sdonn 	SAREG|AWD,	ANYFIXED,
55232971Sdonn 	SONE,	TANY,
5539705Slinton 		0,	RLEFT|RESCC,
5549705Slinton 		"	decZL	AL\n",
5559705Slinton 
5569705Slinton PLUS,	INAREG|INTAREG|FORCC,
5579705Slinton 	STAREG,	TWORD,
5589705Slinton 	SONE,	TWORD,
5599705Slinton 		0,	RLEFT|RESCC,
5609705Slinton 		"	incZL	AL\n",
5619705Slinton 
5629705Slinton MINUS,	INAREG|INTAREG|FORCC,
5639705Slinton 	STAREG,	TWORD,
5649705Slinton 	SONE,	TWORD,
5659705Slinton 		0,	RLEFT|RESCC,
5669705Slinton 		"	decZL	AL\n",
5679705Slinton 
5689705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5699705Slinton 	SAREG|AWD,	TWORD,
5709705Slinton 	SAREG|AWD,	TWORD,
5719705Slinton 		0,	RLEFT|RESCC,
5729705Slinton 		"	OL2	AR,AL\n",
5739705Slinton 
5749705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5759705Slinton 	AWD,	TSHORT|TUSHORT,
57632971Sdonn 	SAREG|SNAME|STARNM,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5779705Slinton 		0,	RLEFT|RESCC,
5789705Slinton 		"	OW2	AR,AL\n",
5799705Slinton 
5809705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5819705Slinton 	AWD,	TSHORT|TUSHORT,
58232971Sdonn 	SSOREG,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5839705Slinton 		0,	RLEFT|RESCC,
5849705Slinton 		"	OW2	AR,AL\n",
5859705Slinton 
5869705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
58732961Sdonn 	AWD,	TSHORT|TUSHORT,
58832961Sdonn 	SSCON,	ANYFIXED,
58932961Sdonn 		0,	RLEFT|RESCC,
59032961Sdonn 		"	OW2	AR,AL\n",
59132961Sdonn 
59232961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
59332961Sdonn 	AWD,	TSHORT|TUSHORT,
59432961Sdonn 	AWD,	TSHORT|TUSHORT,
59532961Sdonn 		0,	RLEFT|RESCC,
59632961Sdonn 		"	OW2	AR,AL\n",
59732961Sdonn 
59832961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
5999705Slinton 	AWD,	TCHAR|TUCHAR,
60032961Sdonn 	SSOREG,	ANYFIXED,
6019705Slinton 		0,	RLEFT|RESCC,
6029705Slinton 		"	OB2	AR,AL\n",
6039705Slinton 
6049705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
6059705Slinton 	AWD,	TCHAR|TUCHAR,
60632961Sdonn 	SAREG|SNAME|STARNM,	ANYFIXED,
6079705Slinton 		0,	RLEFT|RESCC,
6089705Slinton 		"	OB2	AR,AL\n",
6099705Slinton 
6109705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
61132961Sdonn 	AWD,	TCHAR|TUCHAR,
61232961Sdonn 	SCCON,	ANYFIXED,
61332961Sdonn 		0,	RLEFT|RESCC,
61432961Sdonn 		"	OB2	AR,AL\n",
61532961Sdonn 
61632961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
61732961Sdonn 	AWD,	TCHAR|TUCHAR,
61832961Sdonn 	AWD,	TCHAR|TUCHAR,
61932961Sdonn 		0,	RLEFT|RESCC,
62032961Sdonn 		"	OB2	AR,AL\n",
62132961Sdonn 
6229705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6239705Slinton 	STAREG,	ANYFIXED,
6249705Slinton 	SAREG|AWD,	TWORD,
6259705Slinton 		0,	RLEFT|RESCC,
6269705Slinton 		"	OL2	AR,AL\n",
6279705Slinton 
6289705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6299705Slinton 	SAREG|AWD,	TWORD,
6309705Slinton 	SAREG|AWD,	TWORD,
6319705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6329705Slinton 		"	OL3	AR,AL,A1\n",
6339705Slinton 
6349705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6359705Slinton 	SAREG|AWD,	TDOUBLE,
6369705Slinton 	SAREG|AWD,	TDOUBLE,
6379705Slinton 		0,	RLEFT|RESCC,
6389705Slinton 		"	OD2	AR,AL\n",
6399705Slinton 
6409705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6419705Slinton 	SAREG|AWD,	TFLOAT,
6429705Slinton 	SAREG|AWD,	TFLOAT,
6439705Slinton 		0,	RLEFT|RESCC,
64417740Sralph #if defined(FORT) || defined(SPRECC)
64516937Sralph 		"	OF2	AR,TAL\n",
64616937Sralph #else
6479705Slinton 		"	OF2	AR,AL\n",
64816937Sralph #endif
6499705Slinton 
6509705Slinton ASG OPFLOAT,	INAREG|INTAREG|FOREFF|FORCC,
6519705Slinton 	SAREG|AWD,	TFLOAT,
6529705Slinton 	SAREG|AWD,	TDOUBLE,
6539705Slinton 		NAREG,	RLEFT|RESC1|RESCC,
6549705Slinton 		"	cvtfd	AL,A1\n	OD2	AR,A1\n	cvtdf	A1,AL\n",
6559705Slinton 
65625753Sdonn ASG OPFLOAT,	INAREG|FOREFF|FORCC,
65725753Sdonn 	SAREG|AWD,	ANYFIXED,
65825753Sdonn #ifndef SPRECC
65925753Sdonn 	SAREG|AWD,	TDOUBLE,		/* force FLOAT to register */
66025753Sdonn #else
66125753Sdonn 	SAREG|AWD,	TFLOAT|TDOUBLE,
66225753Sdonn #endif
66325753Sdonn 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
66425753Sdonn 		"	ZG\n",
66525753Sdonn 
6669705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6679705Slinton 	STAREG,	TDOUBLE,
6689705Slinton 	SAREG|AWD,	TDOUBLE,
6699705Slinton 		0,	RLEFT|RESCC,
6709705Slinton 		"	OD2	AR,AL\n",
6719705Slinton 
6729705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6739705Slinton 	SAREG|AWD,	TDOUBLE,
6749705Slinton 	SAREG|AWD,	TDOUBLE,
6759705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6769705Slinton 		"	OD3	AR,AL,A1\n",
6779705Slinton 
67817740Sralph #if defined(FORT) || defined(SPRECC)
6799705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
68016937Sralph 	STAREG,		TFLOAT,
68116937Sralph 	SAREG|AWD,	TFLOAT,
6829705Slinton 		0,	RLEFT|RESCC,
68316937Sralph 		"	OF2	AR,TAL\n",
6849705Slinton 
6859705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6869705Slinton 	SAREG|AWD,	TFLOAT,
6879705Slinton 	SAREG|AWD,	TFLOAT,
6889705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6899705Slinton 		"	OF3	AR,AL,TA1\n",
6909705Slinton #endif
6919705Slinton 
6929705Slinton 	/* Default actions for hard trees ... */
6939705Slinton 
6949705Slinton # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
6959705Slinton 
6969705Slinton UNARY MUL, DF( UNARY MUL ),
6979705Slinton 
6989705Slinton INCR, DF(INCR),
6999705Slinton 
7009705Slinton DECR, DF(INCR),
7019705Slinton 
7029705Slinton ASSIGN, DF(ASSIGN),
7039705Slinton 
7049705Slinton STASG, DF(STASG),
7059705Slinton 
7069705Slinton FLD, DF(FLD),
7079705Slinton 
7089705Slinton OPLEAF, DF(NAME),
7099705Slinton 
7109705Slinton OPLOG,	FORCC,
7119705Slinton 	SANY,	TANY,
7129705Slinton 	SANY,	TANY,
7139705Slinton 		REWRITE,	BITYPE,
7149705Slinton 		"",
7159705Slinton 
7169705Slinton OPLOG,	DF(NOT),
7179705Slinton 
7189705Slinton COMOP, DF(COMOP),
7199705Slinton 
7209705Slinton INIT, DF(INIT),
7219705Slinton 
7229705Slinton OPUNARY, DF(UNARY MINUS),
7239705Slinton 
7249705Slinton ASG OPANY, DF(ASG PLUS),
7259705Slinton 
7269705Slinton OPANY, DF(BITYPE),
7279705Slinton 
7289705Slinton FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
729