]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/8c/machcap.c
awk: make empty FS unicodely-correct.
[plan9front.git] / sys / src / cmd / 8c / machcap.c
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 !mixedasop(n->left->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->left->type, n->right->type);
62
63         case OASAND:
64         case OASOR:
65         case OASXOR:
66                 return 1;
67
68         case OASASHL:
69         case OASASHR:
70         case OASLSHR:
71                 return 1;
72
73         case OPOSTINC:
74         case OPOSTDEC:
75         case OPREINC:
76         case OPREDEC:
77                 return 1;
78
79         case OEQ:
80         case ONE:
81         case OLE:
82         case OGT:
83         case OLT:
84         case OGE:
85         case OHI:
86         case OHS:
87         case OLO:
88         case OLS:
89 //print("%O\n", n->op);
90                 return 1;
91         }
92         return 0;
93 }