xref: /plan9/sys/src/cmd/qc/machcap.c (revision 6891d8578618fb7ccda4a131c122d4d0e6580c4b)
1*6891d857SDavid du Colombier #include	"gc.h"
2*6891d857SDavid du Colombier 
3*6891d857SDavid du Colombier int
machcap(Node * n)4*6891d857SDavid du Colombier machcap(Node *n)
5*6891d857SDavid du Colombier {
6*6891d857SDavid du Colombier 	if(n == Z)
7*6891d857SDavid du Colombier 		return 1;	/* test */
8*6891d857SDavid du Colombier 	switch(n->op){
9*6891d857SDavid du Colombier 
10*6891d857SDavid du Colombier 	case OADD:
11*6891d857SDavid du Colombier 	case OAND:
12*6891d857SDavid du Colombier 	case OOR:
13*6891d857SDavid du Colombier 	case OSUB:
14*6891d857SDavid du Colombier 	case OXOR:
15*6891d857SDavid du Colombier 		if(typev[n->left->type->etype])
16*6891d857SDavid du Colombier 			return 1;
17*6891d857SDavid du Colombier 		break;
18*6891d857SDavid du Colombier 
19*6891d857SDavid du Colombier 	case OMUL:
20*6891d857SDavid du Colombier 	case OLMUL:
21*6891d857SDavid du Colombier 	case OASMUL:
22*6891d857SDavid du Colombier 	case OASLMUL:
23*6891d857SDavid du Colombier 		return 1;
24*6891d857SDavid du Colombier 
25*6891d857SDavid du Colombier 	case OLSHR:
26*6891d857SDavid du Colombier 	case OASHR:
27*6891d857SDavid du Colombier 	case OASHL:
28*6891d857SDavid du Colombier 	case OASASHL:
29*6891d857SDavid du Colombier 	case OASASHR:
30*6891d857SDavid du Colombier 	case OASLSHR:
31*6891d857SDavid du Colombier 		return 1;
32*6891d857SDavid du Colombier 
33*6891d857SDavid du Colombier 	case OCAST:
34*6891d857SDavid du Colombier 		if(typev[n->type->etype]) {
35*6891d857SDavid du Colombier 			if(!typefd[n->left->type->etype])
36*6891d857SDavid du Colombier 				return 1;
37*6891d857SDavid du Colombier 		} else if(!typefd[n->type->etype]) {
38*6891d857SDavid du Colombier 			if(typev[n->left->type->etype])
39*6891d857SDavid du Colombier 				return 1;
40*6891d857SDavid du Colombier 		}
41*6891d857SDavid du Colombier 		break;
42*6891d857SDavid du Colombier 
43*6891d857SDavid du Colombier 	case OCOMMA:
44*6891d857SDavid du Colombier 	case OCOND:
45*6891d857SDavid du Colombier 	case OLIST:
46*6891d857SDavid du Colombier 	case OANDAND:
47*6891d857SDavid du Colombier 	case OOROR:
48*6891d857SDavid du Colombier 	case ONOT:
49*6891d857SDavid du Colombier 		return 1;
50*6891d857SDavid du Colombier 
51*6891d857SDavid du Colombier 	case OCOM:
52*6891d857SDavid du Colombier 	case ONEG:
53*6891d857SDavid du Colombier 		if(typechl[n->left->type->etype])
54*6891d857SDavid du Colombier 			return 1;
55*6891d857SDavid du Colombier 		if(typev[n->left->type->etype])
56*6891d857SDavid du Colombier 			return 1;
57*6891d857SDavid du Colombier 		return 0;
58*6891d857SDavid du Colombier 
59*6891d857SDavid du Colombier 	case OASADD:
60*6891d857SDavid du Colombier 	case OASSUB:
61*6891d857SDavid du Colombier 	case OASAND:
62*6891d857SDavid du Colombier 	case OASOR:
63*6891d857SDavid du Colombier 	case OASXOR:
64*6891d857SDavid du Colombier 		return 1;
65*6891d857SDavid du Colombier 
66*6891d857SDavid du Colombier 	case OPOSTINC:
67*6891d857SDavid du Colombier 	case OPOSTDEC:
68*6891d857SDavid du Colombier 	case OPREINC:
69*6891d857SDavid du Colombier 	case OPREDEC:
70*6891d857SDavid du Colombier 		return 1;
71*6891d857SDavid du Colombier 
72*6891d857SDavid du Colombier 	case OEQ:
73*6891d857SDavid du Colombier 	case ONE:
74*6891d857SDavid du Colombier 	case OLE:
75*6891d857SDavid du Colombier 	case OGT:
76*6891d857SDavid du Colombier 	case OLT:
77*6891d857SDavid du Colombier 	case OGE:
78*6891d857SDavid du Colombier 	case OHI:
79*6891d857SDavid du Colombier 	case OHS:
80*6891d857SDavid du Colombier 	case OLO:
81*6891d857SDavid du Colombier 	case OLS:
82*6891d857SDavid du Colombier 		return 1;
83*6891d857SDavid du Colombier 
84*6891d857SDavid du Colombier 	case ODIV:
85*6891d857SDavid du Colombier 	case OLDIV:
86*6891d857SDavid du Colombier 	case OLMOD:
87*6891d857SDavid du Colombier 	case OMOD:
88*6891d857SDavid du Colombier 		return 0;
89*6891d857SDavid du Colombier 
90*6891d857SDavid du Colombier 	case OASDIV:
91*6891d857SDavid du Colombier 	case OASLDIV:
92*6891d857SDavid du Colombier 	case OASLMOD:
93*6891d857SDavid du Colombier 	case OASMOD:
94*6891d857SDavid du Colombier 		return 0;
95*6891d857SDavid du Colombier 
96*6891d857SDavid du Colombier 	}
97*6891d857SDavid du Colombier 	return 0;
98*6891d857SDavid du Colombier }
99