xref: /inferno-os/utils/8c/machcap.c (revision 45a20ab721a513710138340faff3d59a31c3e01e)
174a4d8c2SCharles.Forsyth #include "gc.h"
274a4d8c2SCharles.Forsyth 
374a4d8c2SCharles.Forsyth int
machcap(Node * n)474a4d8c2SCharles.Forsyth machcap(Node *n)
574a4d8c2SCharles.Forsyth {
6*45a20ab7Sforsyth //	return 0;
774a4d8c2SCharles.Forsyth 
874a4d8c2SCharles.Forsyth 	if(n == Z)
974a4d8c2SCharles.Forsyth 		return 1;	/* test */
1074a4d8c2SCharles.Forsyth 
1174a4d8c2SCharles.Forsyth 	switch(n->op) {
1274a4d8c2SCharles.Forsyth 	case OMUL:
1374a4d8c2SCharles.Forsyth 	case OLMUL:
1474a4d8c2SCharles.Forsyth 	case OASMUL:
1574a4d8c2SCharles.Forsyth 	case OASLMUL:
1674a4d8c2SCharles.Forsyth 		if(typechl[n->type->etype])
1774a4d8c2SCharles.Forsyth 			return 1;
1874a4d8c2SCharles.Forsyth 		if(typev[n->type->etype]) {
19*45a20ab7Sforsyth //		if(typev[n->type->etype] && n->right->op == OCONST) {
20*45a20ab7Sforsyth //			if(hi64v(n->right) == 0)
2174a4d8c2SCharles.Forsyth 				return 1;
2274a4d8c2SCharles.Forsyth 		}
2374a4d8c2SCharles.Forsyth 		break;
2474a4d8c2SCharles.Forsyth 
2574a4d8c2SCharles.Forsyth 	case OCOM:
2674a4d8c2SCharles.Forsyth 	case ONEG:
2774a4d8c2SCharles.Forsyth 	case OADD:
2874a4d8c2SCharles.Forsyth 	case OAND:
2974a4d8c2SCharles.Forsyth 	case OOR:
3074a4d8c2SCharles.Forsyth 	case OSUB:
3174a4d8c2SCharles.Forsyth 	case OXOR:
3274a4d8c2SCharles.Forsyth 	case OASHL:
3374a4d8c2SCharles.Forsyth 	case OLSHR:
3474a4d8c2SCharles.Forsyth 	case OASHR:
3574a4d8c2SCharles.Forsyth 		if(typechlv[n->left->type->etype])
3674a4d8c2SCharles.Forsyth 			return 1;
3774a4d8c2SCharles.Forsyth 		break;
3874a4d8c2SCharles.Forsyth 
3974a4d8c2SCharles.Forsyth 	case OCAST:
4074a4d8c2SCharles.Forsyth 		if(typev[n->type->etype]) {
4174a4d8c2SCharles.Forsyth 			if(typechlp[n->left->type->etype])
4274a4d8c2SCharles.Forsyth 				return 1;
4374a4d8c2SCharles.Forsyth 		}
4474a4d8c2SCharles.Forsyth 		else if(!typefd[n->type->etype]) {
4574a4d8c2SCharles.Forsyth 			if(typev[n->left->type->etype])
4674a4d8c2SCharles.Forsyth 				return 1;
4774a4d8c2SCharles.Forsyth 		}
4874a4d8c2SCharles.Forsyth 		break;
4974a4d8c2SCharles.Forsyth 
5074a4d8c2SCharles.Forsyth 	case OCOND:
5174a4d8c2SCharles.Forsyth 	case OCOMMA:
5274a4d8c2SCharles.Forsyth 	case OLIST:
5374a4d8c2SCharles.Forsyth 	case OANDAND:
5474a4d8c2SCharles.Forsyth 	case OOROR:
5574a4d8c2SCharles.Forsyth 	case ONOT:
56*45a20ab7Sforsyth 	case ODOT:
5774a4d8c2SCharles.Forsyth 		return 1;
5874a4d8c2SCharles.Forsyth 
5974a4d8c2SCharles.Forsyth 	case OASADD:
6074a4d8c2SCharles.Forsyth 	case OASSUB:
6174a4d8c2SCharles.Forsyth 	case OASAND:
6274a4d8c2SCharles.Forsyth 	case OASOR:
6374a4d8c2SCharles.Forsyth 	case OASXOR:
6474a4d8c2SCharles.Forsyth 		return 1;
6574a4d8c2SCharles.Forsyth 
6674a4d8c2SCharles.Forsyth 	case OASASHL:
6774a4d8c2SCharles.Forsyth 	case OASASHR:
6874a4d8c2SCharles.Forsyth 	case OASLSHR:
6974a4d8c2SCharles.Forsyth 		return 1;
7074a4d8c2SCharles.Forsyth 
7174a4d8c2SCharles.Forsyth 	case OPOSTINC:
7274a4d8c2SCharles.Forsyth 	case OPOSTDEC:
7374a4d8c2SCharles.Forsyth 	case OPREINC:
7474a4d8c2SCharles.Forsyth 	case OPREDEC:
7574a4d8c2SCharles.Forsyth 		return 1;
7674a4d8c2SCharles.Forsyth 
7774a4d8c2SCharles.Forsyth 	case OEQ:
7874a4d8c2SCharles.Forsyth 	case ONE:
7974a4d8c2SCharles.Forsyth 	case OLE:
8074a4d8c2SCharles.Forsyth 	case OGT:
8174a4d8c2SCharles.Forsyth 	case OLT:
8274a4d8c2SCharles.Forsyth 	case OGE:
8374a4d8c2SCharles.Forsyth 	case OHI:
8474a4d8c2SCharles.Forsyth 	case OHS:
8574a4d8c2SCharles.Forsyth 	case OLO:
8674a4d8c2SCharles.Forsyth 	case OLS:
87*45a20ab7Sforsyth //print("%O\n", n->op);
8874a4d8c2SCharles.Forsyth 		return 1;
8974a4d8c2SCharles.Forsyth 	}
9074a4d8c2SCharles.Forsyth 	return 0;
9174a4d8c2SCharles.Forsyth }
92