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