xref: /plan9-contrib/sys/src/cmd/4c/machcap.c (revision f8bc6aaf8056e137bcdfb6117a990ac3eff62cc9)
1 #include "gc.h"
2 
3 int
machcap(Node * n)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(typechlv[n->type->etype])
16 			return 1;
17 		break;
18 
19 	case OADD:
20 	case OAND:
21 	case OOR:
22 	case OSUB:
23 	case OXOR:
24 	case OASHL:
25 	case OLSHR:
26 	case OASHR:
27 		if(typechlv[n->left->type->etype])
28 			return 1;
29 		break;
30 
31 	case OCAST:
32 		return 1;
33 
34 	case OCOND:
35 	case OCOMMA:
36 	case OLIST:
37 	case OANDAND:
38 	case OOROR:
39 	case ONOT:
40 		return 1;
41 
42 	case OASADD:
43 	case OASSUB:
44 	case OASAND:
45 	case OASOR:
46 	case OASXOR:
47 		return 1;
48 
49 	case OASASHL:
50 	case OASASHR:
51 	case OASLSHR:
52 		return 1;
53 
54 	case OPOSTINC:
55 	case OPOSTDEC:
56 	case OPREINC:
57 	case OPREDEC:
58 		return 1;
59 
60 	case OEQ:
61 	case ONE:
62 	case OLE:
63 	case OGT:
64 	case OLT:
65 	case OGE:
66 	case OHI:
67 	case OHS:
68 	case OLO:
69 	case OLS:
70 		return 1;
71 
72 	case OCOM:
73 	case ONEG:
74 		break;
75 	}
76 	return 0;
77 }
78