174a4d8c2SCharles.Forsyth #include "gc.h" 274a4d8c2SCharles.Forsyth 374a4d8c2SCharles.Forsyth int machcap(Node * n)474a4d8c2SCharles.Forsythmachcap(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