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