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