xref: /plan9-contrib/sys/src/cmd/8c/machcap.c (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
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 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 1;
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 		return 1;
57 
58 	case OASADD:
59 	case OASSUB:
60 	case OASAND:
61 	case OASOR:
62 	case OASXOR:
63 		return 1;
64 
65 	case OASASHL:
66 	case OASASHR:
67 	case OASLSHR:
68 		return 1;
69 
70 	case OPOSTINC:
71 	case OPOSTDEC:
72 	case OPREINC:
73 	case OPREDEC:
74 		return 1;
75 
76 	case OEQ:
77 	case ONE:
78 	case OLE:
79 	case OGT:
80 	case OLT:
81 	case OGE:
82 	case OHI:
83 	case OHS:
84 	case OLO:
85 	case OLS:
86 //print("%O\n", n->op);
87 		return 1;
88 	}
89 	return 0;
90 }
91