machcap.c 903 B

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