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