xref: /plan9/sys/src/cmd/8c/machcap.c (revision d40255d87ccd1acd15b87823a96efd7b6296fadd)
1da51d93aSDavid du Colombier #include "gc.h"
2da51d93aSDavid du Colombier 
3da51d93aSDavid du Colombier int
machcap(Node * n)4da51d93aSDavid du Colombier machcap(Node *n)
5da51d93aSDavid du Colombier {
6da51d93aSDavid du Colombier //	return 0;
7da51d93aSDavid du Colombier 
8da51d93aSDavid du Colombier 	if(n == Z)
9da51d93aSDavid du Colombier 		return 1;	/* test */
10da51d93aSDavid du Colombier 
11da51d93aSDavid du Colombier 	switch(n->op) {
12375daca8SDavid du Colombier 	case OMUL:
13375daca8SDavid du Colombier 	case OLMUL:
14375daca8SDavid du Colombier 	case OASMUL:
15375daca8SDavid du Colombier 	case OASLMUL:
16375daca8SDavid du Colombier 		if(typechl[n->type->etype])
17375daca8SDavid du Colombier 			return 1;
18375daca8SDavid du Colombier 		if(typev[n->type->etype]) {
19375daca8SDavid du Colombier //		if(typev[n->type->etype] && n->right->op == OCONST) {
20375daca8SDavid du Colombier //			if(hi64v(n->right) == 0)
21375daca8SDavid du Colombier 				return 1;
22375daca8SDavid du Colombier 		}
23375daca8SDavid du Colombier 		break;
24375daca8SDavid du Colombier 
25da51d93aSDavid du Colombier 	case OCOM:
26da51d93aSDavid du Colombier 	case ONEG:
27da51d93aSDavid du Colombier 	case OADD:
28da51d93aSDavid du Colombier 	case OAND:
29da51d93aSDavid du Colombier 	case OOR:
30da51d93aSDavid du Colombier 	case OSUB:
31da51d93aSDavid du Colombier 	case OXOR:
32da51d93aSDavid du Colombier 	case OASHL:
33da51d93aSDavid du Colombier 	case OLSHR:
34da51d93aSDavid du Colombier 	case OASHR:
35da51d93aSDavid du Colombier 		if(typechlv[n->left->type->etype])
36da51d93aSDavid du Colombier 			return 1;
37da51d93aSDavid du Colombier 		break;
38375daca8SDavid du Colombier 
39da51d93aSDavid du Colombier 	case OCAST:
40da51d93aSDavid du Colombier 		if(typev[n->type->etype]) {
41da51d93aSDavid du Colombier 			if(typechlp[n->left->type->etype])
42da51d93aSDavid du Colombier 				return 1;
43da51d93aSDavid du Colombier 		}
44da51d93aSDavid du Colombier 		else if(!typefd[n->type->etype]) {
45da51d93aSDavid du Colombier 			if(typev[n->left->type->etype])
46da51d93aSDavid du Colombier 				return 1;
47da51d93aSDavid du Colombier 		}
48da51d93aSDavid du Colombier 		break;
49da51d93aSDavid du Colombier 
50da51d93aSDavid du Colombier 	case OCOND:
51da51d93aSDavid du Colombier 	case OCOMMA:
5290b28401SDavid du Colombier 	case OLIST:
53da51d93aSDavid du Colombier 	case OANDAND:
54da51d93aSDavid du Colombier 	case OOROR:
55da51d93aSDavid du Colombier 	case ONOT:
56*d40255d8SDavid du Colombier 	case ODOT:
57da51d93aSDavid du Colombier 		return 1;
58da51d93aSDavid du Colombier 
59da51d93aSDavid du Colombier 	case OASADD:
60da51d93aSDavid du Colombier 	case OASSUB:
61da51d93aSDavid du Colombier 	case OASAND:
62da51d93aSDavid du Colombier 	case OASOR:
63da51d93aSDavid du Colombier 	case OASXOR:
64da51d93aSDavid du Colombier 		return 1;
65da51d93aSDavid du Colombier 
66da51d93aSDavid du Colombier 	case OASASHL:
67da51d93aSDavid du Colombier 	case OASASHR:
68da51d93aSDavid du Colombier 	case OASLSHR:
69da51d93aSDavid du Colombier 		return 1;
70da51d93aSDavid du Colombier 
71da51d93aSDavid du Colombier 	case OPOSTINC:
72da51d93aSDavid du Colombier 	case OPOSTDEC:
73da51d93aSDavid du Colombier 	case OPREINC:
74da51d93aSDavid du Colombier 	case OPREDEC:
75da51d93aSDavid du Colombier 		return 1;
76da51d93aSDavid du Colombier 
77da51d93aSDavid du Colombier 	case OEQ:
78da51d93aSDavid du Colombier 	case ONE:
79da51d93aSDavid du Colombier 	case OLE:
80da51d93aSDavid du Colombier 	case OGT:
81da51d93aSDavid du Colombier 	case OLT:
82da51d93aSDavid du Colombier 	case OGE:
83da51d93aSDavid du Colombier 	case OHI:
84da51d93aSDavid du Colombier 	case OHS:
85da51d93aSDavid du Colombier 	case OLO:
86da51d93aSDavid du Colombier 	case OLS:
87da51d93aSDavid du Colombier //print("%O\n", n->op);
88da51d93aSDavid du Colombier 		return 1;
89da51d93aSDavid du Colombier 	}
90da51d93aSDavid du Colombier 	return 0;
91da51d93aSDavid du Colombier }
92