optab.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "l.h"
  2. Optab optab[] =
  3. {
  4. { ATEXT, C_LEXT, C_NONE, C_LCON, 0, 0, 0 },
  5. { ATEXT, C_LEXT, C_REG, C_LCON, 0, 0, 0 },
  6. /*
  7. * mov $con/reg,reg
  8. */
  9. { AMOVL, C_REG, C_NONE, C_REG, 1, 4, 0 },
  10. { AMOVL, C_PCON, C_NONE, C_REG, 2, 4, 0 },
  11. { AMOVL, C_NCON, C_NONE, C_REG, 2, 4, 0 },
  12. { AMOVL, C_LCON, C_NONE, C_REG, 3, 8, 0 },
  13. { AMOVL, C_SACON,C_NONE, C_REG, 4, 4, 0 },
  14. { AMOVL, C_MACON,C_NONE, C_REG, 4, 4, 0 },
  15. { AMOVL, C_PACON,C_NONE, C_REG, 5, 8, 0 },
  16. { AMOVL, C_NACON,C_NONE, C_REG, 5, 8, 0 },
  17. { AMOVL, C_LACON,C_NONE, C_REG, 6, 12, 0 },
  18. /*
  19. * mov reg,mem
  20. */
  21. { AMOVL, C_REG, C_NONE, C_ZAUTO, 10, 4, REGSP },
  22. { AMOVL, C_REG, C_NONE, C_ZOREG, 10, 4, 0 },
  23. { AMOVL, C_REG, C_NONE, C_SAUTO, 11, 8, REGSP },
  24. { AMOVL, C_REG, C_NONE, C_SOREG, 11, 8, 0 },
  25. { AMOVL, C_REG, C_NONE, C_MAUTO, 11, 8, REGSP },
  26. { AMOVL, C_REG, C_NONE, C_MOREG, 11, 8, 0 },
  27. { AMOVL, C_REG, C_NONE, C_PAUTO, 12, 12, REGSP },
  28. { AMOVL, C_REG, C_NONE, C_POREG, 12, 12, 0 },
  29. { AMOVL, C_REG, C_NONE, C_NAUTO, 12, 12, REGSP },
  30. { AMOVL, C_REG, C_NONE, C_NOREG, 12, 12, 0 },
  31. { AMOVL, C_REG, C_NONE, C_LAUTO, 13, 16, REGSP },
  32. { AMOVL, C_REG, C_NONE, C_LOREG, 13, 16, 0 },
  33. { AMOVL, C_REG, C_NONE, C_SEXT, 14, 8, 0 },
  34. { AMOVL, C_REG, C_NONE, C_LEXT, 15, 12, 0 },
  35. { ASTOREM, C_REG, C_NONE, C_ZOREG, 10, 4, 0 },
  36. /*
  37. * mov mem,reg
  38. */
  39. { AMOVL, C_ZAUTO,C_NONE, C_REG, 20, 4, REGSP },
  40. { AMOVL, C_ZOREG,C_NONE, C_REG, 20, 4, 0 },
  41. { AMOVL, C_SAUTO,C_NONE, C_REG, 21, 8, REGSP },
  42. { AMOVL, C_SOREG,C_NONE, C_REG, 21, 8, 0 },
  43. { AMOVL, C_MAUTO,C_NONE, C_REG, 21, 8, REGSP },
  44. { AMOVL, C_MOREG,C_NONE, C_REG, 21, 8, 0 },
  45. { AMOVL, C_PAUTO,C_NONE, C_REG, 22, 12, REGSP },
  46. { AMOVL, C_POREG,C_NONE, C_REG, 22, 12, 0 },
  47. { AMOVL, C_NAUTO,C_NONE, C_REG, 22, 12, REGSP },
  48. { AMOVL, C_NOREG,C_NONE, C_REG, 22, 12, 0 },
  49. { AMOVL, C_LAUTO,C_NONE, C_REG, 23, 16, REGSP },
  50. { AMOVL, C_LOREG,C_NONE, C_REG, 23, 16, 0 },
  51. { AMOVL, C_SEXT, C_NONE, C_REG, 24, 8, 0 },
  52. { AMOVL, C_LEXT, C_NONE, C_REG, 25, 12, 0 },
  53. { ALOADM, C_ZOREG,C_NONE, C_REG, 20, 4, 0 },
  54. /*
  55. * movd reg,mem
  56. */
  57. { AMOVD, C_REG, C_NONE, C_ZAUTO, 60, 8, REGSP },
  58. { AMOVD, C_REG, C_NONE, C_ZOREG, 60, 8, 0 },
  59. { AMOVD, C_REG, C_NONE, C_SAUTO, 61, 12, REGSP },
  60. { AMOVD, C_REG, C_NONE, C_SOREG, 61, 12, 0 },
  61. { AMOVD, C_REG, C_NONE, C_MAUTO, 61, 12, REGSP },
  62. { AMOVD, C_REG, C_NONE, C_MOREG, 61, 12, 0 },
  63. { AMOVD, C_REG, C_NONE, C_PAUTO, 62, 16, REGSP },
  64. { AMOVD, C_REG, C_NONE, C_POREG, 62, 16, 0 },
  65. { AMOVD, C_REG, C_NONE, C_NAUTO, 62, 16, REGSP },
  66. { AMOVD, C_REG, C_NONE, C_NOREG, 62, 16, 0 },
  67. { AMOVD, C_REG, C_NONE, C_LAUTO, 63, 20, REGSP },
  68. { AMOVD, C_REG, C_NONE, C_LOREG, 63, 20, 0 },
  69. { AMOVD, C_REG, C_NONE, C_SEXT, 64, 12, 0 },
  70. { AMOVD, C_REG, C_NONE, C_LEXT, 65, 16, 0 },
  71. /*
  72. * movd mem,reg
  73. */
  74. { AMOVD, C_ZAUTO,C_NONE, C_REG, 70, 8, REGSP },
  75. { AMOVD, C_ZOREG,C_NONE, C_REG, 70, 8, 0 },
  76. { AMOVD, C_SAUTO,C_NONE, C_REG, 71, 12, REGSP },
  77. { AMOVD, C_SOREG,C_NONE, C_REG, 71, 12, 0 },
  78. { AMOVD, C_MAUTO,C_NONE, C_REG, 71, 12, REGSP },
  79. { AMOVD, C_MOREG,C_NONE, C_REG, 71, 12, 0 },
  80. { AMOVD, C_PAUTO,C_NONE, C_REG, 72, 16, REGSP },
  81. { AMOVD, C_POREG,C_NONE, C_REG, 72, 16, 0 },
  82. { AMOVD, C_NAUTO,C_NONE, C_REG, 72, 16, REGSP },
  83. { AMOVD, C_NOREG,C_NONE, C_REG, 72, 16, 0 },
  84. { AMOVD, C_LAUTO,C_NONE, C_REG, 73, 20, REGSP },
  85. { AMOVD, C_LOREG,C_NONE, C_REG, 73, 20, 0 },
  86. { AMOVD, C_SEXT, C_NONE, C_REG, 74, 12, 0 },
  87. { AMOVD, C_LEXT, C_NONE, C_REG, 75, 16, 0 },
  88. /*
  89. * movd mem,reg
  90. */
  91. { AMOVD, C_REG,C_NONE, C_REG, 76, 4, 0 },
  92. /*
  93. * op $con/reg,reg,reg
  94. */
  95. { ASETIP, C_REG, C_REG, C_REG, 30, 4, 0 },
  96. { ASETIP, C_REG, C_NONE, C_REG, 30, 4, 0 },
  97. { AADDL, C_REG, C_REG, C_REG, 30, 4, 0 },
  98. { AADDL, C_REG, C_NONE, C_REG, 30, 4, 0 },
  99. { AADDL, C_SCON, C_REG, C_REG, 31, 4, 0 },
  100. { AADDL, C_SCON, C_NONE, C_REG, 31, 4, 0 },
  101. { AADDL, C_PCON, C_REG, C_REG, 32, 8, 0 },
  102. { AADDL, C_PCON, C_NONE, C_REG, 32, 8, 0 },
  103. { AADDL, C_NCON, C_REG, C_REG, 32, 8, 0 },
  104. { AADDL, C_NCON, C_NONE, C_REG, 32, 8, 0 },
  105. { AADDL, C_LCON, C_REG, C_REG, 33,12, 0 },
  106. { AADDL, C_LCON, C_NONE, C_REG, 33,12, 0 },
  107. /*
  108. * fop reg,reg,reg
  109. */
  110. { AADDD, C_REG, C_REG, C_REG, 30, 4, 0 },
  111. { AADDD, C_REG, C_NONE, C_REG, 30, 4, 0 },
  112. /*
  113. * jump/call
  114. */
  115. { AJMP, C_NONE, C_NONE, C_SBRA, 40, 4, 0 },
  116. { ACALL, C_NONE, C_NONE, C_SBRA, 40, 4, REGLINK },
  117. { ACALL, C_REG, C_NONE, C_SBRA, 40, 4, 0 },
  118. { AJMPF, C_REG, C_NONE, C_SBRA, 41, 4, 0 },
  119. { AJMP, C_NONE, C_NONE, C_LBRA, 42, 12, 0 },
  120. { AJMPF, C_REG, C_NONE, C_LBRA, 42, 12, 0 },
  121. { ACALL, C_NONE, C_NONE, C_LBRA, 42, 12, REGLINK },
  122. { ACALL, C_REG, C_NONE, C_LBRA, 42, 12, 0 },
  123. { AJMP, C_NONE, C_NONE, C_ZOREG, 43, 4, 0 },
  124. { AJMPF, C_REG, C_NONE, C_ZOREG, 43, 4, 0 },
  125. { ACALL, C_NONE, C_NONE, C_ZOREG, 43, 4, REGLINK },
  126. { ACALL, C_REG, C_NONE, C_ZOREG, 43, 4, 0 },
  127. /*
  128. * special
  129. */
  130. { ADELAY, C_NONE, C_NONE, C_NONE, 50, 4, 0 },
  131. { AEMULATE, C_NONE, C_NONE, C_ZOREG, 51, 4, 0 },
  132. { AMTSR, C_REG, C_NONE, C_REG, 52, 4, 0 },
  133. { AMTSR, C_PCON, C_NONE, C_REG, 53, 4, 0 },
  134. { AMTSR, C_LCON, C_NONE, C_REG, 54, 12, 0 },
  135. { AMFSR, C_REG, C_NONE, C_REG, 55, 4, 0 },
  136. { AIRET, C_NONE, C_NONE, C_NONE, 56, 4, 0 },
  137. { AINV, C_NONE, C_NONE, C_SCON, 57, 4, 0 },
  138. { AWORD, C_NONE, C_NONE, C_LCON, 66, 4, 0 },
  139. { AXXX, C_NONE, C_NONE, C_NONE, 0, 4, 0 },
  140. };