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