optab.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. #include "l.h"
  2. Optab optab[] =
  3. {
  4. { ATEXT, C_LEXT, C_NONE, C_NONE, C_LCON, 0, 0, 0 },
  5. { ATEXT, C_LEXT, C_REG, C_NONE, C_LCON, 0, 0, 0 },
  6. { ATEXT, C_LEXT, C_NONE, C_LCON, C_LCON, 0, 0, 0 },
  7. { ATEXT, C_LEXT, C_REG, C_LCON, C_LCON, 0, 0, 0 },
  8. { ATEXT, C_ADDR, C_NONE, C_NONE, C_LCON, 0, 0, 0 },
  9. { ATEXT, C_ADDR, C_REG, C_NONE, C_LCON, 0, 0, 0 },
  10. { ATEXT, C_ADDR, C_NONE, C_LCON, C_LCON, 0, 0, 0 },
  11. { ATEXT, C_ADDR, C_REG, C_LCON, C_LCON, 0, 0, 0 },
  12. /* move register */
  13. { AMOVD, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0 },
  14. { AMOVB, C_REG, C_NONE, C_NONE, C_REG, 12, 4, 0 },
  15. { AMOVBZ, C_REG, C_NONE, C_NONE, C_REG, 13, 4, 0 },
  16. { AMOVW, C_REG, C_NONE, C_NONE, C_REG, 12, 4, 0 },
  17. { AMOVWZ, C_REG, C_NONE, C_NONE, C_REG, 13, 4, 0 },
  18. { AADD, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  19. { AADD, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  20. { AADD, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  21. { AADD, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  22. { AADD, C_UCON, C_REG, C_NONE, C_REG, 20, 4, 0 },
  23. { AADD, C_UCON, C_NONE, C_NONE, C_REG, 20, 4, 0 },
  24. { AADD, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0 },
  25. { AADD, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0 },
  26. { AADDC, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  27. { AADDC, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  28. { AADDC, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  29. { AADDC, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  30. { AADDC, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0 },
  31. { AADDC, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0 },
  32. { AAND, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 }, /* logical, no literal */
  33. { AAND, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  34. { AANDCC, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  35. { AANDCC, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  36. { AANDCC, C_ANDCON,C_NONE, C_NONE, C_REG, 58, 4, 0 },
  37. { AANDCC, C_ANDCON,C_REG, C_NONE, C_REG, 58, 4, 0 },
  38. { AANDCC, C_UCON, C_NONE, C_NONE, C_REG, 59, 4, 0 },
  39. { AANDCC, C_UCON, C_REG, C_NONE, C_REG, 59, 4, 0 },
  40. { AANDCC, C_LCON, C_NONE, C_NONE, C_REG, 23, 12, 0 },
  41. { AANDCC, C_LCON, C_REG, C_NONE, C_REG, 23, 12, 0 },
  42. { AMULLW, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  43. { AMULLW, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  44. { AMULLW, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  45. { AMULLW, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  46. { AMULLW, C_ANDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  47. { AMULLW, C_ANDCON, C_NONE, C_NONE, C_REG, 4, 4, 0 },
  48. { AMULLW, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0},
  49. { AMULLW, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0},
  50. { ASUBC, C_REG, C_REG, C_NONE, C_REG, 10, 4, 0 },
  51. { ASUBC, C_REG, C_NONE, C_NONE, C_REG, 10, 4, 0 },
  52. { ASUBC, C_REG, C_NONE, C_ADDCON, C_REG, 27, 4, 0 },
  53. { ASUBC, C_REG, C_NONE, C_LCON, C_REG, 28, 12, 0},
  54. { AOR, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 }, /* logical, literal not cc (or/xor) */
  55. { AOR, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  56. { AOR, C_ANDCON, C_NONE, C_NONE, C_REG, 58, 4, 0 },
  57. { AOR, C_ANDCON, C_REG, C_NONE, C_REG, 58, 4, 0 },
  58. { AOR, C_UCON, C_NONE, C_NONE, C_REG, 59, 4, 0 },
  59. { AOR, C_UCON, C_REG, C_NONE, C_REG, 59, 4, 0 },
  60. { AOR, C_LCON, C_NONE, C_NONE, C_REG, 23, 12, 0 },
  61. { AOR, C_LCON, C_REG, C_NONE, C_REG, 23, 12, 0 },
  62. { ADIVW, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 }, /* op r1[,r2],r3 */
  63. { ADIVW, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  64. { ASUB, C_REG, C_REG, C_NONE, C_REG, 10, 4, 0 }, /* op r2[,r1],r3 */
  65. { ASUB, C_REG, C_NONE, C_NONE, C_REG, 10, 4, 0 },
  66. { ASLW, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  67. { ASLW, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  68. { ASLD, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  69. { ASLD, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  70. { ASLD, C_SCON, C_REG, C_NONE, C_REG, 25, 4, 0 },
  71. { ASLD, C_SCON, C_NONE, C_NONE, C_REG, 25, 4, 0 },
  72. { ASLW, C_SCON, C_REG, C_NONE, C_REG, 57, 4, 0 },
  73. { ASLW, C_SCON, C_NONE, C_NONE, C_REG, 57, 4, 0 },
  74. { ASRAW, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  75. { ASRAW, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  76. { ASRAW, C_SCON, C_REG, C_NONE, C_REG, 56, 4, 0 },
  77. { ASRAW, C_SCON, C_NONE, C_NONE, C_REG, 56, 4, 0 },
  78. { ASRAD, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  79. { ASRAD, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  80. { ASRAD, C_SCON, C_REG, C_NONE, C_REG, 56, 4, 0 },
  81. { ASRAD, C_SCON, C_NONE, C_NONE, C_REG, 56, 4, 0 },
  82. { ARLWMI, C_SCON, C_REG, C_LCON, C_REG, 62, 4, 0 },
  83. { ARLWMI, C_REG, C_REG, C_LCON, C_REG, 63, 4, 0 },
  84. { ARLDMI, C_SCON, C_REG, C_LCON, C_REG, 30, 4, 0 },
  85. { ARLDC, C_SCON, C_REG, C_LCON, C_REG, 29, 4, 0 },
  86. { ARLDCL, C_SCON, C_REG, C_LCON, C_REG, 29, 4, 0 },
  87. { ARLDCL, C_REG, C_REG, C_LCON, C_REG, 14, 4, 0 },
  88. { ARLDCL, C_REG, C_NONE, C_LCON, C_REG, 14, 4, 0 },
  89. { AFADD, C_FREG, C_NONE, C_NONE, C_FREG, 2, 4, 0 },
  90. { AFADD, C_FREG, C_REG, C_NONE, C_FREG, 2, 4, 0 },
  91. { AFABS, C_FREG, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  92. { AFABS, C_NONE, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  93. { AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  94. { AFMADD, C_FREG, C_REG, C_FREG, C_FREG, 34, 4, 0 },
  95. { AFMUL, C_FREG, C_NONE, C_NONE, C_FREG, 32, 4, 0 },
  96. { AFMUL, C_FREG, C_REG, C_NONE, C_FREG, 32, 4, 0 },
  97. /* store, short offset */
  98. { AMOVD, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  99. { AMOVW, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  100. { AMOVWZ, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  101. { AMOVBZ, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  102. { AMOVBZU, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  103. { AMOVB, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  104. { AMOVBU, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  105. { AMOVD, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  106. { AMOVW, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  107. { AMOVWZ, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  108. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  109. { AMOVB, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  110. { AMOVD, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  111. { AMOVW, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  112. { AMOVWZ, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  113. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  114. { AMOVB, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  115. { AMOVD, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  116. { AMOVW, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  117. { AMOVWZ, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  118. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  119. { AMOVBZU, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  120. { AMOVB, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  121. { AMOVBU, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  122. /* load, short offset */
  123. { AMOVD, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  124. { AMOVW, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  125. { AMOVWZ, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  126. { AMOVBZ, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  127. { AMOVBZU, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  128. { AMOVB, C_ZOREG,C_REG, C_NONE, C_REG, 9, 8, REGZERO },
  129. { AMOVBU, C_ZOREG,C_REG, C_NONE, C_REG, 9, 8, REGZERO },
  130. { AMOVD, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  131. { AMOVW, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  132. { AMOVWZ, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  133. { AMOVBZ, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  134. { AMOVB, C_SEXT, C_NONE, C_NONE, C_REG, 9, 8, REGSB },
  135. { AMOVD, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  136. { AMOVW, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  137. { AMOVWZ, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  138. { AMOVBZ, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  139. { AMOVB, C_SAUTO,C_NONE, C_NONE, C_REG, 9, 8, REGSP },
  140. { AMOVD, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  141. { AMOVW, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  142. { AMOVWZ, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  143. { AMOVBZ, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  144. { AMOVBZU, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  145. { AMOVB, C_SOREG,C_NONE, C_NONE, C_REG, 9, 8, REGZERO },
  146. { AMOVBU, C_SOREG,C_NONE, C_NONE, C_REG, 9, 8, REGZERO },
  147. /* store, long offset */
  148. { AMOVD, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  149. { AMOVW, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  150. { AMOVWZ, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  151. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  152. { AMOVB, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  153. { AMOVD, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  154. { AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  155. { AMOVWZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  156. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  157. { AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  158. { AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  159. { AMOVWZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  160. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  161. { AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  162. { AMOVD, C_REG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  163. { AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  164. { AMOVWZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  165. { AMOVBZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  166. { AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  167. /* load, long offset */
  168. { AMOVD, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  169. { AMOVW, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  170. { AMOVWZ, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  171. { AMOVBZ, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  172. { AMOVB, C_LEXT, C_NONE, C_NONE, C_REG, 37, 12, REGSB },
  173. { AMOVD, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  174. { AMOVW, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  175. { AMOVWZ, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  176. { AMOVBZ, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  177. { AMOVB, C_LAUTO,C_NONE, C_NONE, C_REG, 37, 12, REGSP },
  178. { AMOVD, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  179. { AMOVW, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  180. { AMOVWZ, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  181. { AMOVBZ, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  182. { AMOVB, C_LOREG,C_NONE, C_NONE, C_REG, 37, 12, REGZERO },
  183. { AMOVD, C_ADDR, C_NONE, C_NONE, C_REG, 75, 8, 0 },
  184. { AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, 75, 8, 0 },
  185. { AMOVWZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 8, 0 },
  186. { AMOVBZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 8, 0 },
  187. { AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, 76, 12, 0 },
  188. /* load constant */
  189. { AMOVD, C_SECON,C_NONE, C_NONE, C_REG, 3, 4, REGSB },
  190. { AMOVD, C_SACON,C_NONE, C_NONE, C_REG, 3, 4, REGSP },
  191. { AMOVD, C_LECON,C_NONE, C_NONE, C_REG, 26, 8, REGSB },
  192. { AMOVD, C_LACON,C_NONE, C_NONE, C_REG, 26, 8, REGSP },
  193. { AMOVD, C_ADDCON,C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  194. { AMOVW, C_SECON,C_NONE, C_NONE, C_REG, 3, 4, REGSB }, /* TO DO: check */
  195. { AMOVW, C_SACON,C_NONE, C_NONE, C_REG, 3, 4, REGSP },
  196. { AMOVW, C_LECON,C_NONE, C_NONE, C_REG, 26, 8, REGSB },
  197. { AMOVW, C_LACON,C_NONE, C_NONE, C_REG, 26, 8, REGSP },
  198. { AMOVW, C_ADDCON,C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  199. { AMOVWZ, C_SECON,C_NONE, C_NONE, C_REG, 3, 4, REGSB }, /* TO DO: check */
  200. { AMOVWZ, C_SACON,C_NONE, C_NONE, C_REG, 3, 4, REGSP },
  201. { AMOVWZ, C_LECON,C_NONE, C_NONE, C_REG, 26, 8, REGSB },
  202. { AMOVWZ, C_LACON,C_NONE, C_NONE, C_REG, 26, 8, REGSP },
  203. { AMOVWZ, C_ADDCON,C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  204. /* load unsigned/long constants (TO DO: check) */
  205. { AMOVD, C_UCON, C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  206. { AMOVD, C_LCON, C_NONE, C_NONE, C_REG, 19, 8, 0 },
  207. { AMOVW, C_UCON, C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  208. { AMOVW, C_LCON, C_NONE, C_NONE, C_REG, 19, 8, 0 },
  209. { AMOVWZ, C_UCON, C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  210. { AMOVWZ, C_LCON, C_NONE, C_NONE, C_REG, 19, 8, 0 },
  211. { AMOVHBR, C_ZOREG, C_REG, C_NONE, C_REG, 45, 4, 0 },
  212. { AMOVHBR, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  213. { AMOVHBR, C_REG, C_REG, C_NONE, C_ZOREG, 44, 4, 0 },
  214. { AMOVHBR, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  215. { ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, 5, 4, 0 },
  216. { ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 16, 4, 0 },
  217. { ABEQ, C_CREG, C_NONE, C_NONE, C_SBRA, 16, 4, 0 },
  218. { ABR, C_NONE, C_NONE, C_NONE, C_LBRA, 11, 4, 0 },
  219. { ABC, C_SCON, C_REG, C_NONE, C_SBRA, 16, 4, 0 },
  220. { ABC, C_SCON, C_REG, C_NONE, C_LBRA, 17, 4, 0 },
  221. { ABR, C_NONE, C_NONE, C_NONE, C_LR, 18, 4, 0 },
  222. { ABR, C_NONE, C_NONE, C_NONE, C_CTR, 18, 4, 0 },
  223. { ABR, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 8, 0 },
  224. { ABC, C_NONE, C_REG, C_NONE, C_LR, 18, 4, 0 },
  225. { ABC, C_NONE, C_REG, C_NONE, C_CTR, 18, 4, 0 },
  226. { ABC, C_SCON, C_REG, C_NONE, C_LR, 18, 4, 0 },
  227. { ABC, C_SCON, C_REG, C_NONE, C_CTR, 18, 4, 0 },
  228. { ABC, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 8, 0 },
  229. { AFMOVD, C_SEXT, C_NONE, C_NONE, C_FREG, 8, 4, REGSB },
  230. { AFMOVD, C_SAUTO,C_NONE, C_NONE, C_FREG, 8, 4, REGSP },
  231. { AFMOVD, C_SOREG,C_NONE, C_NONE, C_FREG, 8, 4, REGZERO },
  232. { AFMOVD, C_LEXT, C_NONE, C_NONE, C_FREG, 8, 4, REGSB },
  233. { AFMOVD, C_LAUTO,C_NONE, C_NONE, C_FREG, 8, 4, REGSP },
  234. { AFMOVD, C_LOREG,C_NONE, C_NONE, C_FREG, 8, 4, REGZERO },
  235. { AFMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, 75, 8, 0 },
  236. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  237. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  238. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  239. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LEXT, 7, 4, REGSB },
  240. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 7, 4, REGSP },
  241. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 7, 4, REGZERO },
  242. { AFMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, 74, 8, 0 },
  243. { ASYNC, C_NONE, C_NONE, C_NONE, C_NONE, 46, 4, 0 },
  244. { AWORD, C_LCON, C_NONE, C_NONE, C_NONE, 40, 4, 0 },
  245. { ADWORD, C_LCON, C_NONE, C_NONE, C_NONE, 31, 8, 0 },
  246. { AADDME, C_REG, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  247. { AEXTSB, C_REG, C_NONE, C_NONE, C_REG, 48, 4, 0 },
  248. { AEXTSB, C_NONE, C_NONE, C_NONE, C_REG, 48, 4, 0 },
  249. { ANEG, C_REG, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  250. { ANEG, C_NONE, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  251. { AREM, C_REG, C_NONE, C_NONE, C_REG, 50, 12, 0 },
  252. { AREM, C_REG, C_REG, C_NONE, C_REG, 50, 12, 0 },
  253. { AREMD, C_REG, C_NONE, C_NONE, C_REG, 51, 12, 0 },
  254. { AREMD, C_REG, C_REG, C_NONE, C_REG, 51, 12, 0 },
  255. { AMTFSB0, C_SCON, C_NONE, C_NONE, C_NONE, 52, 4, 0 },
  256. { AMOVFL, C_FPSCR, C_NONE, C_NONE, C_FREG, 53, 4, 0 },
  257. { AMOVFL, C_FREG, C_NONE, C_NONE, C_FPSCR, 64, 4, 0 },
  258. { AMOVFL, C_FREG, C_NONE, C_LCON, C_FPSCR, 64, 4, 0 },
  259. { AMOVFL, C_LCON, C_NONE, C_NONE, C_FPSCR, 65, 4, 0 },
  260. { AMOVD, C_MSR, C_NONE, C_NONE, C_REG, 54, 4, 0 }, /* mfmsr */
  261. { AMOVD, C_REG, C_NONE, C_NONE, C_MSR, 54, 4, 0 }, /* mtmsrd */
  262. { AMOVWZ, C_REG, C_NONE, C_NONE, C_MSR, 54, 4, 0 }, /* mtmsr */
  263. /* 64-bit special registers */
  264. { AMOVD, C_REG, C_NONE, C_NONE, C_SPR, 66, 4, 0 },
  265. { AMOVD, C_REG, C_NONE, C_NONE, C_LR, 66, 4, 0 },
  266. { AMOVD, C_REG, C_NONE, C_NONE, C_CTR, 66, 4, 0 },
  267. { AMOVD, C_REG, C_NONE, C_NONE, C_XER, 66, 4, 0 },
  268. { AMOVD, C_SPR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  269. { AMOVD, C_LR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  270. { AMOVD, C_CTR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  271. { AMOVD, C_XER, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  272. /* 32-bit special registers (gloss over sign-extension or not?) */
  273. { AMOVW, C_REG, C_NONE, C_NONE, C_SPR, 66, 4, 0 },
  274. { AMOVW, C_REG, C_NONE, C_NONE, C_CTR, 66, 4, 0 },
  275. { AMOVW, C_REG, C_NONE, C_NONE, C_XER, 66, 4, 0 },
  276. { AMOVW, C_SPR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  277. { AMOVW, C_XER, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  278. { AMOVWZ, C_REG, C_NONE, C_NONE, C_SPR, 66, 4, 0 },
  279. { AMOVWZ, C_REG, C_NONE, C_NONE, C_CTR, 66, 4, 0 },
  280. { AMOVWZ, C_REG, C_NONE, C_NONE, C_XER, 66, 4, 0 },
  281. { AMOVWZ, C_SPR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  282. { AMOVWZ, C_XER, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  283. { AMOVFL, C_FPSCR, C_NONE, C_NONE, C_CREG, 73, 4, 0 },
  284. { AMOVFL, C_CREG, C_NONE, C_NONE, C_CREG, 67, 4, 0 },
  285. { AMOVW, C_CREG, C_NONE, C_NONE, C_REG, 68, 4, 0 },
  286. { AMOVWZ, C_CREG, C_NONE, C_NONE, C_REG, 68, 4, 0 },
  287. { AMOVFL, C_REG, C_NONE, C_LCON, C_CREG, 69, 4, 0 },
  288. { AMOVFL, C_REG, C_NONE, C_NONE, C_CREG, 69, 4, 0 },
  289. { AMOVW, C_REG, C_NONE, C_NONE, C_CREG, 69, 4, 0 },
  290. { AMOVWZ, C_REG, C_NONE, C_NONE, C_CREG, 69, 4, 0 },
  291. { ACMP, C_REG, C_NONE, C_NONE, C_REG, 70, 4, 0 },
  292. { ACMP, C_REG, C_REG, C_NONE, C_REG, 70, 4, 0 },
  293. { ACMP, C_REG, C_NONE, C_NONE, C_ADDCON, 71, 4, 0 },
  294. { ACMP, C_REG, C_REG, C_NONE, C_ADDCON, 71, 4, 0 },
  295. { ACMPU, C_REG, C_NONE, C_NONE, C_REG, 70, 4, 0 },
  296. { ACMPU, C_REG, C_REG, C_NONE, C_REG, 70, 4, 0 },
  297. { ACMPU, C_REG, C_NONE, C_NONE, C_ANDCON, 71, 4, 0 },
  298. { ACMPU, C_REG, C_REG, C_NONE, C_ANDCON, 71, 4, 0 },
  299. { AFCMPO, C_FREG, C_NONE, C_NONE, C_FREG, 70, 4, 0 },
  300. { AFCMPO, C_FREG, C_REG, C_NONE, C_FREG, 70, 4, 0 },
  301. { ATW, C_LCON, C_REG, C_NONE, C_REG, 60, 4, 0 },
  302. { ATW, C_LCON, C_REG, C_NONE, C_ADDCON, 61, 4, 0 },
  303. { ADCBF, C_ZOREG, C_NONE, C_NONE, C_NONE, 43, 4, 0 },
  304. { ADCBF, C_ZOREG, C_REG, C_NONE, C_NONE, 43, 4, 0 },
  305. { AECOWX, C_REG, C_REG, C_NONE, C_ZOREG, 44, 4, 0 },
  306. { AECIWX, C_ZOREG, C_REG, C_NONE, C_REG, 45, 4, 0 },
  307. { AECOWX, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  308. { AECIWX, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  309. { AEIEIO, C_NONE, C_NONE, C_NONE, C_NONE, 46, 4, 0 },
  310. { ATLBIE, C_REG, C_NONE, C_NONE, C_NONE, 49, 4, 0 },
  311. { ATLBIE, C_SCON, C_NONE, C_NONE, C_REG, 49, 4, 0 },
  312. { ASLBMFEE, C_REG, C_NONE, C_NONE, C_REG, 55, 4, 0 },
  313. { ASLBMTE, C_REG, C_NONE, C_NONE, C_REG, 55, 4, 0 },
  314. { ASTSW, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  315. { ASTSW, C_REG, C_NONE, C_LCON, C_ZOREG, 41, 4, 0 },
  316. { ALSW, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  317. { ALSW, C_ZOREG, C_NONE, C_LCON, C_REG, 42, 4, 0 },
  318. { AXXX, C_NONE, C_NONE, C_NONE, C_NONE, 0, 4, 0 },
  319. };