bfd/
[binutils.git] / opcodes / ia64-opc-b.c
blobfc57ab669d104570ee9dfa2c580c7cc30f8cbe0c
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>
5 This file is part of GDB, GAS, and the GNU binutils.
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.
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.
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. */
22 #include "ia64-opc.h"
24 #define B0 IA64_TYPE_B, 0
25 #define B IA64_TYPE_B, 1
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)
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)
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)
72 /* Used to initialise unused fields in ia64_opcode struct,
73 in order to stop gcc from complaining. */
74 #define EMPTY 0,0,NULL
76 struct ia64_opcode ia64_opcodes_b[] =
78 /* B-type instruction encodings (sorted according to major opcode) */
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
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
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},
201 {"break.b", B0, OpX6 (0, 0x00), {IMMU21}, EMPTY},
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},
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
240 {"nop.b", B0, OpX6 (2, 0x00), {IMMU21}, EMPTY},
241 {"hint.b", B0, OpX6 (2, 0x01), {IMMU21}, EMPTY},
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
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
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)},
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
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},
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
477 {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
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