#include "gc.h" int machcap(Node *n) { if(n == Z) return 0; /* test */ switch(n->op) { case OASADD: case OASSUB: case OASAND: case OASXOR: case OASOR: case OADD: case OSUB: case OAND: case OXOR: case OOR: if(typev[n->type->etype] && typev[n->left->type->etype] && typev[n->right->type->etype]) return 1; break; case OMUL: case OLMUL: if(typev[n->type->etype] && typeil[n->left->type->etype] && typeil[n->right->type->etype] && typeu[n->type->etype] == typeu[n->left->type->etype] && typeu[n->type->etype] == typeu[n->right->type->etype]) return 1; break; case OASASHL: case OASASHR: case OASLSHR: case OASHL: case OASHR: case OLSHR: if(typev[n->type->etype] && typev[n->left->type->etype] && n->right->op == OCONST) return 1; break; case OCAST: if(typeilp[n->type->etype] && typev[n->left->type->etype]) return 1; if(typev[n->type->etype] && typeilp[n->left->type->etype]) return 1; break; } return 0; }