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