tables.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. /* $Id$ */
  2. #ifndef TABLES_H
  3. #define TABLES_H
  4. /* This is only included by common/bedbug.c, and depends on the following
  5. * files to already be included
  6. * common.h
  7. * bedbug/bedbug.h
  8. * bedbug/ppc.h
  9. * bedbug/regs.h
  10. */
  11. struct operand operands[] = {
  12. /*Field Name Bits Shift Hint Position */
  13. /*----- ------ ----- ----- ---- ------------ */
  14. { O_AA, "O_AA", 1, 1, OH_SILENT }, /* 30 */
  15. { O_BD, "O_BD", 14, 2, OH_ADDR }, /* 16-29 */
  16. { O_BI, "O_BI", 5, 16, 0 }, /* 11-15 */
  17. { O_BO, "O_BO", 5, 21, 0 }, /* 6-10 */
  18. { O_crbD, "O_crbD", 5, 21, 0 }, /* 6-10 */
  19. { O_crbA, "O_crbA", 5, 16, 0 }, /* 11-15 */
  20. { O_crbB, "O_crbB", 5, 11, 0 }, /* 16-20 */
  21. { O_CRM, "O_CRM", 8, 12, 0 }, /* 12-19 */
  22. { O_d, "O_d", 15, 0, OH_OFFSET }, /* 16-31 */
  23. { O_frC, "O_frC", 5, 6, 0 }, /* 21-25 */
  24. { O_frD, "O_frD", 5, 21, 0 }, /* 6-10 */
  25. { O_frS, "O_frS", 5, 21, 0 }, /* 6-10 */
  26. { O_IMM, "O_IMM", 4, 12, 0 }, /* 16-19 */
  27. { O_LI, "O_LI", 24, 2, OH_ADDR }, /* 6-29 */
  28. { O_LK, "O_LK", 1, 0, OH_SILENT }, /* 31 */
  29. { O_MB, "O_MB", 5, 6, 0 }, /* 21-25 */
  30. { O_ME, "O_ME", 5, 1, 0 }, /* 26-30 */
  31. { O_NB, "O_NB", 5, 11, 0 }, /* 16-20 */
  32. { O_OE, "O_OE", 1, 10, OH_SILENT }, /* 21 */
  33. { O_rA, "O_rA", 5, 16, OH_REG }, /* 11-15 */
  34. { O_rB, "O_rB", 5, 11, OH_REG }, /* 16-20 */
  35. { O_Rc, "O_Rc", 1, 0, OH_SILENT }, /* 31 */
  36. { O_rD, "O_rD", 5, 21, OH_REG }, /* 6-10 */
  37. { O_rS, "O_rS", 5, 21, OH_REG }, /* 6-10 */
  38. { O_SH, "O_SH", 5, 11, 0 }, /* 16-20 */
  39. { O_SIMM, "O_SIMM", 16, 0, 0 }, /* 16-31 */
  40. { O_SR, "O_SR", 4, 16, 0 }, /* 12-15 */
  41. { O_TO, "O_TO", 5, 21, 0 }, /* 6-10 */
  42. { O_UIMM, "O_UIMM", 16, 0, 0 }, /* 16-31 */
  43. { O_crfD, "O_crfD", 3, 23, 0 }, /* 6- 8 */
  44. { O_crfS, "O_crfS", 3, 18, 0 }, /* 11-13 */
  45. { O_L, "O_L", 1, 21, 0 }, /* 10 */
  46. { O_spr, "O_spr", 10, 11, OH_SPR }, /* 11-20 */
  47. { O_tbr, "O_tbr", 10, 11, OH_TBR }, /* 11-20 */
  48. { O_cr2, "O_cr2", 0, 0, OH_LITERAL }, /* "cr2" */
  49. };
  50. const unsigned int n_operands = sizeof(operands) / sizeof(operands[0]);
  51. /* A note about the fields array in the opcodes structure:
  52. The operands are listed in the order they appear in the output.
  53. This table is arranged in numeric order of the opcode. Note that some
  54. opcodes have defined bits in odd places so not all forms of a command
  55. will be in the same place. This is done so that a binary search can be
  56. done to find the opcodes. Note that table D.2 in the MPC860 User's
  57. Manual "Instructions Sorted by Opcode" does not account for these
  58. bit locations */
  59. struct opcode opcodes[] = {
  60. { D_OPCODE(3), D_MASK, {O_TO, O_rA, O_SIMM, 0},
  61. 0, "twi", 0 },
  62. { D_OPCODE(7), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  63. 0, "mulli", 0 },
  64. { D_OPCODE(8), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  65. 0, "subfic", 0 },
  66. { D_OPCODE(10), D_MASK, {O_crfD, O_L, O_rA, O_UIMM, 0},
  67. 0, "cmpli", 0 },
  68. { D_OPCODE(11), D_MASK, {O_crfD, O_L, O_rA, O_SIMM, 0},
  69. 0, "cmpi", 0 },
  70. { D_OPCODE(12), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  71. 0, "addic", 0 },
  72. { D_OPCODE(13), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  73. 0, "addic.", 0 },
  74. { D_OPCODE(14), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  75. 0, "addi", H_RA0_IS_0 },
  76. { D_OPCODE(15), D_MASK, {O_rD, O_rA, O_SIMM, 0},
  77. 0, "addis", H_RA0_IS_0|H_IMM_HIGH },
  78. { B_OPCODE(16,0,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
  79. handle_bc, "bc", H_RELATIVE },
  80. { B_OPCODE(16,0,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
  81. 0, "bcl", H_RELATIVE },
  82. { B_OPCODE(16,1,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
  83. 0, "bca", 0 },
  84. { B_OPCODE(16,1,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0},
  85. 0, "bcla", 0 },
  86. { SC_OPCODE(17), SC_MASK, {0},
  87. 0, "sc", 0 },
  88. { I_OPCODE(18,0,0), I_MASK, {O_LI, O_AA, O_LK, 0},
  89. 0, "b", H_RELATIVE },
  90. { I_OPCODE(18,0,1), I_MASK, {O_LI, O_AA, O_LK, 0},
  91. 0, "bl", H_RELATIVE },
  92. { I_OPCODE(18,1,0), I_MASK, {O_LI, O_AA, O_LK, 0},
  93. 0, "ba", 0 },
  94. { I_OPCODE(18,1,1), I_MASK, {O_LI, O_AA, O_LK, 0},
  95. 0, "bla", 0 },
  96. { XL_OPCODE(19,0,0), XL_MASK, {O_crfD, O_crfS},
  97. 0, "mcrf", 0 },
  98. { XL_OPCODE(19,16,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
  99. 0, "bclr", 0 },
  100. { XL_OPCODE(19,16,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
  101. 0, "bclrl", 0 },
  102. { XL_OPCODE(19,33,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  103. 0, "crnor", 0 },
  104. { XL_OPCODE(19,50,0), XL_MASK, {0},
  105. 0, "rfi", 0 },
  106. { XL_OPCODE(19,129,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  107. 0, "crandc", 0 },
  108. { XL_OPCODE(19,150,0), XL_MASK, {0},
  109. 0, "isync", 0 },
  110. { XL_OPCODE(19,193,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  111. 0, "crxor", 0 },
  112. { XL_OPCODE(19,225,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  113. 0, "crnand", 0 },
  114. { XL_OPCODE(19,257,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  115. 0, "crand", 0 },
  116. { XL_OPCODE(19,289,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  117. 0, "creqv", 0 },
  118. { XL_OPCODE(19,417,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  119. 0, "crorc", 0 },
  120. { XL_OPCODE(19,449,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0},
  121. 0, "cror", 0 },
  122. { XL_OPCODE(19,528,0), XL_MASK, {O_BO, O_BI, O_LK, 0},
  123. 0, "bcctr", 0 },
  124. { XL_OPCODE(19,528,1), XL_MASK, {O_BO, O_BI, O_LK, 0},
  125. 0, "bcctrl", 0 },
  126. { M_OPCODE(20,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
  127. 0, "rlwimi", 0 },
  128. { M_OPCODE(20,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
  129. 0, "rlwimi.", 0 },
  130. { M_OPCODE(21,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
  131. 0, "rlwinm", 0 },
  132. { M_OPCODE(21,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0},
  133. 0, "rlwinm.", 0 },
  134. { M_OPCODE(23,0), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
  135. 0, "rlwnm", 0 },
  136. { M_OPCODE(23,1), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0},
  137. 0, "rlwnm.", 0 },
  138. { D_OPCODE(24), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  139. 0, "ori", 0 },
  140. { D_OPCODE(25), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  141. 0, "oris", H_IMM_HIGH },
  142. { D_OPCODE(26), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  143. 0, "xori", 0 },
  144. { D_OPCODE(27), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  145. 0, "xoris", H_IMM_HIGH },
  146. { D_OPCODE(28), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  147. 0, "andi.", 0 },
  148. { D_OPCODE(29), D_MASK, {O_rA, O_rS, O_UIMM, 0},
  149. 0, "andis.", H_IMM_HIGH },
  150. { X_OPCODE(31,0,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
  151. 0, "cmp", 0 },
  152. { X_OPCODE(31,4,0), X_MASK, {O_TO, O_rA, O_rB, 0},
  153. 0, "tw", 0 },
  154. { XO_OPCODE(31,8,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  155. 0, "subfc", 0 },
  156. { XO_OPCODE(31,8,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  157. 0, "subfc.", 0 },
  158. { XO_OPCODE(31,10,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  159. 0, "addc", 0 },
  160. { XO_OPCODE(31,10,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  161. 0, "addc.", 0 },
  162. { XO_OPCODE(31,11,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
  163. 0, "mulhwu", 0 },
  164. { XO_OPCODE(31,11,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
  165. 0, "mulhwu.", 0 },
  166. { X_OPCODE(31,19,0), X_MASK, {O_rD, 0},
  167. 0, "mfcr", 0 },
  168. { X_OPCODE(31,20,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  169. 0, "lwarx", H_RA0_IS_0 },
  170. { X_OPCODE(31,23,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  171. 0, "lwzx", H_RA0_IS_0 },
  172. { X_OPCODE(31,24,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  173. 0, "slw", 0 },
  174. { X_OPCODE(31,24,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  175. 0, "slw.", 0 },
  176. { X_OPCODE(31,26,0), X_MASK, {O_rA, O_rS, O_Rc, 0 },
  177. 0, "cntlzw", 0 },
  178. { X_OPCODE(31,26,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
  179. 0, "cntlzw.", 0 },
  180. { X_OPCODE(31,28,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  181. 0, "and", 0 },
  182. { X_OPCODE(31,28,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  183. 0, "and.", 0 },
  184. { X_OPCODE(31,32,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0},
  185. 0, "cmpl", 0 },
  186. { XO_OPCODE(31,40,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  187. 0, "subf", 0 },
  188. { XO_OPCODE(31,40,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  189. 0, "subf.", 0 },
  190. { X_OPCODE(31,54,0), X_MASK, {O_rA, O_rB, 0},
  191. 0, "dcbst", H_RA0_IS_0 },
  192. { X_OPCODE(31,55,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  193. 0, "lwzux", 0 },
  194. { X_OPCODE(31,60,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  195. 0, "andc", 0 },
  196. { X_OPCODE(31,60,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  197. 0, "andc.", 0 },
  198. { XO_OPCODE(31,75,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
  199. 0, "mulhw", 0 },
  200. { XO_OPCODE(31,75,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0},
  201. 0, "mulhw.", 0 },
  202. { X_OPCODE(31,83,0), X_MASK, {O_rD, 0},
  203. 0, "mfmsr", 0 },
  204. { X_OPCODE(31,86,0), X_MASK, {O_rA, O_rB, 0},
  205. 0, "dcbf", H_RA0_IS_0 },
  206. { X_OPCODE(31,87,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  207. 0, "lbzx", H_RA0_IS_0 },
  208. { XO_OPCODE(31,104,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  209. 0, "neg", 0 },
  210. { XO_OPCODE(31,104,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  211. 0, "neg.", 0 },
  212. { X_OPCODE(31,119,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  213. 0, "lbzux", 0 },
  214. { X_OPCODE(31,124,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  215. 0, "nor", 0 },
  216. { X_OPCODE(31,124,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  217. 0, "nor.", 0 },
  218. { XO_OPCODE(31,136,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  219. 0, "subfe", 0 },
  220. { XO_OPCODE(31,136,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  221. 0, "subfe.", 0 },
  222. { XO_OPCODE(31,138,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  223. 0, "adde", 0 },
  224. { XO_OPCODE(31,138,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  225. 0, "adde.", 0 },
  226. { XFX_OPCODE(31,144,0), XFX_MASK, {O_CRM, O_rS, 0},
  227. 0, "mtcrf", 0 },
  228. { X_OPCODE(31,146,0), X_MASK, {O_rS, 0},
  229. 0, "mtmsr", 0 },
  230. { X_OPCODE(31,150,1), X_MASK, {O_rS, O_rA, O_rB, 0},
  231. 0, "stwcx.", 0 },
  232. { X_OPCODE(31,151,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  233. 0, "stwx", 0 },
  234. { X_OPCODE(31,183,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  235. 0, "stwux", 0 },
  236. { XO_OPCODE(31,200,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  237. 0, "subfze", 0 },
  238. { XO_OPCODE(31,200,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  239. 0, "subfze.", 0 },
  240. { XO_OPCODE(31,202,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  241. 0, "addze", 0 },
  242. { XO_OPCODE(31,202,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  243. 0, "addze.", 0 },
  244. { X_OPCODE(31,210,0), X_MASK, {O_SR, O_rS, 0},
  245. 0, "mtsr", 0 },
  246. { X_OPCODE(31,215,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  247. 0, "stbx", H_RA0_IS_0 },
  248. { XO_OPCODE(31,232,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  249. 0, "subfme", 0 },
  250. { XO_OPCODE(31,232,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  251. 0, "subfme.", 0 },
  252. { XO_OPCODE(31,234,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  253. 0, "addme", 0 },
  254. { XO_OPCODE(31,234,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  255. 0, "addme.", 0 },
  256. { XO_OPCODE(31,235,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  257. 0, "mullw", 0 },
  258. { XO_OPCODE(31,235,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  259. 0, "mullw.", 0 },
  260. { X_OPCODE(31,242,0), X_MASK, {O_rS, O_rB, 0},
  261. 0, "mtsrin", 0 },
  262. { X_OPCODE(31,246,0), X_MASK, {O_rA, O_rB, 0},
  263. 0, "dcbtst", H_RA0_IS_0 },
  264. { X_OPCODE(31,247,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  265. 0, "stbux", 0 },
  266. { XO_OPCODE(31,266,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  267. 0, "add", 0 },
  268. { XO_OPCODE(31,266,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  269. 0, "add.", 0 },
  270. { X_OPCODE(31,278,0), X_MASK, {O_rA, O_rB, 0},
  271. 0, "dcbt", H_RA0_IS_0 },
  272. { X_OPCODE(31,279,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  273. 0, "lhzx", H_RA0_IS_0 },
  274. { X_OPCODE(31,284,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  275. 0, "eqv", 0 },
  276. { X_OPCODE(31,284,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  277. 0, "eqv.", 0 },
  278. { X_OPCODE(31,306,0), X_MASK, {O_rB, 0},
  279. 0, "tlbie", 0 },
  280. { X_OPCODE(31,310,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  281. 0, "eciwx", H_RA0_IS_0 },
  282. { X_OPCODE(31,311,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  283. 0, "lhzux", 0 },
  284. { X_OPCODE(31,316,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  285. 0, "xor", 0 },
  286. { X_OPCODE(31,316,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  287. 0, "xor.", 0 },
  288. { XFX_OPCODE(31,339,0), XFX_MASK, {O_rD, O_spr, 0},
  289. 0, "mfspr", 0 },
  290. { X_OPCODE(31,343,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  291. 0, "lhax", H_RA0_IS_0 },
  292. { X_OPCODE(31,370,0), X_MASK, {0},
  293. 0, "tlbia", 0 },
  294. { XFX_OPCODE(31,371,0), XFX_MASK, {O_rD, O_tbr, 0},
  295. 0, "mftb", 0 },
  296. { X_OPCODE(31,375,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  297. 0, "lhaux", 0 },
  298. { X_OPCODE(31,407,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  299. 0, "sthx", H_RA0_IS_0 },
  300. { X_OPCODE(31,412,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  301. 0, "orc", 0 },
  302. { X_OPCODE(31,412,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  303. 0, "orc.", 0 },
  304. { X_OPCODE(31,438,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  305. 0, "ecowx", H_RA0_IS_0 },
  306. { X_OPCODE(31,439,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  307. 0, "sthux", 0 },
  308. { X_OPCODE(31,444,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  309. 0, "or", 0 },
  310. { X_OPCODE(31,444,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  311. 0, "or.", 0 },
  312. { XO_OPCODE(31,459,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  313. 0, "divwu", 0 },
  314. { XO_OPCODE(31,459,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  315. 0, "divwu.", 0 },
  316. { XFX_OPCODE(31,467,0), XFX_MASK, {O_spr, O_rS, 0},
  317. 0, "mtspr", 0 },
  318. { X_OPCODE(31,470,0), X_MASK, {O_rA, O_rB, 0},
  319. 0, "dcbi", H_RA0_IS_0 },
  320. { X_OPCODE(31,476,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  321. 0, "nand", 0 },
  322. { X_OPCODE(31,476,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc,0},
  323. 0, "nand.", 0 },
  324. { XO_OPCODE(31,491,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  325. 0, "divw", 0 },
  326. { XO_OPCODE(31,491,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  327. 0, "divw.", 0 },
  328. { X_OPCODE(31,512,0), X_MASK, {O_crfD, 0},
  329. 0, "mcrxr", 0 },
  330. { XO_OPCODE(31,8,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  331. 0, "subfco", 0 },
  332. { XO_OPCODE(31,8,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  333. 0, "subfco.", 0 },
  334. { XO_OPCODE(31,10,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  335. 0, "addco", 0 },
  336. { XO_OPCODE(31,10,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  337. 0, "addco.", 0 },
  338. { X_OPCODE(31,533,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  339. 0, "lswx", H_RA0_IS_0 },
  340. { X_OPCODE(31,534,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  341. 0, "lwbrx", H_RA0_IS_0 },
  342. { X_OPCODE(31,536,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  343. 0, "srw", 0 },
  344. { X_OPCODE(31,536,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  345. 0, "srw.", 0 },
  346. { XO_OPCODE(31,40,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  347. 0, "subfo", 0 },
  348. { XO_OPCODE(31,40,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  349. 0, "subfo.", 0 },
  350. { X_OPCODE(31,566,0), X_MASK, {0},
  351. 0, "tlbsync", 0 },
  352. { X_OPCODE(31,595,0), X_MASK, {O_rD, O_SR, 0},
  353. 0, "mfsr", 0 },
  354. { X_OPCODE(31,597,0), X_MASK, {O_rD, O_rA, O_NB, 0},
  355. 0, "lswi", H_RA0_IS_0 },
  356. { X_OPCODE(31,598,0), X_MASK, {0},
  357. 0, "sync", 0 },
  358. { XO_OPCODE(31,104,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  359. 0, "nego", 0 },
  360. { XO_OPCODE(31,104,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  361. 0, "nego.", 0 },
  362. { XO_OPCODE(31,136,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  363. 0, "subfeo", 0 },
  364. { XO_OPCODE(31,136,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  365. 0, "subfeo.", 0 },
  366. { XO_OPCODE(31,138,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  367. 0, "addeo", 0 },
  368. { XO_OPCODE(31,138,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  369. 0, "addeo.", 0 },
  370. { X_OPCODE(31,659,0), X_MASK, {O_rD, O_rB, 0},
  371. 0, "mfsrin", 0 },
  372. { X_OPCODE(31,661,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  373. 0, "stswx", H_RA0_IS_0 },
  374. { X_OPCODE(31,662,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  375. 0, "stwbrx", H_RA0_IS_0 },
  376. { XO_OPCODE(31,200,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  377. 0, "subfzeo", 0 },
  378. { XO_OPCODE(31,200,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  379. 0, "subfzeo.", 0 },
  380. { XO_OPCODE(31,202,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  381. 0, "addzeo", 0 },
  382. { XO_OPCODE(31,202,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  383. 0, "addzeo.", 0 },
  384. { X_OPCODE(31,725,0), X_MASK, {O_rS, O_rA, O_NB, 0},
  385. 0, "stswi", H_RA0_IS_0 },
  386. { XO_OPCODE(31,232,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  387. 0, "subfmeo", 0 },
  388. { XO_OPCODE(31,232,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  389. 0, "subfmeo.", 0 },
  390. { XO_OPCODE(31,234,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  391. 0, "addmeo", 0 },
  392. { XO_OPCODE(31,234,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0},
  393. 0, "addmeo.", 0 },
  394. { XO_OPCODE(31,235,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  395. 0, "mullwo", 0 },
  396. { XO_OPCODE(31,235,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  397. 0, "mullwo.", 0 },
  398. { XO_OPCODE(31,266,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  399. 0, "addo", 0 },
  400. { XO_OPCODE(31,266,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  401. 0, "addo.", 0 },
  402. { X_OPCODE(31,790,0), X_MASK, {O_rD, O_rA, O_rB, 0},
  403. 0, "lhbrx", H_RA0_IS_0 },
  404. { X_OPCODE(31,792,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  405. 0, "sraw", 0 },
  406. { X_OPCODE(31,792,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0},
  407. 0, "sraw.", 0 },
  408. { X_OPCODE(31,824,0), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
  409. 0, "srawi", 0 },
  410. { X_OPCODE(31,824,1), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0},
  411. 0, "srawi.", 0 },
  412. { X_OPCODE(31,854,0), X_MASK, {0},
  413. 0, "eieio", 0 },
  414. { X_OPCODE(31,918,0), X_MASK, {O_rS, O_rA, O_rB, 0},
  415. 0, "sthbrx", H_RA0_IS_0 },
  416. { X_OPCODE(31,922,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
  417. 0, "extsh", 0 },
  418. { X_OPCODE(31,922,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
  419. 0, "extsh.", 0 },
  420. { X_OPCODE(31,954,0), X_MASK, {O_rA, O_rS, O_Rc, 0},
  421. 0, "extsb", 0 },
  422. { X_OPCODE(31,954,1), X_MASK, {O_rA, O_rS, O_Rc, 0},
  423. 0, "extsb.", 0 },
  424. { XO_OPCODE(31,459,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  425. 0, "divwuo", 0 },
  426. { XO_OPCODE(31,459,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  427. 0, "divwuo.", 0 },
  428. { X_OPCODE(31,978,0), X_MASK, {O_rB, 0},
  429. 0, "tlbld", 0 },
  430. { X_OPCODE(31,982,0), X_MASK, {O_rA, O_rB, 0},
  431. 0, "icbi", H_RA0_IS_0 },
  432. { XO_OPCODE(31,491,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  433. 0, "divwo", 0 },
  434. { XO_OPCODE(31,491,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0},
  435. 0, "divwo.", 0 },
  436. { X_OPCODE(31,1010,0), X_MASK, {O_rB, 0},
  437. 0, "tlbli", 0 },
  438. { X_OPCODE(31,1014,0), X_MASK, {O_rA, O_rB, 0},
  439. 0, "dcbz", H_RA0_IS_0 },
  440. { D_OPCODE(32), D_MASK, {O_rD, O_d, O_rA, 0},
  441. 0, "lwz", H_RA0_IS_0 },
  442. { D_OPCODE(33), D_MASK, {O_rD, O_d, O_rA, 0},
  443. 0, "lwzu", 0 },
  444. { D_OPCODE(34), D_MASK, {O_rD, O_d, O_rA, 0},
  445. 0, "lbz", H_RA0_IS_0 },
  446. { D_OPCODE(35), D_MASK, {O_rD, O_d, O_rA, 0},
  447. 0, "lbzu", 0 },
  448. { D_OPCODE(36), D_MASK, {O_rS, O_d, O_rA, 0},
  449. 0, "stw", H_RA0_IS_0 },
  450. { D_OPCODE(37), D_MASK, {O_rS, O_d, O_rA, 0},
  451. 0, "stwu", 0 },
  452. { D_OPCODE(38), D_MASK, {O_rS, O_d, O_rA, 0},
  453. 0, "stb", H_RA0_IS_0 },
  454. { D_OPCODE(39), D_MASK, {O_rS, O_d, O_rA, 0},
  455. 0, "stbu", 0 },
  456. { D_OPCODE(40), D_MASK, {O_rD, O_d, O_rA, 0},
  457. 0, "lhz", H_RA0_IS_0 },
  458. { D_OPCODE(41), D_MASK, {O_rD, O_d, O_rA, 0},
  459. 0, "lhzu", 0 },
  460. { D_OPCODE(42), D_MASK, {O_rD, O_d, O_rA, 0},
  461. 0, "lha", H_RA0_IS_0 },
  462. { D_OPCODE(43), D_MASK, {O_rD, O_d, O_rA, 0},
  463. 0, "lhau", 0 },
  464. { D_OPCODE(44), D_MASK, {O_rS, O_d, O_rA, 0},
  465. 0, "sth", H_RA0_IS_0 },
  466. { D_OPCODE(45), D_MASK, {O_rS, O_d, O_rA, 0},
  467. 0, "sthu", 0 },
  468. { D_OPCODE(46), D_MASK, {O_rD, O_d, O_rA, 0},
  469. 0, "lmw", H_RA0_IS_0 },
  470. { D_OPCODE(47), D_MASK, {O_rS, O_d, O_rA, 0},
  471. 0, "stmw", H_RA0_IS_0 },
  472. };
  473. const unsigned int n_opcodes = sizeof(opcodes) / sizeof(opcodes[0]);
  474. struct spr_info spr_map[] = {
  475. { SPR_XER, "XER" },
  476. { SPR_LR, "LR" },
  477. { SPR_CTR, "CTR" },
  478. { SPR_DSISR, "DSISR" },
  479. { SPR_DAR, "DAR" },
  480. { SPR_DEC, "DEC" },
  481. { SPR_SRR0, "SRR0" },
  482. { SPR_SRR1, "SRR1" },
  483. { SPR_EIE, "EIE" },
  484. { SPR_EID, "EID" },
  485. { SPR_CMPA, "CMPA" },
  486. { SPR_CMPB, "CMPB" },
  487. { SPR_CMPC, "CMPC" },
  488. { SPR_CMPD, "CMPD" },
  489. { SPR_ICR, "ICR" },
  490. { SPR_DER, "DER" },
  491. { SPR_COUNTA, "COUNTA" },
  492. { SPR_COUNTB, "COUNTB" },
  493. { SPR_CMPE, "CMPE" },
  494. { SPR_CMPF, "CMPF" },
  495. { SPR_CMPG, "CMPG" },
  496. { SPR_CMPH, "CMPH" },
  497. { SPR_LCTRL1, "LCTRL1" },
  498. { SPR_LCTRL2, "LCTRL2" },
  499. { SPR_ICTRL, "ICTRL" },
  500. { SPR_BAR, "BAR" },
  501. { SPR_USPRG0, "USPRG0" },
  502. { SPR_SPRG4_RO, "SPRG4_RO" },
  503. { SPR_SPRG5_RO, "SPRG5_RO" },
  504. { SPR_SPRG6_RO, "SPRG6_RO" },
  505. { SPR_SPRG7_RO, "SPRG7_RO" },
  506. { SPR_SPRG0, "SPRG0" },
  507. { SPR_SPRG1, "SPRG1" },
  508. { SPR_SPRG2, "SPRG2" },
  509. { SPR_SPRG3, "SPRG3" },
  510. { SPR_SPRG4, "SPRG4" },
  511. { SPR_SPRG5, "SPRG5" },
  512. { SPR_SPRG6, "SPRG6" },
  513. { SPR_SPRG7, "SPRG7" },
  514. { SPR_EAR, "EAR" },
  515. { SPR_TBL, "TBL" },
  516. { SPR_TBU, "TBU" },
  517. { SPR_IC_CST, "IC_CST" },
  518. { SPR_IC_ADR, "IC_ADR" },
  519. { SPR_IC_DAT, "IC_DAT" },
  520. { SPR_DC_CST, "DC_CST" },
  521. { SPR_DC_ADR, "DC_ADR" },
  522. { SPR_DC_DAT, "DC_DAT" },
  523. { SPR_DPDR, "DPDR" },
  524. { SPR_IMMR, "IMMR" },
  525. { SPR_MI_CTR, "MI_CTR" },
  526. { SPR_MI_AP, "MI_AP" },
  527. { SPR_MI_EPN, "MI_EPN" },
  528. { SPR_MI_TWC, "MI_TWC" },
  529. { SPR_MI_RPN, "MI_RPN" },
  530. { SPR_MD_CTR, "MD_CTR" },
  531. { SPR_M_CASID, "M_CASID" },
  532. { SPR_MD_AP, "MD_AP" },
  533. { SPR_MD_EPN, "MD_EPN" },
  534. { SPR_M_TWB, "M_TWB" },
  535. { SPR_MD_TWC, "MD_TWC" },
  536. { SPR_MD_RPN, "MD_RPN" },
  537. { SPR_M_TW, "M_TW" },
  538. { SPR_MI_DBCAM, "MI_DBCAM" },
  539. { SPR_MI_DBRAM0, "MI_DBRAM0" },
  540. { SPR_MI_DBRAM1, "MI_DBRAM1" },
  541. { SPR_MD_DBCAM, "MD_DBCAM" },
  542. { SPR_MD_DBRAM0, "MD_DBRAM0" },
  543. { SPR_MD_DBRAM1, "MD_DBRAM1" },
  544. { SPR_ZPR, "ZPR" },
  545. { SPR_PID, "PID" },
  546. { SPR_CCR0, "CCR0" },
  547. { SPR_IAC3, "IAC3" },
  548. { SPR_IAC4, "IAC4" },
  549. { SPR_DVC1, "DVC1" },
  550. { SPR_DVC2, "DVC2" },
  551. { SPR_SGR, "SGR" },
  552. { SPR_DCWR, "DCWR" },
  553. { SPR_SLER, "SLER" },
  554. { SPR_SU0R, "SU0R" },
  555. { SPR_DBCR1, "DBCR1" },
  556. { SPR_ICDBDR, "ICDBDR" },
  557. { SPR_ESR, "ESR" },
  558. { SPR_DEAR, "DEAR" },
  559. { SPR_EVPR, "EVPR" },
  560. { SPR_TSR, "TSR" },
  561. { SPR_TCR, "TCR" },
  562. { SPR_PIT, "PIT" },
  563. { SPR_SRR2, "SRR2" },
  564. { SPR_SRR3, "SRR3" },
  565. { SPR_DBSR, "DBSR" },
  566. { SPR_DBCR0, "DBCR0" },
  567. { SPR_IAC1, "IAC1" },
  568. { SPR_IAC2, "IAC2" },
  569. { SPR_DAC1, "DAC1" },
  570. { SPR_DAC2, "DAC2" },
  571. { SPR_DCCR, "DCCR" },
  572. { SPR_ICCR, "ICCR" },
  573. };
  574. const unsigned int n_sprs = sizeof(spr_map) / sizeof(spr_map[0]);
  575. #endif
  576. /*
  577. * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks
  578. * All rights reserved.
  579. *
  580. * Redistribution and use in source and binary forms are freely
  581. * permitted provided that the above copyright notice and this
  582. * paragraph and the following disclaimer are duplicated in all
  583. * such forms.
  584. *
  585. * This software is provided "AS IS" and without any express or
  586. * implied warranties, including, without limitation, the implied
  587. * warranties of merchantability and fitness for a particular
  588. * purpose.
  589. */