xref: /csrg-svn/old/pcc/ccom.vax/table.c (revision 34249)
117740Sralph #ifndef lint
2*34249Sdonn static char *sccsid ="@(#)table.c	1.33 (Berkeley) 05/11/88";
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,
6432973Sdonn 		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 
20432975Sdonn #ifdef FORT
20532975Sdonn /* this really ought to be taken care of farther upstream... XXX */
20632975Sdonn OPLOG,	FORCC,
20732975Sdonn 	SAREG|AWD,	TFLOAT,
20832975Sdonn 	SAREG|AWD,	TDOUBLE,
20932975Sdonn 		NAREG|NASL,	RESCC,
21032975Sdonn 		"	cvtfd	AL,A1\n	cmpd	A1,AR\nZP",
21132975Sdonn 
21232975Sdonn OPLOG,	FORCC,
21332975Sdonn 	SAREG|AWD,	TDOUBLE,
21432975Sdonn 	SAREG|AWD,	TFLOAT,
21532975Sdonn 		NAREG|NASR,	RESCC,
21632975Sdonn 		"	cvtfd	AR,A1\n	cmpd	AL,A1\nZP",
21732975Sdonn #endif
21832975Sdonn 
2199705Slinton CCODES,	INAREG|INTAREG,
2209705Slinton 	SANY,	TANY,
2219705Slinton 	SANY,	TANY,
2229705Slinton 		NAREG,	RESC1,
2239705Slinton 		"	movl	$1,A1\nZN",
2249705Slinton 
2259705Slinton UNARY CALL,	INTAREG,
2269705Slinton 	SCON,	TANY,
22716182Sralph 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
22816182Sralph 		NAREG|NASL,	RESC1,
22916182Sralph 		"	calls	ZC,CL\n",
23016182Sralph 
23116182Sralph UNARY CALL,	INTAREG,
2329705Slinton 	SAREG,	TANY,
2339705Slinton 	SANY,	TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
2349705Slinton 		NAREG|NASL,	RESC1,	/* should be 0 */
2359705Slinton 		"	calls	ZC,(AL)\n",
2369705Slinton 
2379705Slinton UNARY CALL,	INAREG|INTAREG,
2389705Slinton 	SNAME,	TANY,
2399705Slinton 	SANY,	TANY,
2409705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2419705Slinton 		"	calls	ZC,*AL\n",
2429705Slinton 
2439705Slinton UNARY CALL,	INAREG|INTAREG,
2449705Slinton 	SSOREG,	TANY,
2459705Slinton 	SANY,	TANY,
2469705Slinton 		NAREG|NASL,	RESC1,	/* really reg 0 */
2479705Slinton 		"	calls	ZC,*AL\n",
2489705Slinton 
2499705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2509705Slinton 	SAREG,	TWORD,
25132964Sdonn 	SCON,	TINT|TUNSIGNED,
2529705Slinton 		0,	RLEFT|RESCC,
2539705Slinton 		"	extzv	AR,ZU,AL,AL\n",
2549705Slinton 
2559705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2569705Slinton 	SAREG,	TWORD,
2579705Slinton 	SAREG,	ANYFIXED,
2589705Slinton 		NAREG,	RLEFT|RESCC,
2599705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2609705Slinton 
2619705Slinton ASG RS,	INAREG|FOREFF|FORCC,
2629705Slinton 	SAREG,	TWORD,
2639705Slinton 	SAREG|AWD,	TWORD,
2649705Slinton 		NAREG,	RLEFT|RESCC,
2659705Slinton 		"	subl3	AR,$32,A1\n	extzv	AR,A1,AL,AL\n",
2669705Slinton 
2679705Slinton RS,	INAREG|INTAREG|FORCC,
2689705Slinton 	SAREG,	TWORD,
26932964Sdonn 	SCON,	TINT|TUNSIGNED,
2709705Slinton 		NAREG|NASL,	RESC1|RESCC,
2719705Slinton 		"	extzv	AR,ZU,AL,A1\n",
2729705Slinton 
2739705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2749705Slinton 	SAREG|AWD,	TWORD,
2759705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2769705Slinton 		0,	RLEFT|RESCC,
2779705Slinton 		"	ashl	AR,AL,AL\n",
2789705Slinton 
2799705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2809705Slinton 	SAREG|AWD,	TWORD,
2819705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
2829705Slinton 		0,	RLEFT|RESCC,
2839705Slinton 		"	ashl	AR,AL,AL\n",
2849705Slinton 
2859705Slinton ASG LS,	INAREG|FOREFF|FORCC,
2869705Slinton 	SAREG|AWD,	TWORD,
2879705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
2889705Slinton 		NAREG,	RLEFT|RESCC,
2899705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,AL\n",
2909705Slinton 
2919705Slinton LS,	INAREG|INTAREG|FORCC,
2929705Slinton 	SAREG|AWD,	TWORD,
2939705Slinton 	SAREG|NIAWD,	ANYSIGNED|ANYUSIGNED,
2949705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
2959705Slinton 		"	ashl	AR,AL,A1\n",
2969705Slinton 
2979705Slinton LS,	INAREG|INTAREG|FORCC,
2989705Slinton 	SAREG|AWD,	TWORD,
2999705Slinton 	SSOREG,	ANYSIGNED|ANYUSIGNED,
3009705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
3019705Slinton 		"	ashl	AR,AL,A1\n",
3029705Slinton 
3039705Slinton LS,	INAREG|INTAREG|FORCC,
3049705Slinton 	SAREG|AWD,	TWORD,
3059705Slinton 	SOREG,	ANYSIGNED|ANYUSIGNED,
3069705Slinton 		NAREG|NASR,	RESC1|RESCC,
3079705Slinton 		"	ZB	AR,A1\n	ashl	A1,AL,A1\n",
3089705Slinton 
3099705Slinton INCR,	FOREFF,
31032971Sdonn 	SAREG|AWD,	TANY,
31132969Sdonn 	SCON|SNAME,	TANY,
3129705Slinton 		0,	RLEFT,
3139705Slinton 		"	ZE\n",
3149705Slinton 
3159705Slinton DECR,	FOREFF,
31632971Sdonn 	SAREG|AWD,	TANY,
31732969Sdonn 	SCON|SNAME,	TANY,
3189705Slinton 		0,	RLEFT,
3199705Slinton 		"	ZE\n",
3209705Slinton 
3219705Slinton INCR,	INAREG|INTAREG,
32232971Sdonn 	SAREG|AWD,	TANY,
32332969Sdonn 	SCON|SNAME,	TANY,
3249705Slinton 		NAREG,	RESC1,
3259705Slinton 		"	ZD\n",
3269705Slinton 
3279705Slinton DECR,	INAREG|INTAREG,
32832971Sdonn 	SAREG|AWD,	TANY,
32932969Sdonn 	SCON|SNAME,	TANY,
3309705Slinton 		NAREG,	RESC1,
3319705Slinton 		"	ZD\n",
3329705Slinton 
3339705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
33432973Sdonn 	SAREG|AWD,	TFLOAT|TDOUBLE,
33532973Sdonn 	SAREG|AWD,	TUCHAR|TUSHORT,
33633765Sdonn 		NAREG|NASR,	RLEFT|RESCC,
33732973Sdonn 		"	ZA\n",
33832973Sdonn 
33932973Sdonn ASSIGN,	INAREG|FOREFF|FORCC,
3409705Slinton 	SAREG|AWD,	TANY,
3419705Slinton 	SAREG|AWD,	TANY,
34225582Sbloom 		0,	RLEFT|RESCC,
3439705Slinton 		"	ZA\n",
3449705Slinton 
34532958Sdonn ASSIGN,	FOREFF,
3469705Slinton 	SFLD,	TANY,
3479705Slinton 	SAREG|AWD,	TWORD,
34832958Sdonn 		0,	RNOP,
3499705Slinton 		"	insv	AR,$H,$S,AL\n",
3509705Slinton 
35132958Sdonn ASSIGN,	INAREG,
35232960Sdonn 	SFLD,	ANYSIGNED,
35332958Sdonn 	SAREG|AWD,	TWORD,
35432958Sdonn 		NAREG,	RESC1,
35532958Sdonn 		"	insv	AR,$H,$S,AL\n	extv	$H,$S,AL,A1\n",
35632958Sdonn 
35732960Sdonn ASSIGN,	INAREG,
35832960Sdonn 	SFLD,	ANYUSIGNED,
35932960Sdonn 	SAREG|AWD,	TWORD,
36032960Sdonn 		NAREG,	RESC1,
36132960Sdonn 		"	insv	AR,$H,$S,AL\n	extzv	$H,$S,AL,A1\n",
36232960Sdonn 
3639705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3649705Slinton 	SAREG|AWD,	TWORD,
3659705Slinton 	SFLD,	ANYSIGNED,
3669705Slinton 		0,	RLEFT|RESCC,
3679705Slinton 		"	extv	$H,$S,AR,AL\n",
3689705Slinton 
3699705Slinton ASSIGN,	INAREG|FOREFF|FORCC,
3709705Slinton 	SAREG|AWD,	TWORD,
3719705Slinton 	SFLD,	ANYUSIGNED,
3729705Slinton 		0,	RLEFT|RESCC,
3739705Slinton 		"	extzv	$H,$S,AR,AL\n",
3749705Slinton 
3759705Slinton /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
3769705Slinton UNARY MUL,	FOREFF,
3779705Slinton 	SCC,	TANY,
3789705Slinton 	SCC,	TANY,
3799705Slinton 		0,	RNULL,
3809705Slinton 		"	HELP HELP HELP\n",
3819705Slinton 
38232959Sdonn OREG,	INTEMP,
38332959Sdonn 	SANY,	TANY,
38432959Sdonn 	SOREG,	TDOUBLE,
38532959Sdonn 		2*NTEMP,	RESC1,
38632971Sdonn 		"	movq	AR,A1\n",
38732959Sdonn 
38832959Sdonn OREG,	INTEMP,
38932959Sdonn 	SANY,	TANY,
39032959Sdonn 	SOREG,	TANY,
39132959Sdonn 		NTEMP,	RESC1,
392*34249Sdonn 		"	movZR	AR,A1\n",
39332959Sdonn 
3949705Slinton REG,	INTEMP,
3959705Slinton 	SANY,	TANY,
3969705Slinton 	SAREG,	TDOUBLE,
3979705Slinton 		2*NTEMP,	RESC1,
39832971Sdonn 		"	movq	AR,A1\n",
3999705Slinton 
4009705Slinton REG,	INTEMP,
4019705Slinton 	SANY,	TANY,
4029705Slinton 	SAREG,	TANY,
4039705Slinton 		NTEMP,	RESC1,
4049705Slinton 		"	movZF	AR,A1\n",
4059705Slinton 
40617740Sralph #if defined(FORT) || defined(SPRECC)
40717740Sralph REG,	FORARG,
4089705Slinton 	SANY,	TANY,
4099705Slinton 	SAREG,	TFLOAT,
4109705Slinton 		0,	RNULL,
4119705Slinton 		"	cvtfd	AR,-(sp)\n",
4129705Slinton 
4139705Slinton REG,	FORARG,
4149705Slinton 	SANY,	TANY,
4159705Slinton 	SAREG,	TDOUBLE,
4169705Slinton 		0,	RNULL,
41732971Sdonn 		"	movq	AR,-(sp)\n",
4189705Slinton #endif
4199705Slinton 
4209705Slinton OPLEAF,	FOREFF,
4219705Slinton 	SANY,	TANY,
4229705Slinton 	SAREG|AWD,	TANY,
4239705Slinton 		0,	RLEFT,
4249705Slinton 		"",
4259705Slinton 
4269705Slinton OPLTYPE,	INAREG|INTAREG,
4279705Slinton 	SANY,	TANY,
4289705Slinton 	SANY,	TANY,
4299705Slinton 		NAREG|NASR,	RESC1,
4309705Slinton 		"	ZA\n",
4319705Slinton 
4329705Slinton OPLTYPE,	FORCC,
4339705Slinton 	SANY,	TANY,
4349705Slinton 	SANY,	TANY,
4359705Slinton 		0,	RESCC,
4369705Slinton 		"	tstZR	AR\n",
4379705Slinton 
4389705Slinton OPLTYPE,	FORARG,
4399705Slinton 	SANY,	TANY,
4409705Slinton 	SANY,	TANY,
4419705Slinton 		0,	RNULL,
44232970Sdonn 		"	ZV\n",
4439705Slinton 
44417740Sralph #if defined(FORT) || defined(SPRECC)
4459705Slinton UNARY MINUS,	INTAREG|FORCC,
44624417Smckusick 	SAREG|AWD,	TFLOAT,
44716182Sralph 	SANY,	TANY,
44816182Sralph 		NAREG|NASL,	RESC1|RESCC,
44916182Sralph 		"	mnegZL	TAL,A1\n",
45016182Sralph 
45124417Smckusick #endif
45216182Sralph 
45316182Sralph UNARY MINUS,	INTAREG|FORCC,
45432971Sdonn 	SAREG|AWD,	TWORD|TDOUBLE,
4559705Slinton 	SANY,	TANY,
4569705Slinton 		NAREG|NASL,	RESC1|RESCC,
4579705Slinton 		"	mnegZL	AL,A1\n",
4589705Slinton 
4599705Slinton COMPL,	INTAREG|FORCC,
46032971Sdonn 	SAREG|AWD,	TWORD,
4619705Slinton 	SANY,	TANY,
4629705Slinton 		NAREG|NASL,	RESC1|RESCC,
4639705Slinton 		"	mcomZL	AL,A1\n",
4649705Slinton 
4659705Slinton AND,	FORCC,
46632971Sdonn 	SAREG|AWD,	TCHAR|TSHORT,
46732971Sdonn 	SCON,	ANYFIXED,
46832971Sdonn 		NAREG|NASL,	RESCC,
46932971Sdonn 		"	ZZ\n",
4709705Slinton 
4719705Slinton AND,	FORCC,
47232971Sdonn 	SAREG|AWD,	TWORD|ANYUSIGNED,
47332971Sdonn 	SCON,	ANYFIXED,
4749705Slinton 		0,	RESCC,
47532971Sdonn 		"	ZZ\n",
4769705Slinton 
4779705Slinton ASG AND,	INAREG|FOREFF|FORCC,
4789705Slinton 	SAREG,	TWORD,
4799705Slinton 	SCON,	TWORD,
4809705Slinton 		0,	RLEFT|RESCC,
4819705Slinton 		"	bicl2	AR,AL\n",
4829705Slinton 
48332971Sdonn /* General cases for DIV and ASG DIV are handled below with OPMUL */
48432971Sdonn /* Some special cases are handled in optim2() */
48532971Sdonn 
48632962Sdonn DIV,	INAREG|FOREFF|FORCC,
48732962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
48832967Sdonn 	SCON,	ANYUSIGNED,
48932962Sdonn 		NAREG|NEVEN,	RESC1|RESCC,
49032963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,U1\n",
49132962Sdonn 
49232962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
49332971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
49432967Sdonn 	SMCON,	ANYUSIGNED,
49532962Sdonn 		0,	RLEFT|RESCC,
49632962Sdonn 		"	ZJ\n",
49732962Sdonn 
49832962Sdonn ASG DIV,	INAREG|FOREFF|FORCC,
49932971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
50032967Sdonn 	SCON,	ANYUSIGNED,
50132962Sdonn 		NAREG|NEVEN,	RLEFT|RESCC,
50232963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,AL,U1\n",
50332962Sdonn 
50432962Sdonn MOD,	INAREG|INTAREG,
50532962Sdonn 	SAREG|AWD,	TINT|TLONG,
50632962Sdonn 	SAREG|AWD,	TINT|TLONG,
50732962Sdonn 		NAREG,	RESC1,
50832962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl3	A1,AL,A1\n",
50932962Sdonn 
51032962Sdonn MOD,	INAREG|FOREFF,
51132962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
51232967Sdonn 	SMCON,	ANYUSIGNED,
51332962Sdonn 		NAREG|NASL,	RLEFT|RESC1,
51432962Sdonn 		"	ZJ\n",
51532962Sdonn 
51632962Sdonn MOD,	INAREG|FOREFF,
51732962Sdonn 	SAREG|AWD,	TUNSIGNED|TULONG,
51832967Sdonn 	SCON,	ANYUSIGNED,
51932971Sdonn 		NAREG|NEVEN,	RESC1,
52032963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,U1,A1\n",
52132962Sdonn 
52232967Sdonn /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
52332967Sdonn ASG MOD,	INAREG|FOREFF|FORCC,
52432967Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
52532962Sdonn 	SAREG|AWD,	TINT|TLONG,
52632962Sdonn 		NAREG,	RLEFT|RESCC,
52732962Sdonn 		"	divl3	AR,AL,A1\n	mull2	AR,A1\n	subl2	A1,AL\n",
52832962Sdonn 
52932962Sdonn ASG MOD,	INAREG|FOREFF,
53032971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
53132967Sdonn 	SMCON,	ANYUSIGNED,
53232971Sdonn 		0,	RLEFT,
53332962Sdonn 		"	ZJ\n",
53432962Sdonn 
53532962Sdonn ASG MOD,	INAREG|FOREFF,
53632971Sdonn 	SAREG|AWD,	TINT|TLONG|TUNSIGNED|TULONG,
53732967Sdonn 	SCON,	ANYUSIGNED,
53832971Sdonn 		NAREG|NEVEN,	RLEFT,
53932963Sdonn 		"	movl	AL,A1\n	clrl	U1\n	ediv	AR,A1,A1,AL\n",
54032962Sdonn 
5419705Slinton ASG OPMUL,	INAREG|FOREFF|FORCC,
5429705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5439705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5449705Slinton 		0,	RLEFT|RESCC,
5459705Slinton 		"	OL2	AR,AL\n",
5469705Slinton 
5479705Slinton OPMUL,	INAREG|INTAREG|FORCC,
5489705Slinton 	STAREG,	TINT|TUNSIGNED|TLONG|TULONG,
5499705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5509705Slinton 		0,	RLEFT|RESCC,
5519705Slinton 		"	OL2	AR,AL\n",
5529705Slinton 
5539705Slinton OPMUL,	INAREG|INTAREG|FORCC,
5549705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5559705Slinton 	SAREG|AWD,	TINT|TUNSIGNED|TLONG|TULONG,
5569705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
5579705Slinton 		"	OL3	AR,AL,A1\n",
5589705Slinton 
5599705Slinton ASG PLUS,	INAREG|FOREFF|FORCC,
56032971Sdonn 	SAREG|AWD,	ANYFIXED,
56132971Sdonn 	SONE,	TANY,
5629705Slinton 		0,	RLEFT|RESCC,
5639705Slinton 		"	incZL	AL\n",
5649705Slinton 
5659705Slinton ASG MINUS,	INAREG|FOREFF|FORCC,
56632971Sdonn 	SAREG|AWD,	ANYFIXED,
56732971Sdonn 	SONE,	TANY,
5689705Slinton 		0,	RLEFT|RESCC,
5699705Slinton 		"	decZL	AL\n",
5709705Slinton 
5719705Slinton PLUS,	INAREG|INTAREG|FORCC,
5729705Slinton 	STAREG,	TWORD,
5739705Slinton 	SONE,	TWORD,
5749705Slinton 		0,	RLEFT|RESCC,
5759705Slinton 		"	incZL	AL\n",
5769705Slinton 
5779705Slinton MINUS,	INAREG|INTAREG|FORCC,
5789705Slinton 	STAREG,	TWORD,
5799705Slinton 	SONE,	TWORD,
5809705Slinton 		0,	RLEFT|RESCC,
5819705Slinton 		"	decZL	AL\n",
5829705Slinton 
5839705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5849705Slinton 	SAREG|AWD,	TWORD,
5859705Slinton 	SAREG|AWD,	TWORD,
5869705Slinton 		0,	RLEFT|RESCC,
5879705Slinton 		"	OL2	AR,AL\n",
5889705Slinton 
5899705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5909705Slinton 	AWD,	TSHORT|TUSHORT,
59132971Sdonn 	SAREG|SNAME|STARNM,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5929705Slinton 		0,	RLEFT|RESCC,
5939705Slinton 		"	OW2	AR,AL\n",
5949705Slinton 
5959705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
5969705Slinton 	AWD,	TSHORT|TUSHORT,
59732971Sdonn 	SSOREG,	TSHORT|TUSHORT|TINT|TUNSIGNED|TLONG|TULONG,
5989705Slinton 		0,	RLEFT|RESCC,
5999705Slinton 		"	OW2	AR,AL\n",
6009705Slinton 
6019705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
60232961Sdonn 	AWD,	TSHORT|TUSHORT,
60332961Sdonn 	SSCON,	ANYFIXED,
60432961Sdonn 		0,	RLEFT|RESCC,
60532961Sdonn 		"	OW2	AR,AL\n",
60632961Sdonn 
60732961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
60832961Sdonn 	AWD,	TSHORT|TUSHORT,
60932961Sdonn 	AWD,	TSHORT|TUSHORT,
61032961Sdonn 		0,	RLEFT|RESCC,
61132961Sdonn 		"	OW2	AR,AL\n",
61232961Sdonn 
61332961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
6149705Slinton 	AWD,	TCHAR|TUCHAR,
61532961Sdonn 	SSOREG,	ANYFIXED,
6169705Slinton 		0,	RLEFT|RESCC,
6179705Slinton 		"	OB2	AR,AL\n",
6189705Slinton 
6199705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
6209705Slinton 	AWD,	TCHAR|TUCHAR,
62132961Sdonn 	SAREG|SNAME|STARNM,	ANYFIXED,
6229705Slinton 		0,	RLEFT|RESCC,
6239705Slinton 		"	OB2	AR,AL\n",
6249705Slinton 
6259705Slinton ASG OPSIMP,	INAREG|FOREFF|FORCC,
62632961Sdonn 	AWD,	TCHAR|TUCHAR,
62732961Sdonn 	SCCON,	ANYFIXED,
62832961Sdonn 		0,	RLEFT|RESCC,
62932961Sdonn 		"	OB2	AR,AL\n",
63032961Sdonn 
63132961Sdonn ASG OPSIMP,	INAREG|FOREFF|FORCC,
63232961Sdonn 	AWD,	TCHAR|TUCHAR,
63332961Sdonn 	AWD,	TCHAR|TUCHAR,
63432961Sdonn 		0,	RLEFT|RESCC,
63532961Sdonn 		"	OB2	AR,AL\n",
63632961Sdonn 
6379705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6389705Slinton 	STAREG,	ANYFIXED,
6399705Slinton 	SAREG|AWD,	TWORD,
6409705Slinton 		0,	RLEFT|RESCC,
6419705Slinton 		"	OL2	AR,AL\n",
6429705Slinton 
6439705Slinton OPSIMP,	INAREG|INTAREG|FORCC,
6449705Slinton 	SAREG|AWD,	TWORD,
6459705Slinton 	SAREG|AWD,	TWORD,
6469705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6479705Slinton 		"	OL3	AR,AL,A1\n",
6489705Slinton 
6499705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6509705Slinton 	SAREG|AWD,	TDOUBLE,
6519705Slinton 	SAREG|AWD,	TDOUBLE,
6529705Slinton 		0,	RLEFT|RESCC,
6539705Slinton 		"	OD2	AR,AL\n",
6549705Slinton 
6559705Slinton ASG OPFLOAT,	INAREG|FOREFF|FORCC,
6569705Slinton 	SAREG|AWD,	TFLOAT,
6579705Slinton 	SAREG|AWD,	TFLOAT,
6589705Slinton 		0,	RLEFT|RESCC,
65917740Sralph #if defined(FORT) || defined(SPRECC)
66016937Sralph 		"	OF2	AR,TAL\n",
66116937Sralph #else
6629705Slinton 		"	OF2	AR,AL\n",
66316937Sralph #endif
6649705Slinton 
6659705Slinton ASG OPFLOAT,	INAREG|INTAREG|FOREFF|FORCC,
6669705Slinton 	SAREG|AWD,	TFLOAT,
6679705Slinton 	SAREG|AWD,	TDOUBLE,
6689705Slinton 		NAREG,	RLEFT|RESC1|RESCC,
6699705Slinton 		"	cvtfd	AL,A1\n	OD2	AR,A1\n	cvtdf	A1,AL\n",
6709705Slinton 
67125753Sdonn ASG OPFLOAT,	INAREG|FOREFF|FORCC,
67225753Sdonn 	SAREG|AWD,	ANYFIXED,
67325753Sdonn #ifndef SPRECC
67425753Sdonn 	SAREG|AWD,	TDOUBLE,		/* force FLOAT to register */
67525753Sdonn #else
67625753Sdonn 	SAREG|AWD,	TFLOAT|TDOUBLE,
67725753Sdonn #endif
67825753Sdonn 		NAREG,	RLEFT|RESCC,	/* usable() knows we need a reg pair */
67925753Sdonn 		"	ZG\n",
68025753Sdonn 
6819705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6829705Slinton 	STAREG,	TDOUBLE,
6839705Slinton 	SAREG|AWD,	TDOUBLE,
6849705Slinton 		0,	RLEFT|RESCC,
6859705Slinton 		"	OD2	AR,AL\n",
6869705Slinton 
6879705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
6889705Slinton 	SAREG|AWD,	TDOUBLE,
6899705Slinton 	SAREG|AWD,	TDOUBLE,
6909705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
6919705Slinton 		"	OD3	AR,AL,A1\n",
6929705Slinton 
69317740Sralph #if defined(FORT) || defined(SPRECC)
6949705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
69516937Sralph 	STAREG,		TFLOAT,
69616937Sralph 	SAREG|AWD,	TFLOAT,
6979705Slinton 		0,	RLEFT|RESCC,
69816937Sralph 		"	OF2	AR,TAL\n",
6999705Slinton 
7009705Slinton OPFLOAT,	INAREG|INTAREG|FORCC,
7019705Slinton 	SAREG|AWD,	TFLOAT,
7029705Slinton 	SAREG|AWD,	TFLOAT,
7039705Slinton 		NAREG|NASL|NASR,	RESC1|RESCC,
7049705Slinton 		"	OF3	AR,AL,TA1\n",
7059705Slinton #endif
7069705Slinton 
70732974Sdonn #ifdef FORT
70832974Sdonn /* perform some implicit conversions XXX SHOULD FIX f77 FRONT END */
70932974Sdonn OPFLOAT,	INAREG|INTAREG|FORCC,
71032974Sdonn 	SAREG|AWD,	TFLOAT,
71132974Sdonn 	SAREG|AWD,	TDOUBLE,
71232974Sdonn 		NAREG|NASL,	RESC1|RESCC,
71332974Sdonn 		"	cvtfd	AL,A1\n	OD2	AR,A1\n",
71432974Sdonn 
71532974Sdonn OPFLOAT,	INAREG|INTAREG|FORCC,
71632974Sdonn 	SAREG|AWD,	TDOUBLE,
71732974Sdonn 	SAREG|AWD,	TFLOAT,
71832974Sdonn 		NAREG|NASR,	RESC1|RESCC,
71932974Sdonn 		"	cvtfd	AR,A1\n	OD3	A1,AL,A1\n",
72032974Sdonn #endif
72132974Sdonn 
7229705Slinton 	/* Default actions for hard trees ... */
7239705Slinton 
7249705Slinton # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
7259705Slinton 
7269705Slinton UNARY MUL, DF( UNARY MUL ),
7279705Slinton 
7289705Slinton INCR, DF(INCR),
7299705Slinton 
7309705Slinton DECR, DF(INCR),
7319705Slinton 
7329705Slinton ASSIGN, DF(ASSIGN),
7339705Slinton 
7349705Slinton STASG, DF(STASG),
7359705Slinton 
7369705Slinton FLD, DF(FLD),
7379705Slinton 
7389705Slinton OPLEAF, DF(NAME),
7399705Slinton 
7409705Slinton OPLOG,	FORCC,
7419705Slinton 	SANY,	TANY,
7429705Slinton 	SANY,	TANY,
7439705Slinton 		REWRITE,	BITYPE,
7449705Slinton 		"",
7459705Slinton 
7469705Slinton OPLOG,	DF(NOT),
7479705Slinton 
7489705Slinton COMOP, DF(COMOP),
7499705Slinton 
7509705Slinton INIT, DF(INIT),
7519705Slinton 
7529705Slinton OPUNARY, DF(UNARY MINUS),
7539705Slinton 
7549705Slinton ASG OPANY, DF(ASG PLUS),
7559705Slinton 
7569705Slinton OPANY, DF(BITYPE),
7579705Slinton 
7589705Slinton FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	FREE,	"help; I'm in trouble\n" };
759