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 OMUL: 13 case OLMUL: 14 case OASMUL: 15 case OASLMUL: 16 if(typechl[n->type->etype]) 17 return 1; 18 if(typev[n->type->etype]) { 19 // if(typev[n->type->etype] && n->right->op == OCONST) { 20 // if(hi64v(n->right) == 0) 21 return 1; 22 } 23 break; 24 25 case OCOM: 26 case ONEG: 27 case OADD: 28 case OAND: 29 case OOR: 30 case OSUB: 31 case OXOR: 32 case OASHL: 33 case OLSHR: 34 case OASHR: 35 if(typechlv[n->left->type->etype]) 36 return 1; 37 break; 38 39 case OCAST: 40 if(typev[n->type->etype]) { 41 if(typechlp[n->left->type->etype]) 42 return 1; 43 } 44 else if(!typefd[n->type->etype]) { 45 if(typev[n->left->type->etype]) 46 return 1; 47 } 48 break; 49 50 case OCOND: 51 case OCOMMA: 52 case OLIST: 53 case OANDAND: 54 case OOROR: 55 case ONOT: 56 return 1; 57 58 case OASADD: 59 case OASSUB: 60 case OASAND: 61 case OASOR: 62 case OASXOR: 63 return 1; 64 65 case OASASHL: 66 case OASASHR: 67 case OASLSHR: 68 return 1; 69 70 case OPOSTINC: 71 case OPOSTDEC: 72 case OPREINC: 73 case OPREDEC: 74 return 1; 75 76 case OEQ: 77 case ONE: 78 case OLE: 79 case OGT: 80 case OLT: 81 case OGE: 82 case OHI: 83 case OHS: 84 case OLO: 85 case OLS: 86 //print("%O\n", n->op); 87 return 1; 88 } 89 return 0; 90 } 91