machcap.c 865 B

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