ia64-opc-b.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. /* ia64-opc-b.c -- IA-64 `B' opcode table.
  2. Copyright (C) 1998-2022 Free Software Foundation, Inc.
  3. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
  4. This file is part of the GNU opcodes library.
  5. This library is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 3, or (at your option)
  8. any later version.
  9. It is distributed in the hope that it will be useful, but WITHOUT
  10. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  12. License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this file; see the file COPYING. If not, write to the
  15. Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
  16. MA 02110-1301, USA. */
  17. #include "ia64-opc.h"
  18. #define B0 IA64_TYPE_B, 0
  19. #define B IA64_TYPE_B, 1
  20. /* instruction bit fields: */
  21. #define bBtype(x) (((ia64_insn) ((x) & 0x7)) << 6)
  22. #define bD(x) (((ia64_insn) ((x) & 0x1)) << 35)
  23. #define bIh(x) (((ia64_insn) ((x) & 0x1)) << 35)
  24. #define bPa(x) (((ia64_insn) ((x) & 0x1)) << 12)
  25. #define bPr(x) (((ia64_insn) ((x) & 0x3f)) << 0)
  26. #define bWha(x) (((ia64_insn) ((x) & 0x3)) << 33)
  27. #define bWhb(x) (((ia64_insn) ((x) & 0x3)) << 3)
  28. #define bWhc(x) (((ia64_insn) ((x) & 0x7)) << 32)
  29. #define bX6(x) (((ia64_insn) ((x) & 0x3f)) << 27)
  30. #define mBtype bBtype (-1)
  31. #define mD bD (-1)
  32. #define mIh bIh (-1)
  33. #define mPa bPa (-1)
  34. #define mPr bPr (-1)
  35. #define mWha bWha (-1)
  36. #define mWhb bWhb (-1)
  37. #define mWhc bWhc (-1)
  38. #define mX6 bX6 (-1)
  39. #define OpX6(a,b) (bOp (a) | bX6 (b)), (mOp | mX6)
  40. #define OpPaWhaD(a,b,c,d) \
  41. (bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
  42. #define OpPaWhcD(a,b,c,d) \
  43. (bOp (a) | bPa (b) | bWhc (c) | bD (d)), (mOp | mPa | mWhc | mD)
  44. #define OpBtypePaWhaD(a,b,c,d,e) \
  45. (bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
  46. (mOp | mBtype | mPa | mWha | mD)
  47. #define OpBtypePaWhaDPr(a,b,c,d,e,f) \
  48. (bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
  49. (mOp | mBtype | mPa | mWha | mD | mPr)
  50. #define OpX6BtypePaWhaD(a,b,c,d,e,f) \
  51. (bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f)), \
  52. (mOp | mX6 | mBtype | mPa | mWha | mD)
  53. #define OpX6BtypePaWhaDPr(a,b,c,d,e,f,g) \
  54. (bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f) | bPr (g)), \
  55. (mOp | mX6 | mBtype | mPa | mWha | mD | mPr)
  56. #define OpIhWhb(a,b,c) \
  57. (bOp (a) | bIh (b) | bWhb (c)), \
  58. (mOp | mIh | mWhb)
  59. #define OpX6IhWhb(a,b,c,d) \
  60. (bOp (a) | bX6 (b) | bIh (c) | bWhb (d)), \
  61. (mOp | mX6 | mIh | mWhb)
  62. /* Used to initialise unused fields in ia64_opcode struct,
  63. in order to stop gcc from complaining. */
  64. #define EMPTY 0,0,NULL
  65. struct ia64_opcode ia64_opcodes_b[] =
  66. {
  67. /* B-type instruction encodings (sorted according to major opcode) */
  68. #define BR(a,b) \
  69. B0, OpX6BtypePaWhaDPr (0, 0x20, 0, a, 0, b, 0), {B2}, PSEUDO, 0, NULL
  70. {"br.few", BR (0, 0)},
  71. {"br", BR (0, 0)},
  72. {"br.few.clr", BR (0, 1)},
  73. {"br.clr", BR (0, 1)},
  74. {"br.many", BR (1, 0)},
  75. {"br.many.clr", BR (1, 1)},
  76. #undef BR
  77. #define BR(a,b,c,d,e) B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, EMPTY
  78. #define BRP(a,b,c,d,e) B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, PSEUDO, 0, NULL
  79. #define BRT(a,b,c,d,e,f) B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, f, 0, NULL
  80. {"br.cond.sptk.few", BR (0x20, 0, 0, 0, 0)},
  81. {"br.cond.sptk", BRP (0x20, 0, 0, 0, 0)},
  82. {"br.cond.sptk.few.clr", BR (0x20, 0, 0, 0, 1)},
  83. {"br.cond.sptk.clr", BRP (0x20, 0, 0, 0, 1)},
  84. {"br.cond.spnt.few", BR (0x20, 0, 0, 1, 0)},
  85. {"br.cond.spnt", BRP (0x20, 0, 0, 1, 0)},
  86. {"br.cond.spnt.few.clr", BR (0x20, 0, 0, 1, 1)},
  87. {"br.cond.spnt.clr", BRP (0x20, 0, 0, 1, 1)},
  88. {"br.cond.dptk.few", BR (0x20, 0, 0, 2, 0)},
  89. {"br.cond.dptk", BRP (0x20, 0, 0, 2, 0)},
  90. {"br.cond.dptk.few.clr", BR (0x20, 0, 0, 2, 1)},
  91. {"br.cond.dptk.clr", BRP (0x20, 0, 0, 2, 1)},
  92. {"br.cond.dpnt.few", BR (0x20, 0, 0, 3, 0)},
  93. {"br.cond.dpnt", BRP (0x20, 0, 0, 3, 0)},
  94. {"br.cond.dpnt.few.clr", BR (0x20, 0, 0, 3, 1)},
  95. {"br.cond.dpnt.clr", BRP (0x20, 0, 0, 3, 1)},
  96. {"br.cond.sptk.many", BR (0x20, 0, 1, 0, 0)},
  97. {"br.cond.sptk.many.clr", BR (0x20, 0, 1, 0, 1)},
  98. {"br.cond.spnt.many", BR (0x20, 0, 1, 1, 0)},
  99. {"br.cond.spnt.many.clr", BR (0x20, 0, 1, 1, 1)},
  100. {"br.cond.dptk.many", BR (0x20, 0, 1, 2, 0)},
  101. {"br.cond.dptk.many.clr", BR (0x20, 0, 1, 2, 1)},
  102. {"br.cond.dpnt.many", BR (0x20, 0, 1, 3, 0)},
  103. {"br.cond.dpnt.many.clr", BR (0x20, 0, 1, 3, 1)},
  104. {"br.sptk.few", BR (0x20, 0, 0, 0, 0)},
  105. {"br.sptk", BRP (0x20, 0, 0, 0, 0)},
  106. {"br.sptk.few.clr", BR (0x20, 0, 0, 0, 1)},
  107. {"br.sptk.clr", BRP (0x20, 0, 0, 0, 1)},
  108. {"br.spnt.few", BR (0x20, 0, 0, 1, 0)},
  109. {"br.spnt", BRP (0x20, 0, 0, 1, 0)},
  110. {"br.spnt.few.clr", BR (0x20, 0, 0, 1, 1)},
  111. {"br.spnt.clr", BRP (0x20, 0, 0, 1, 1)},
  112. {"br.dptk.few", BR (0x20, 0, 0, 2, 0)},
  113. {"br.dptk", BRP (0x20, 0, 0, 2, 0)},
  114. {"br.dptk.few.clr", BR (0x20, 0, 0, 2, 1)},
  115. {"br.dptk.clr", BRP (0x20, 0, 0, 2, 1)},
  116. {"br.dpnt.few", BR (0x20, 0, 0, 3, 0)},
  117. {"br.dpnt", BRP (0x20, 0, 0, 3, 0)},
  118. {"br.dpnt.few.clr", BR (0x20, 0, 0, 3, 1)},
  119. {"br.dpnt.clr", BRP (0x20, 0, 0, 3, 1)},
  120. {"br.sptk.many", BR (0x20, 0, 1, 0, 0)},
  121. {"br.sptk.many.clr", BR (0x20, 0, 1, 0, 1)},
  122. {"br.spnt.many", BR (0x20, 0, 1, 1, 0)},
  123. {"br.spnt.many.clr", BR (0x20, 0, 1, 1, 1)},
  124. {"br.dptk.many", BR (0x20, 0, 1, 2, 0)},
  125. {"br.dptk.many.clr", BR (0x20, 0, 1, 2, 1)},
  126. {"br.dpnt.many", BR (0x20, 0, 1, 3, 0)},
  127. {"br.dpnt.many.clr", BR (0x20, 0, 1, 3, 1)},
  128. {"br.ia.sptk.few", BR (0x20, 1, 0, 0, 0)},
  129. {"br.ia.sptk", BRP (0x20, 1, 0, 0, 0)},
  130. {"br.ia.sptk.few.clr", BR (0x20, 1, 0, 0, 1)},
  131. {"br.ia.sptk.clr", BRP (0x20, 1, 0, 0, 1)},
  132. {"br.ia.spnt.few", BR (0x20, 1, 0, 1, 0)},
  133. {"br.ia.spnt", BRP (0x20, 1, 0, 1, 0)},
  134. {"br.ia.spnt.few.clr", BR (0x20, 1, 0, 1, 1)},
  135. {"br.ia.spnt.clr", BRP (0x20, 1, 0, 1, 1)},
  136. {"br.ia.dptk.few", BR (0x20, 1, 0, 2, 0)},
  137. {"br.ia.dptk", BRP (0x20, 1, 0, 2, 0)},
  138. {"br.ia.dptk.few.clr", BR (0x20, 1, 0, 2, 1)},
  139. {"br.ia.dptk.clr", BRP (0x20, 1, 0, 2, 1)},
  140. {"br.ia.dpnt.few", BR (0x20, 1, 0, 3, 0)},
  141. {"br.ia.dpnt", BRP (0x20, 1, 0, 3, 0)},
  142. {"br.ia.dpnt.few.clr", BR (0x20, 1, 0, 3, 1)},
  143. {"br.ia.dpnt.clr", BRP (0x20, 1, 0, 3, 1)},
  144. {"br.ia.sptk.many", BR (0x20, 1, 1, 0, 0)},
  145. {"br.ia.sptk.many.clr", BR (0x20, 1, 1, 0, 1)},
  146. {"br.ia.spnt.many", BR (0x20, 1, 1, 1, 0)},
  147. {"br.ia.spnt.many.clr", BR (0x20, 1, 1, 1, 1)},
  148. {"br.ia.dptk.many", BR (0x20, 1, 1, 2, 0)},
  149. {"br.ia.dptk.many.clr", BR (0x20, 1, 1, 2, 1)},
  150. {"br.ia.dpnt.many", BR (0x20, 1, 1, 3, 0)},
  151. {"br.ia.dpnt.many.clr", BR (0x20, 1, 1, 3, 1)},
  152. {"br.ret.sptk.few", BRT (0x21, 4, 0, 0, 0, MOD_RRBS)},
  153. {"br.ret.sptk", BRT (0x21, 4, 0, 0, 0, PSEUDO | MOD_RRBS)},
  154. {"br.ret.sptk.few.clr", BRT (0x21, 4, 0, 0, 1, MOD_RRBS)},
  155. {"br.ret.sptk.clr", BRT (0x21, 4, 0, 0, 1, PSEUDO | MOD_RRBS)},
  156. {"br.ret.spnt.few", BRT (0x21, 4, 0, 1, 0, MOD_RRBS)},
  157. {"br.ret.spnt", BRT (0x21, 4, 0, 1, 0, PSEUDO | MOD_RRBS)},
  158. {"br.ret.spnt.few.clr", BRT (0x21, 4, 0, 1, 1, MOD_RRBS)},
  159. {"br.ret.spnt.clr", BRT (0x21, 4, 0, 1, 1, PSEUDO | MOD_RRBS)},
  160. {"br.ret.dptk.few", BRT (0x21, 4, 0, 2, 0, MOD_RRBS)},
  161. {"br.ret.dptk", BRT (0x21, 4, 0, 2, 0, PSEUDO | MOD_RRBS)},
  162. {"br.ret.dptk.few.clr", BRT (0x21, 4, 0, 2, 1, MOD_RRBS)},
  163. {"br.ret.dptk.clr", BRT (0x21, 4, 0, 2, 1, PSEUDO | MOD_RRBS)},
  164. {"br.ret.dpnt.few", BRT (0x21, 4, 0, 3, 0, MOD_RRBS)},
  165. {"br.ret.dpnt", BRT (0x21, 4, 0, 3, 0, PSEUDO | MOD_RRBS)},
  166. {"br.ret.dpnt.few.clr", BRT (0x21, 4, 0, 3, 1, MOD_RRBS)},
  167. {"br.ret.dpnt.clr", BRT (0x21, 4, 0, 3, 1, PSEUDO | MOD_RRBS)},
  168. {"br.ret.sptk.many", BRT (0x21, 4, 1, 0, 0, MOD_RRBS)},
  169. {"br.ret.sptk.many.clr", BRT (0x21, 4, 1, 0, 1, MOD_RRBS)},
  170. {"br.ret.spnt.many", BRT (0x21, 4, 1, 1, 0, MOD_RRBS)},
  171. {"br.ret.spnt.many.clr", BRT (0x21, 4, 1, 1, 1, MOD_RRBS)},
  172. {"br.ret.dptk.many", BRT (0x21, 4, 1, 2, 0, MOD_RRBS)},
  173. {"br.ret.dptk.many.clr", BRT (0x21, 4, 1, 2, 1, MOD_RRBS)},
  174. {"br.ret.dpnt.many", BRT (0x21, 4, 1, 3, 0, MOD_RRBS)},
  175. {"br.ret.dpnt.many.clr", BRT (0x21, 4, 1, 3, 1, MOD_RRBS)},
  176. #undef BR
  177. #undef BRP
  178. #undef BRT
  179. {"cover", B0, OpX6 (0, 0x02), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
  180. {"clrrrb", B0, OpX6 (0, 0x04), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
  181. {"clrrrb.pr", B0, OpX6 (0, 0x05), {0, }, NO_PRED | LAST | MOD_RRBS, 0, NULL},
  182. {"rfi", B0, OpX6 (0, 0x08), {0, }, NO_PRED | LAST | PRIV | MOD_RRBS, 0, NULL},
  183. {"bsw.0", B0, OpX6 (0, 0x0c), {0, }, NO_PRED | LAST | PRIV, 0, NULL},
  184. {"bsw.1", B0, OpX6 (0, 0x0d), {0, }, NO_PRED | LAST | PRIV, 0, NULL},
  185. {"epc", B0, OpX6 (0, 0x10), {0, }, NO_PRED, 0, NULL},
  186. {"vmsw.0", B0, OpX6 (0, 0x18), {0, }, NO_PRED | PRIV, 0, NULL},
  187. {"vmsw.1", B0, OpX6 (0, 0x19), {0, }, NO_PRED | PRIV, 0, NULL},
  188. {"break.b", B0, OpX6 (0, 0x00), {IMMU21}, EMPTY},
  189. {"br.call.sptk.few", B, OpPaWhcD (1, 0, 1, 0), {B1, B2}, EMPTY},
  190. {"br.call.sptk", B, OpPaWhcD (1, 0, 1, 0), {B1, B2}, PSEUDO, 0, NULL},
  191. {"br.call.sptk.few.clr", B, OpPaWhcD (1, 0, 1, 1), {B1, B2}, EMPTY},
  192. {"br.call.sptk.clr", B, OpPaWhcD (1, 0, 1, 1), {B1, B2}, PSEUDO, 0, NULL},
  193. {"br.call.spnt.few", B, OpPaWhcD (1, 0, 3, 0), {B1, B2}, EMPTY},
  194. {"br.call.spnt", B, OpPaWhcD (1, 0, 3, 0), {B1, B2}, PSEUDO, 0, NULL},
  195. {"br.call.spnt.few.clr", B, OpPaWhcD (1, 0, 3, 1), {B1, B2}, EMPTY},
  196. {"br.call.spnt.clr", B, OpPaWhcD (1, 0, 3, 1), {B1, B2}, PSEUDO, 0, NULL},
  197. {"br.call.dptk.few", B, OpPaWhcD (1, 0, 5, 0), {B1, B2}, EMPTY},
  198. {"br.call.dptk", B, OpPaWhcD (1, 0, 5, 0), {B1, B2}, PSEUDO, 0, NULL},
  199. {"br.call.dptk.few.clr", B, OpPaWhcD (1, 0, 5, 1), {B1, B2}, EMPTY},
  200. {"br.call.dptk.clr", B, OpPaWhcD (1, 0, 5, 1), {B1, B2}, PSEUDO, 0, NULL},
  201. {"br.call.dpnt.few", B, OpPaWhcD (1, 0, 7, 0), {B1, B2}, EMPTY},
  202. {"br.call.dpnt", B, OpPaWhcD (1, 0, 7, 0), {B1, B2}, PSEUDO, 0, NULL},
  203. {"br.call.dpnt.few.clr", B, OpPaWhcD (1, 0, 7, 1), {B1, B2}, EMPTY},
  204. {"br.call.dpnt.clr", B, OpPaWhcD (1, 0, 7, 1), {B1, B2}, PSEUDO, 0, NULL},
  205. {"br.call.sptk.many", B, OpPaWhcD (1, 1, 1, 0), {B1, B2}, EMPTY},
  206. {"br.call.sptk.many.clr", B, OpPaWhcD (1, 1, 1, 1), {B1, B2}, EMPTY},
  207. {"br.call.spnt.many", B, OpPaWhcD (1, 1, 3, 0), {B1, B2}, EMPTY},
  208. {"br.call.spnt.many.clr", B, OpPaWhcD (1, 1, 3, 1), {B1, B2}, EMPTY},
  209. {"br.call.dptk.many", B, OpPaWhcD (1, 1, 5, 0), {B1, B2}, EMPTY},
  210. {"br.call.dptk.many.clr", B, OpPaWhcD (1, 1, 5, 1), {B1, B2}, EMPTY},
  211. {"br.call.dpnt.many", B, OpPaWhcD (1, 1, 7, 0), {B1, B2}, EMPTY},
  212. {"br.call.dpnt.many.clr", B, OpPaWhcD (1, 1, 7, 1), {B1, B2}, EMPTY},
  213. #define BRP(a,b,c) \
  214. B0, OpX6IhWhb (2, a, b, c), {B2, TAG13}, NO_PRED, 0, NULL
  215. {"brp.sptk", BRP (0x10, 0, 0)},
  216. {"brp.dptk", BRP (0x10, 0, 2)},
  217. {"brp.sptk.imp", BRP (0x10, 1, 0)},
  218. {"brp.dptk.imp", BRP (0x10, 1, 2)},
  219. {"brp.ret.sptk", BRP (0x11, 0, 0)},
  220. {"brp.ret.dptk", BRP (0x11, 0, 2)},
  221. {"brp.ret.sptk.imp", BRP (0x11, 1, 0)},
  222. {"brp.ret.dptk.imp", BRP (0x11, 1, 2)},
  223. #undef BRP
  224. {"nop.b", B0, OpX6 (2, 0x00), {IMMU21}, EMPTY},
  225. {"hint.b", B0, OpX6 (2, 0x01), {IMMU21}, EMPTY},
  226. #define BR(a,b) \
  227. B0, OpBtypePaWhaDPr (4, 0, a, 0, b, 0), {TGT25c}, PSEUDO, 0, NULL
  228. {"br.few", BR (0, 0)},
  229. {"br", BR (0, 0)},
  230. {"br.few.clr", BR (0, 1)},
  231. {"br.clr", BR (0, 1)},
  232. {"br.many", BR (1, 0)},
  233. {"br.many.clr", BR (1, 1)},
  234. #undef BR
  235. #define BR(a,b,c) \
  236. B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}, EMPTY
  237. #define BRP(a,b,c) \
  238. B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}, PSEUDO, 0, NULL
  239. {"br.cond.sptk.few", BR (0, 0, 0)},
  240. {"br.cond.sptk", BRP (0, 0, 0)},
  241. {"br.cond.sptk.few.clr", BR (0, 0, 1)},
  242. {"br.cond.sptk.clr", BRP (0, 0, 1)},
  243. {"br.cond.spnt.few", BR (0, 1, 0)},
  244. {"br.cond.spnt", BRP (0, 1, 0)},
  245. {"br.cond.spnt.few.clr", BR (0, 1, 1)},
  246. {"br.cond.spnt.clr", BRP (0, 1, 1)},
  247. {"br.cond.dptk.few", BR (0, 2, 0)},
  248. {"br.cond.dptk", BRP (0, 2, 0)},
  249. {"br.cond.dptk.few.clr", BR (0, 2, 1)},
  250. {"br.cond.dptk.clr", BRP (0, 2, 1)},
  251. {"br.cond.dpnt.few", BR (0, 3, 0)},
  252. {"br.cond.dpnt", BRP (0, 3, 0)},
  253. {"br.cond.dpnt.few.clr", BR (0, 3, 1)},
  254. {"br.cond.dpnt.clr", BRP (0, 3, 1)},
  255. {"br.cond.sptk.many", BR (1, 0, 0)},
  256. {"br.cond.sptk.many.clr", BR (1, 0, 1)},
  257. {"br.cond.spnt.many", BR (1, 1, 0)},
  258. {"br.cond.spnt.many.clr", BR (1, 1, 1)},
  259. {"br.cond.dptk.many", BR (1, 2, 0)},
  260. {"br.cond.dptk.many.clr", BR (1, 2, 1)},
  261. {"br.cond.dpnt.many", BR (1, 3, 0)},
  262. {"br.cond.dpnt.many.clr", BR (1, 3, 1)},
  263. {"br.sptk.few", BR (0, 0, 0)},
  264. {"br.sptk", BRP (0, 0, 0)},
  265. {"br.sptk.few.clr", BR (0, 0, 1)},
  266. {"br.sptk.clr", BRP (0, 0, 1)},
  267. {"br.spnt.few", BR (0, 1, 0)},
  268. {"br.spnt", BRP (0, 1, 0)},
  269. {"br.spnt.few.clr", BR (0, 1, 1)},
  270. {"br.spnt.clr", BRP (0, 1, 1)},
  271. {"br.dptk.few", BR (0, 2, 0)},
  272. {"br.dptk", BRP (0, 2, 0)},
  273. {"br.dptk.few.clr", BR (0, 2, 1)},
  274. {"br.dptk.clr", BRP (0, 2, 1)},
  275. {"br.dpnt.few", BR (0, 3, 0)},
  276. {"br.dpnt", BRP (0, 3, 0)},
  277. {"br.dpnt.few.clr", BR (0, 3, 1)},
  278. {"br.dpnt.clr", BRP (0, 3, 1)},
  279. {"br.sptk.many", BR (1, 0, 0)},
  280. {"br.sptk.many.clr", BR (1, 0, 1)},
  281. {"br.spnt.many", BR (1, 1, 0)},
  282. {"br.spnt.many.clr", BR (1, 1, 1)},
  283. {"br.dptk.many", BR (1, 2, 0)},
  284. {"br.dptk.many.clr", BR (1, 2, 1)},
  285. {"br.dpnt.many", BR (1, 3, 0)},
  286. {"br.dpnt.many.clr", BR (1, 3, 1)},
  287. #undef BR
  288. #undef BRP
  289. #define BR(a,b,c,d, e) \
  290. B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | e, 0, NULL
  291. {"br.wexit.sptk.few", BR (2, 0, 0, 0, MOD_RRBS)},
  292. {"br.wexit.sptk", BR (2, 0, 0, 0, PSEUDO | MOD_RRBS)},
  293. {"br.wexit.sptk.few.clr", BR (2, 0, 0, 1, MOD_RRBS)},
  294. {"br.wexit.sptk.clr", BR (2, 0, 0, 1, PSEUDO | MOD_RRBS)},
  295. {"br.wexit.spnt.few", BR (2, 0, 1, 0, MOD_RRBS)},
  296. {"br.wexit.spnt", BR (2, 0, 1, 0, PSEUDO | MOD_RRBS)},
  297. {"br.wexit.spnt.few.clr", BR (2, 0, 1, 1, MOD_RRBS)},
  298. {"br.wexit.spnt.clr", BR (2, 0, 1, 1, PSEUDO | MOD_RRBS)},
  299. {"br.wexit.dptk.few", BR (2, 0, 2, 0, MOD_RRBS)},
  300. {"br.wexit.dptk", BR (2, 0, 2, 0, PSEUDO | MOD_RRBS)},
  301. {"br.wexit.dptk.few.clr", BR (2, 0, 2, 1, MOD_RRBS)},
  302. {"br.wexit.dptk.clr", BR (2, 0, 2, 1, PSEUDO | MOD_RRBS)},
  303. {"br.wexit.dpnt.few", BR (2, 0, 3, 0, MOD_RRBS)},
  304. {"br.wexit.dpnt", BR (2, 0, 3, 0, PSEUDO | MOD_RRBS)},
  305. {"br.wexit.dpnt.few.clr", BR (2, 0, 3, 1, MOD_RRBS)},
  306. {"br.wexit.dpnt.clr", BR (2, 0, 3, 1, PSEUDO | MOD_RRBS)},
  307. {"br.wexit.sptk.many", BR (2, 1, 0, 0, MOD_RRBS)},
  308. {"br.wexit.sptk.many.clr", BR (2, 1, 0, 1, MOD_RRBS)},
  309. {"br.wexit.spnt.many", BR (2, 1, 1, 0, MOD_RRBS)},
  310. {"br.wexit.spnt.many.clr", BR (2, 1, 1, 1, MOD_RRBS)},
  311. {"br.wexit.dptk.many", BR (2, 1, 2, 0, MOD_RRBS)},
  312. {"br.wexit.dptk.many.clr", BR (2, 1, 2, 1, MOD_RRBS)},
  313. {"br.wexit.dpnt.many", BR (2, 1, 3, 0, MOD_RRBS)},
  314. {"br.wexit.dpnt.many.clr", BR (2, 1, 3, 1, MOD_RRBS)},
  315. {"br.wtop.sptk.few", BR (3, 0, 0, 0, MOD_RRBS)},
  316. {"br.wtop.sptk", BR (3, 0, 0, 0, PSEUDO | MOD_RRBS)},
  317. {"br.wtop.sptk.few.clr", BR (3, 0, 0, 1, MOD_RRBS)},
  318. {"br.wtop.sptk.clr", BR (3, 0, 0, 1, PSEUDO | MOD_RRBS)},
  319. {"br.wtop.spnt.few", BR (3, 0, 1, 0, MOD_RRBS)},
  320. {"br.wtop.spnt", BR (3, 0, 1, 0, PSEUDO | MOD_RRBS)},
  321. {"br.wtop.spnt.few.clr", BR (3, 0, 1, 1, MOD_RRBS)},
  322. {"br.wtop.spnt.clr", BR (3, 0, 1, 1, PSEUDO | MOD_RRBS)},
  323. {"br.wtop.dptk.few", BR (3, 0, 2, 0, MOD_RRBS)},
  324. {"br.wtop.dptk", BR (3, 0, 2, 0, PSEUDO | MOD_RRBS)},
  325. {"br.wtop.dptk.few.clr", BR (3, 0, 2, 1, MOD_RRBS)},
  326. {"br.wtop.dptk.clr", BR (3, 0, 2, 1, PSEUDO | MOD_RRBS)},
  327. {"br.wtop.dpnt.few", BR (3, 0, 3, 0, MOD_RRBS)},
  328. {"br.wtop.dpnt", BR (3, 0, 3, 0, PSEUDO | MOD_RRBS)},
  329. {"br.wtop.dpnt.few.clr", BR (3, 0, 3, 1, MOD_RRBS)},
  330. {"br.wtop.dpnt.clr", BR (3, 0, 3, 1, PSEUDO | MOD_RRBS)},
  331. {"br.wtop.sptk.many", BR (3, 1, 0, 0, MOD_RRBS)},
  332. {"br.wtop.sptk.many.clr", BR (3, 1, 0, 1, MOD_RRBS)},
  333. {"br.wtop.spnt.many", BR (3, 1, 1, 0, MOD_RRBS)},
  334. {"br.wtop.spnt.many.clr", BR (3, 1, 1, 1, MOD_RRBS)},
  335. {"br.wtop.dptk.many", BR (3, 1, 2, 0, MOD_RRBS)},
  336. {"br.wtop.dptk.many.clr", BR (3, 1, 2, 1, MOD_RRBS)},
  337. {"br.wtop.dpnt.many", BR (3, 1, 3, 0, MOD_RRBS)},
  338. {"br.wtop.dpnt.many.clr", BR (3, 1, 3, 1, MOD_RRBS)},
  339. #undef BR
  340. #define BR(a,b,c,d) \
  341. B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | NO_PRED, 0, NULL
  342. #define BRT(a,b,c,d,e) \
  343. B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | NO_PRED | e, 0, NULL
  344. {"br.cloop.sptk.few", BR (5, 0, 0, 0)},
  345. {"br.cloop.sptk", BRT (5, 0, 0, 0, PSEUDO)},
  346. {"br.cloop.sptk.few.clr", BR (5, 0, 0, 1)},
  347. {"br.cloop.sptk.clr", BRT (5, 0, 0, 1, PSEUDO)},
  348. {"br.cloop.spnt.few", BR (5, 0, 1, 0)},
  349. {"br.cloop.spnt", BRT (5, 0, 1, 0, PSEUDO)},
  350. {"br.cloop.spnt.few.clr", BR (5, 0, 1, 1)},
  351. {"br.cloop.spnt.clr", BRT (5, 0, 1, 1, PSEUDO)},
  352. {"br.cloop.dptk.few", BR (5, 0, 2, 0)},
  353. {"br.cloop.dptk", BRT (5, 0, 2, 0, PSEUDO)},
  354. {"br.cloop.dptk.few.clr", BR (5, 0, 2, 1)},
  355. {"br.cloop.dptk.clr", BRT (5, 0, 2, 1, PSEUDO)},
  356. {"br.cloop.dpnt.few", BR (5, 0, 3, 0)},
  357. {"br.cloop.dpnt", BRT (5, 0, 3, 0, PSEUDO)},
  358. {"br.cloop.dpnt.few.clr", BR (5, 0, 3, 1)},
  359. {"br.cloop.dpnt.clr", BRT (5, 0, 3, 1, PSEUDO)},
  360. {"br.cloop.sptk.many", BR (5, 1, 0, 0)},
  361. {"br.cloop.sptk.many.clr", BR (5, 1, 0, 1)},
  362. {"br.cloop.spnt.many", BR (5, 1, 1, 0)},
  363. {"br.cloop.spnt.many.clr", BR (5, 1, 1, 1)},
  364. {"br.cloop.dptk.many", BR (5, 1, 2, 0)},
  365. {"br.cloop.dptk.many.clr", BR (5, 1, 2, 1)},
  366. {"br.cloop.dpnt.many", BR (5, 1, 3, 0)},
  367. {"br.cloop.dpnt.many.clr", BR (5, 1, 3, 1)},
  368. {"br.cexit.sptk.few", BRT (6, 0, 0, 0, MOD_RRBS)},
  369. {"br.cexit.sptk", BRT (6, 0, 0, 0, PSEUDO | MOD_RRBS)},
  370. {"br.cexit.sptk.few.clr", BRT (6, 0, 0, 1, MOD_RRBS)},
  371. {"br.cexit.sptk.clr", BRT (6, 0, 0, 1, PSEUDO | MOD_RRBS)},
  372. {"br.cexit.spnt.few", BRT (6, 0, 1, 0, MOD_RRBS)},
  373. {"br.cexit.spnt", BRT (6, 0, 1, 0, PSEUDO | MOD_RRBS)},
  374. {"br.cexit.spnt.few.clr", BRT (6, 0, 1, 1, MOD_RRBS)},
  375. {"br.cexit.spnt.clr", BRT (6, 0, 1, 1, PSEUDO | MOD_RRBS)},
  376. {"br.cexit.dptk.few", BRT (6, 0, 2, 0, MOD_RRBS)},
  377. {"br.cexit.dptk", BRT (6, 0, 2, 0, PSEUDO | MOD_RRBS)},
  378. {"br.cexit.dptk.few.clr", BRT (6, 0, 2, 1, MOD_RRBS)},
  379. {"br.cexit.dptk.clr", BRT (6, 0, 2, 1, PSEUDO | MOD_RRBS)},
  380. {"br.cexit.dpnt.few", BRT (6, 0, 3, 0, MOD_RRBS)},
  381. {"br.cexit.dpnt", BRT (6, 0, 3, 0, PSEUDO | MOD_RRBS)},
  382. {"br.cexit.dpnt.few.clr", BRT (6, 0, 3, 1, MOD_RRBS)},
  383. {"br.cexit.dpnt.clr", BRT (6, 0, 3, 1, PSEUDO | MOD_RRBS)},
  384. {"br.cexit.sptk.many", BRT (6, 1, 0, 0, MOD_RRBS)},
  385. {"br.cexit.sptk.many.clr", BRT (6, 1, 0, 1, MOD_RRBS)},
  386. {"br.cexit.spnt.many", BRT (6, 1, 1, 0, MOD_RRBS)},
  387. {"br.cexit.spnt.many.clr", BRT (6, 1, 1, 1, MOD_RRBS)},
  388. {"br.cexit.dptk.many", BRT (6, 1, 2, 0, MOD_RRBS)},
  389. {"br.cexit.dptk.many.clr", BRT (6, 1, 2, 1, MOD_RRBS)},
  390. {"br.cexit.dpnt.many", BRT (6, 1, 3, 0, MOD_RRBS)},
  391. {"br.cexit.dpnt.many.clr", BRT (6, 1, 3, 1, MOD_RRBS)},
  392. {"br.ctop.sptk.few", BRT (7, 0, 0, 0, MOD_RRBS)},
  393. {"br.ctop.sptk", BRT (7, 0, 0, 0, PSEUDO | MOD_RRBS)},
  394. {"br.ctop.sptk.few.clr", BRT (7, 0, 0, 1, MOD_RRBS)},
  395. {"br.ctop.sptk.clr", BRT (7, 0, 0, 1, PSEUDO | MOD_RRBS)},
  396. {"br.ctop.spnt.few", BRT (7, 0, 1, 0, MOD_RRBS)},
  397. {"br.ctop.spnt", BRT (7, 0, 1, 0, PSEUDO | MOD_RRBS)},
  398. {"br.ctop.spnt.few.clr", BRT (7, 0, 1, 1, MOD_RRBS)},
  399. {"br.ctop.spnt.clr", BRT (7, 0, 1, 1, PSEUDO | MOD_RRBS)},
  400. {"br.ctop.dptk.few", BRT (7, 0, 2, 0, MOD_RRBS)},
  401. {"br.ctop.dptk", BRT (7, 0, 2, 0, PSEUDO | MOD_RRBS)},
  402. {"br.ctop.dptk.few.clr", BRT (7, 0, 2, 1, MOD_RRBS)},
  403. {"br.ctop.dptk.clr", BRT (7, 0, 2, 1, PSEUDO | MOD_RRBS)},
  404. {"br.ctop.dpnt.few", BRT (7, 0, 3, 0, MOD_RRBS)},
  405. {"br.ctop.dpnt", BRT (7, 0, 3, 0, PSEUDO | MOD_RRBS)},
  406. {"br.ctop.dpnt.few.clr", BRT (7, 0, 3, 1, MOD_RRBS)},
  407. {"br.ctop.dpnt.clr", BRT (7, 0, 3, 1, PSEUDO | MOD_RRBS)},
  408. {"br.ctop.sptk.many", BRT (7, 1, 0, 0, MOD_RRBS)},
  409. {"br.ctop.sptk.many.clr", BRT (7, 1, 0, 1, MOD_RRBS)},
  410. {"br.ctop.spnt.many", BRT (7, 1, 1, 0, MOD_RRBS)},
  411. {"br.ctop.spnt.many.clr", BRT (7, 1, 1, 1, MOD_RRBS)},
  412. {"br.ctop.dptk.many", BRT (7, 1, 2, 0, MOD_RRBS)},
  413. {"br.ctop.dptk.many.clr", BRT (7, 1, 2, 1, MOD_RRBS)},
  414. {"br.ctop.dpnt.many", BRT (7, 1, 3, 0, MOD_RRBS)},
  415. {"br.ctop.dpnt.many.clr", BRT (7, 1, 3, 1, MOD_RRBS)},
  416. #undef BR
  417. #undef BRT
  418. {"br.call.sptk.few", B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}, EMPTY},
  419. {"br.call.sptk", B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
  420. {"br.call.sptk.few.clr", B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}, EMPTY},
  421. {"br.call.sptk.clr", B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
  422. {"br.call.spnt.few", B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}, EMPTY},
  423. {"br.call.spnt", B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
  424. {"br.call.spnt.few.clr", B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}, EMPTY},
  425. {"br.call.spnt.clr", B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
  426. {"br.call.dptk.few", B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}, EMPTY},
  427. {"br.call.dptk", B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
  428. {"br.call.dptk.few.clr", B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}, EMPTY},
  429. {"br.call.dptk.clr", B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
  430. {"br.call.dpnt.few", B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}, EMPTY},
  431. {"br.call.dpnt", B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}, PSEUDO, 0, NULL},
  432. {"br.call.dpnt.few.clr", B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}, EMPTY},
  433. {"br.call.dpnt.clr", B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}, PSEUDO, 0, NULL},
  434. {"br.call.sptk.many", B, OpPaWhaD (5, 1, 0, 0), {B1, TGT25c}, EMPTY},
  435. {"br.call.sptk.many.clr", B, OpPaWhaD (5, 1, 0, 1), {B1, TGT25c}, EMPTY},
  436. {"br.call.spnt.many", B, OpPaWhaD (5, 1, 1, 0), {B1, TGT25c}, EMPTY},
  437. {"br.call.spnt.many.clr", B, OpPaWhaD (5, 1, 1, 1), {B1, TGT25c}, EMPTY},
  438. {"br.call.dptk.many", B, OpPaWhaD (5, 1, 2, 0), {B1, TGT25c}, EMPTY},
  439. {"br.call.dptk.many.clr", B, OpPaWhaD (5, 1, 2, 1), {B1, TGT25c}, EMPTY},
  440. {"br.call.dpnt.many", B, OpPaWhaD (5, 1, 3, 0), {B1, TGT25c}, EMPTY},
  441. {"br.call.dpnt.many.clr", B, OpPaWhaD (5, 1, 3, 1), {B1, TGT25c}, EMPTY},
  442. /* Branch predict. */
  443. #define BRP(a,b) \
  444. B0, OpIhWhb (7, a, b), {TGT25c, TAG13}, NO_PRED, 0, NULL
  445. {"brp.sptk", BRP (0, 0)},
  446. {"brp.loop", BRP (0, 1)},
  447. {"brp.dptk", BRP (0, 2)},
  448. {"brp.exit", BRP (0, 3)},
  449. {"brp.sptk.imp", BRP (1, 0)},
  450. {"brp.loop.imp", BRP (1, 1)},
  451. {"brp.dptk.imp", BRP (1, 2)},
  452. {"brp.exit.imp", BRP (1, 3)},
  453. #undef BRP
  454. {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
  455. };
  456. #undef B0
  457. #undef B
  458. #undef bBtype
  459. #undef bD
  460. #undef bIh
  461. #undef bPa
  462. #undef bPr
  463. #undef bWha
  464. #undef bWhb
  465. #undef bWhc
  466. #undef bX6
  467. #undef mBtype
  468. #undef mD
  469. #undef mIh
  470. #undef mPa
  471. #undef mPr
  472. #undef mWha
  473. #undef mWhb
  474. #undef mWhc
  475. #undef mX6
  476. #undef OpX6
  477. #undef OpPaWhaD
  478. #undef OpPaWhcD
  479. #undef OpBtypePaWhaD
  480. #undef OpBtypePaWhaDPr
  481. #undef OpX6BtypePaWhaD
  482. #undef OpX6BtypePaWhaDPr
  483. #undef OpIhWhb
  484. #undef OpX6IhWhb
  485. #undef EMPTY