xref: /inferno-os/utils/6c/machcap.c (revision 7de2b42d50e3c05cc143e7b51284009b5e185581)
1  #include "gc.h"
2  
3  int
4  machcap(Node *n)
5  {
6  
7  	if(n == Z)
8  		return 1;	/* test */
9  
10  	switch(n->op) {
11  	case OMUL:
12  	case OLMUL:
13  	case OASMUL:
14  	case OASLMUL:
15  		if(typechl[n->type->etype])
16  			return 1;
17  		if(typev[n->type->etype]) {
18  				return 1;
19  		}
20  		break;
21  
22  	case OCOM:
23  	case ONEG:
24  	case OADD:
25  	case OAND:
26  	case OOR:
27  	case OSUB:
28  	case OXOR:
29  	case OASHL:
30  	case OLSHR:
31  	case OASHR:
32  		if(typechlv[n->left->type->etype])
33  			return 1;
34  		break;
35  
36  	case OCAST:
37  		return 1;
38  
39  	case OCOND:
40  	case OCOMMA:
41  	case OLIST:
42  	case OANDAND:
43  	case OOROR:
44  	case ONOT:
45  		return 1;
46  
47  	case OASADD:
48  	case OASSUB:
49  	case OASAND:
50  	case OASOR:
51  	case OASXOR:
52  		return 1;
53  
54  	case OASASHL:
55  	case OASASHR:
56  	case OASLSHR:
57  		return 1;
58  
59  	case OPOSTINC:
60  	case OPOSTDEC:
61  	case OPREINC:
62  	case OPREDEC:
63  		return 1;
64  
65  	case OEQ:
66  	case ONE:
67  	case OLE:
68  	case OGT:
69  	case OLT:
70  	case OGE:
71  	case OHI:
72  	case OHS:
73  	case OLO:
74  	case OLS:
75  		return 1;
76  	}
77  	return 0;
78  }
79