1 #include "gc.h" 2 3 int machcap(Node * n)4machcap(Node *n) 5 { 6 7 if(n == Z) 8 return 1; /* test */ 9 10 switch(n->op) { 11 case OMUL: 12 case OLMUL: 13 case OASMUL: 14 case OASLMUL: 15 if(typechlv[n->type->etype]) 16 return 1; 17 break; 18 19 case OADD: 20 case OAND: 21 case OOR: 22 case OSUB: 23 case OXOR: 24 case OASHL: 25 case OLSHR: 26 case OASHR: 27 if(typechlv[n->left->type->etype]) 28 return 1; 29 break; 30 31 case OCAST: 32 return 1; 33 34 case OCOND: 35 case OCOMMA: 36 case OLIST: 37 case OANDAND: 38 case OOROR: 39 case ONOT: 40 return 1; 41 42 case OASADD: 43 case OASSUB: 44 case OASAND: 45 case OASOR: 46 case OASXOR: 47 return 1; 48 49 case OASASHL: 50 case OASASHR: 51 case OASLSHR: 52 return 1; 53 54 case OPOSTINC: 55 case OPOSTDEC: 56 case OPREINC: 57 case OPREDEC: 58 return 1; 59 60 case OEQ: 61 case ONE: 62 case OLE: 63 case OGT: 64 case OLT: 65 case OGE: 66 case OHI: 67 case OHS: 68 case OLO: 69 case OLS: 70 return 1; 71 72 case OCOM: 73 case ONEG: 74 break; 75 } 76 return 0; 77 } 78