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