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