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 if(typev[n->type->etype]) { 38 if(typechlp[n->left->type->etype]) 39 return 1; 40 } 41 else if(!typefd[n->type->etype]) { 42 if(typev[n->left->type->etype]) 43 return 1; 44 } 45 break; 46 47 case OCOND: 48 case OCOMMA: 49 case OLIST: 50 case OANDAND: 51 case OOROR: 52 case ONOT: 53 return 1; 54 55 case OASADD: 56 case OASSUB: 57 case OASAND: 58 case OASOR: 59 case OASXOR: 60 return 1; 61 62 case OASASHL: 63 case OASASHR: 64 case OASLSHR: 65 return 1; 66 67 case OPOSTINC: 68 case OPOSTDEC: 69 case OPREINC: 70 case OPREDEC: 71 return 1; 72 73 case OEQ: 74 case ONE: 75 case OLE: 76 case OGT: 77 case OLT: 78 case OGE: 79 case OHI: 80 case OHS: 81 case OLO: 82 case OLS: 83 return 1; 84 } 85 return 0; 86 } 87