ia64-opc-b.c revision 104834
117683Spst/* ia64-opc-b.c -- IA-64 `B' opcode table.
239291Sfenner   Copyright 1998, 1999, 2000 Free Software Foundation, Inc.
317683Spst   Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
417683Spst
517683Spst   This file is part of GDB, GAS, and the GNU binutils.
617683Spst
717683Spst   GDB, GAS, and the GNU binutils are free software; you can redistribute
817683Spst   them and/or modify them under the terms of the GNU General Public
917683Spst   License as published by the Free Software Foundation; either version
1017683Spst   2, or (at your option) any later version.
1117683Spst
1217683Spst   GDB, GAS, and the GNU binutils are distributed in the hope that they
1317683Spst   will be useful, but WITHOUT ANY WARRANTY; without even the implied
1417683Spst   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1517683Spst   the GNU General Public License for more details.
1617683Spst
1717683Spst   You should have received a copy of the GNU General Public License
1817683Spst   along with this file; see the file COPYING.  If not, write to the
1917683Spst   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2017683Spst   02111-1307, USA.  */
2117683Spst
2217683Spst#include "ia64-opc.h"
2317683Spst
2417683Spst#define B0	IA64_TYPE_B, 0
2517683Spst#define B	IA64_TYPE_B, 1
26127664Sbms
2717683Spst/* instruction bit fields: */
2817683Spst#define bBtype(x)	(((ia64_insn) ((x) & 0x7)) << 6)
2917683Spst#define bD(x)		(((ia64_insn) ((x) & 0x1)) << 35)
3017683Spst#define bIh(x)		(((ia64_insn) ((x) & 0x1)) << 35)
3117683Spst#define bPa(x)		(((ia64_insn) ((x) & 0x1)) << 12)
3217683Spst#define bPr(x)		(((ia64_insn) ((x) & 0x3f)) << 0)
3317683Spst#define bWha(x)		(((ia64_insn) ((x) & 0x3)) << 33)
3417683Spst#define bWhb(x)		(((ia64_insn) ((x) & 0x3)) << 3)
3517683Spst#define bWhc(x)		(((ia64_insn) ((x) & 0x7)) << 32)
36127664Sbms#define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
3717683Spst
3817683Spst#define mBtype		bBtype (-1)
3926175Sfenner#define mD		bD (-1)
40127664Sbms#define mIh		bIh (-1)
41127664Sbms#define mPa		bPa (-1)
4226175Sfenner#define mPr		bPr (-1)
4326175Sfenner#define mWha		bWha (-1)
4475107Sfenner#define mWhb		bWhb (-1)
4575107Sfenner#define mWhc		bWhc (-1)
4675107Sfenner#define mX6		bX6 (-1)
4775107Sfenner
4817683Spst#define OpX6(a,b) 	(bOp (a) | bX6 (b)), (mOp | mX6)
4917683Spst#define OpPaWhaD(a,b,c,d) \
5017683Spst	(bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
5117683Spst#define OpPaWhcD(a,b,c,d) \
5217683Spst	(bOp (a) | bPa (b) | bWhc (c) | bD (d)), (mOp | mPa | mWhc | mD)
5317683Spst#define OpBtypePaWhaD(a,b,c,d,e) \
5417683Spst	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
5517683Spst	(mOp | mBtype | mPa | mWha | mD)
5617683Spst#define OpBtypePaWhaDPr(a,b,c,d,e,f) \
5717683Spst	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
5817683Spst	(mOp | mBtype | mPa | mWha | mD | mPr)
5917683Spst#define OpX6BtypePaWhaD(a,b,c,d,e,f) \
6017683Spst	(bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f)), \
6117683Spst	(mOp | mX6 | mBtype | mPa | mWha | mD)
6217683Spst#define OpX6BtypePaWhaDPr(a,b,c,d,e,f,g) \
6317683Spst   (bOp (a) | bX6 (b) | bBtype (c) | bPa (d) | bWha (e) | bD (f) | bPr (g)), \
6417683Spst	(mOp | mX6 | mBtype | mPa | mWha | mD | mPr)
6517683Spst#define OpIhWhb(a,b,c) \
6617683Spst	(bOp (a) | bIh (b) | bWhb (c)), \
6717683Spst	(mOp | mIh | mWhb)
6817683Spst#define OpX6IhWhb(a,b,c,d) \
6917683Spst	(bOp (a) | bX6 (b) | bIh (c) | bWhb (d)), \
7017683Spst	(mOp | mX6 | mIh | mWhb)
7117683Spst
7217683Spststruct ia64_opcode ia64_opcodes_b[] =
7317683Spst  {
7417683Spst    /* B-type instruction encodings (sorted according to major opcode) */
7517683Spst
7617683Spst#define BR(a,b) \
7717683Spst      B0, OpX6BtypePaWhaDPr (0, 0x20, 0, a, 0, b, 0), {B2}, PSEUDO
7817683Spst    {"br.few",		BR (0, 0)},
7917683Spst    {"br",		BR (0, 0)},
8017683Spst    {"br.few.clr",	BR (0, 1)},
8117683Spst    {"br.clr",		BR (0, 1)},
8217683Spst    {"br.many",		BR (1, 0)},
8317683Spst    {"br.many.clr",	BR (1, 1)},
8417683Spst#undef BR
8517683Spst
8617683Spst#define BR(a,b,c,d,e)	B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}
8717683Spst    {"br.cond.sptk.few",	BR (0x20, 0, 0, 0, 0)},
8817683Spst    {"br.cond.sptk",		BR (0x20, 0, 0, 0, 0), PSEUDO},
8917683Spst    {"br.cond.sptk.few.clr",	BR (0x20, 0, 0, 0, 1)},
9017683Spst    {"br.cond.sptk.clr",	BR (0x20, 0, 0, 0, 1), PSEUDO},
9117683Spst    {"br.cond.spnt.few",	BR (0x20, 0, 0, 1, 0)},
9298530Sfenner    {"br.cond.spnt",		BR (0x20, 0, 0, 1, 0), PSEUDO},
9398530Sfenner    {"br.cond.spnt.few.clr",	BR (0x20, 0, 0, 1, 1)},
9498530Sfenner    {"br.cond.spnt.clr",	BR (0x20, 0, 0, 1, 1), PSEUDO},
9517683Spst    {"br.cond.dptk.few",	BR (0x20, 0, 0, 2, 0)},
9617683Spst    {"br.cond.dptk",		BR (0x20, 0, 0, 2, 0), PSEUDO},
9798530Sfenner    {"br.cond.dptk.few.clr",	BR (0x20, 0, 0, 2, 1)},
9817683Spst    {"br.cond.dptk.clr",	BR (0x20, 0, 0, 2, 1), PSEUDO},
9917683Spst    {"br.cond.dpnt.few",	BR (0x20, 0, 0, 3, 0)},
10017683Spst    {"br.cond.dpnt",		BR (0x20, 0, 0, 3, 0), PSEUDO},
101127664Sbms    {"br.cond.dpnt.few.clr",	BR (0x20, 0, 0, 3, 1)},
102127664Sbms    {"br.cond.dpnt.clr",	BR (0x20, 0, 0, 3, 1), PSEUDO},
103127664Sbms    {"br.cond.sptk.many",	BR (0x20, 0, 1, 0, 0)},
104127664Sbms    {"br.cond.sptk.many.clr",	BR (0x20, 0, 1, 0, 1)},
105127664Sbms    {"br.cond.spnt.many",	BR (0x20, 0, 1, 1, 0)},
106127664Sbms    {"br.cond.spnt.many.clr",	BR (0x20, 0, 1, 1, 1)},
107127664Sbms    {"br.cond.dptk.many",	BR (0x20, 0, 1, 2, 0)},
108127664Sbms    {"br.cond.dptk.many.clr",	BR (0x20, 0, 1, 2, 1)},
109127664Sbms    {"br.cond.dpnt.many",	BR (0x20, 0, 1, 3, 0)},
110127664Sbms    {"br.cond.dpnt.many.clr",	BR (0x20, 0, 1, 3, 1)},
111127664Sbms    {"br.sptk.few",		BR (0x20, 0, 0, 0, 0)},
112127664Sbms    {"br.sptk",			BR (0x20, 0, 0, 0, 0), PSEUDO},
113127664Sbms    {"br.sptk.few.clr",		BR (0x20, 0, 0, 0, 1)},
114127664Sbms    {"br.sptk.clr",		BR (0x20, 0, 0, 0, 1), PSEUDO},
115127664Sbms    {"br.spnt.few",		BR (0x20, 0, 0, 1, 0)},
116127664Sbms    {"br.spnt",			BR (0x20, 0, 0, 1, 0), PSEUDO},
117127664Sbms    {"br.spnt.few.clr",		BR (0x20, 0, 0, 1, 1)},
118127664Sbms    {"br.spnt.clr",		BR (0x20, 0, 0, 1, 1), PSEUDO},
119127664Sbms    {"br.dptk.few",		BR (0x20, 0, 0, 2, 0)},
120127664Sbms    {"br.dptk",			BR (0x20, 0, 0, 2, 0), PSEUDO},
121127664Sbms    {"br.dptk.few.clr",		BR (0x20, 0, 0, 2, 1)},
122127664Sbms    {"br.dptk.clr",		BR (0x20, 0, 0, 2, 1), PSEUDO},
123127664Sbms    {"br.dpnt.few",		BR (0x20, 0, 0, 3, 0)},
124127664Sbms    {"br.dpnt",			BR (0x20, 0, 0, 3, 0), PSEUDO},
125127664Sbms    {"br.dpnt.few.clr",		BR (0x20, 0, 0, 3, 1)},
126127664Sbms    {"br.dpnt.clr",		BR (0x20, 0, 0, 3, 1), PSEUDO},
127127664Sbms    {"br.sptk.many",		BR (0x20, 0, 1, 0, 0)},
12817683Spst    {"br.sptk.many.clr",	BR (0x20, 0, 1, 0, 1)},
12998530Sfenner    {"br.spnt.many",		BR (0x20, 0, 1, 1, 0)},
13017683Spst    {"br.spnt.many.clr",	BR (0x20, 0, 1, 1, 1)},
13117683Spst    {"br.dptk.many",		BR (0x20, 0, 1, 2, 0)},
13217683Spst    {"br.dptk.many.clr",	BR (0x20, 0, 1, 2, 1)},
13317683Spst    {"br.dpnt.many",		BR (0x20, 0, 1, 3, 0)},
13417683Spst    {"br.dpnt.many.clr",	BR (0x20, 0, 1, 3, 1)},
13517683Spst    {"br.ia.sptk.few",		BR (0x20, 1, 0, 0, 0)},
13617683Spst    {"br.ia.sptk",		BR (0x20, 1, 0, 0, 0), PSEUDO},
13798530Sfenner    {"br.ia.sptk.few.clr",	BR (0x20, 1, 0, 0, 1)},
13898530Sfenner    {"br.ia.sptk.clr",		BR (0x20, 1, 0, 0, 1), PSEUDO},
13917683Spst    {"br.ia.spnt.few",		BR (0x20, 1, 0, 1, 0)},
14017683Spst    {"br.ia.spnt",		BR (0x20, 1, 0, 1, 0), PSEUDO},
14117683Spst    {"br.ia.spnt.few.clr",	BR (0x20, 1, 0, 1, 1)},
14217683Spst    {"br.ia.spnt.clr",		BR (0x20, 1, 0, 1, 1), PSEUDO},
14317683Spst    {"br.ia.dptk.few",		BR (0x20, 1, 0, 2, 0)},
14417683Spst    {"br.ia.dptk",		BR (0x20, 1, 0, 2, 0), PSEUDO},
14517683Spst    {"br.ia.dptk.few.clr",	BR (0x20, 1, 0, 2, 1)},
14617683Spst    {"br.ia.dptk.clr",		BR (0x20, 1, 0, 2, 1), PSEUDO},
14717683Spst    {"br.ia.dpnt.few",		BR (0x20, 1, 0, 3, 0)},
14817683Spst    {"br.ia.dpnt",		BR (0x20, 1, 0, 3, 0), PSEUDO},
14917683Spst    {"br.ia.dpnt.few.clr",	BR (0x20, 1, 0, 3, 1)},
15017683Spst    {"br.ia.dpnt.clr",		BR (0x20, 1, 0, 3, 1), PSEUDO},
15117683Spst    {"br.ia.sptk.many",		BR (0x20, 1, 1, 0, 0)},
15217683Spst    {"br.ia.sptk.many.clr",	BR (0x20, 1, 1, 0, 1)},
15317683Spst    {"br.ia.spnt.many",		BR (0x20, 1, 1, 1, 0)},
154127664Sbms    {"br.ia.spnt.many.clr",	BR (0x20, 1, 1, 1, 1)},
155127664Sbms    {"br.ia.dptk.many",		BR (0x20, 1, 1, 2, 0)},
15617683Spst    {"br.ia.dptk.many.clr",	BR (0x20, 1, 1, 2, 1)},
15717683Spst    {"br.ia.dpnt.many",		BR (0x20, 1, 1, 3, 0)},
15898530Sfenner    {"br.ia.dpnt.many.clr",	BR (0x20, 1, 1, 3, 1)},
15998530Sfenner    {"br.ret.sptk.few",		BR (0x21, 4, 0, 0, 0), MOD_RRBS},
16098530Sfenner    {"br.ret.sptk",		BR (0x21, 4, 0, 0, 0), PSEUDO | MOD_RRBS},
16198530Sfenner    {"br.ret.sptk.few.clr",	BR (0x21, 4, 0, 0, 1), MOD_RRBS},
16298530Sfenner    {"br.ret.sptk.clr",		BR (0x21, 4, 0, 0, 1), PSEUDO | MOD_RRBS},
16398530Sfenner    {"br.ret.spnt.few",		BR (0x21, 4, 0, 1, 0), MOD_RRBS},
16498530Sfenner    {"br.ret.spnt",		BR (0x21, 4, 0, 1, 0), PSEUDO | MOD_RRBS},
16598530Sfenner    {"br.ret.spnt.few.clr",	BR (0x21, 4, 0, 1, 1), MOD_RRBS},
16698530Sfenner    {"br.ret.spnt.clr",		BR (0x21, 4, 0, 1, 1), PSEUDO | MOD_RRBS},
16798530Sfenner    {"br.ret.dptk.few",		BR (0x21, 4, 0, 2, 0), MOD_RRBS},
16898530Sfenner    {"br.ret.dptk",		BR (0x21, 4, 0, 2, 0), PSEUDO | MOD_RRBS},
16998530Sfenner    {"br.ret.dptk.few.clr",	BR (0x21, 4, 0, 2, 1), MOD_RRBS},
17098530Sfenner    {"br.ret.dptk.clr",		BR (0x21, 4, 0, 2, 1), PSEUDO | MOD_RRBS},
17198530Sfenner    {"br.ret.dpnt.few",		BR (0x21, 4, 0, 3, 0), MOD_RRBS},
17298530Sfenner    {"br.ret.dpnt",		BR (0x21, 4, 0, 3, 0), PSEUDO | MOD_RRBS},
17398530Sfenner    {"br.ret.dpnt.few.clr",	BR (0x21, 4, 0, 3, 1), MOD_RRBS},
17498530Sfenner    {"br.ret.dpnt.clr",		BR (0x21, 4, 0, 3, 1), PSEUDO | MOD_RRBS},
17517683Spst    {"br.ret.sptk.many",	BR (0x21, 4, 1, 0, 0), MOD_RRBS},
17617683Spst    {"br.ret.sptk.many.clr",	BR (0x21, 4, 1, 0, 1), MOD_RRBS},
17717683Spst    {"br.ret.spnt.many",	BR (0x21, 4, 1, 1, 0), MOD_RRBS},
17817683Spst    {"br.ret.spnt.many.clr",	BR (0x21, 4, 1, 1, 1), MOD_RRBS},
17917683Spst    {"br.ret.dptk.many",	BR (0x21, 4, 1, 2, 0), MOD_RRBS},
18017683Spst    {"br.ret.dptk.many.clr",	BR (0x21, 4, 1, 2, 1), MOD_RRBS},
18117683Spst    {"br.ret.dpnt.many",	BR (0x21, 4, 1, 3, 0), MOD_RRBS},
18217683Spst    {"br.ret.dpnt.many.clr",	BR (0x21, 4, 1, 3, 1), MOD_RRBS},
18317683Spst#undef BR
18417683Spst
18517683Spst    {"cover",		B0, OpX6 (0, 0x02), {0, }, NO_PRED | LAST | MOD_RRBS},
18617683Spst    {"clrrrb",		B0, OpX6 (0, 0x04), {0, }, NO_PRED | LAST | MOD_RRBS},
187127664Sbms    {"clrrrb.pr",	B0, OpX6 (0, 0x05), {0, }, NO_PRED | LAST | MOD_RRBS},
188127664Sbms    {"rfi",		B0, OpX6 (0, 0x08), {0, }, NO_PRED | LAST | PRIV | MOD_RRBS},
18917683Spst    {"bsw.0",		B0, OpX6 (0, 0x0c), {0, }, NO_PRED | LAST | PRIV},
19017683Spst    {"bsw.1",		B0, OpX6 (0, 0x0d), {0, }, NO_PRED | LAST | PRIV},
19117683Spst    {"epc",		B0, OpX6 (0, 0x10), {0, }, NO_PRED},
19217683Spst
19317683Spst    {"break.b",		B0, OpX6 (0, 0x00), {IMMU21}},
19417683Spst
19517683Spst    {"br.call.sptk.few",	B, OpPaWhcD (1, 0, 1, 0), {B1, B2}},
19617683Spst    {"br.call.sptk",		B, OpPaWhcD (1, 0, 1, 0), {B1, B2}, PSEUDO},
19717683Spst    {"br.call.sptk.few.clr",	B, OpPaWhcD (1, 0, 1, 1), {B1, B2}},
19817683Spst    {"br.call.sptk.clr",	B, OpPaWhcD (1, 0, 1, 1), {B1, B2}, PSEUDO},
19917683Spst    {"br.call.spnt.few",	B, OpPaWhcD (1, 0, 3, 0), {B1, B2}},
20017683Spst    {"br.call.spnt",		B, OpPaWhcD (1, 0, 3, 0), {B1, B2}, PSEUDO},
20117683Spst    {"br.call.spnt.few.clr",	B, OpPaWhcD (1, 0, 3, 1), {B1, B2}},
20217683Spst    {"br.call.spnt.clr",	B, OpPaWhcD (1, 0, 3, 1), {B1, B2}, PSEUDO},
20317683Spst    {"br.call.dptk.few",	B, OpPaWhcD (1, 0, 5, 0), {B1, B2}},
20417683Spst    {"br.call.dptk",		B, OpPaWhcD (1, 0, 5, 0), {B1, B2}, PSEUDO},
20517683Spst    {"br.call.dptk.few.clr",	B, OpPaWhcD (1, 0, 5, 1), {B1, B2}},
20617683Spst    {"br.call.dptk.clr",	B, OpPaWhcD (1, 0, 5, 1), {B1, B2}, PSEUDO},
207127664Sbms    {"br.call.dpnt.few",	B, OpPaWhcD (1, 0, 7, 0), {B1, B2}},
20817683Spst    {"br.call.dpnt",		B, OpPaWhcD (1, 0, 7, 0), {B1, B2}, PSEUDO},
20917683Spst    {"br.call.dpnt.few.clr",	B, OpPaWhcD (1, 0, 7, 1), {B1, B2}},
210127664Sbms    {"br.call.dpnt.clr",	B, OpPaWhcD (1, 0, 7, 1), {B1, B2}, PSEUDO},
211127664Sbms    {"br.call.sptk.many",	B, OpPaWhcD (1, 1, 1, 0), {B1, B2}},
212127664Sbms    {"br.call.sptk.many.clr",	B, OpPaWhcD (1, 1, 1, 1), {B1, B2}},
213127664Sbms    {"br.call.spnt.many",	B, OpPaWhcD (1, 1, 3, 0), {B1, B2}},
214127664Sbms    {"br.call.spnt.many.clr",	B, OpPaWhcD (1, 1, 3, 1), {B1, B2}},
215127664Sbms    {"br.call.dptk.many",	B, OpPaWhcD (1, 1, 5, 0), {B1, B2}},
216127664Sbms    {"br.call.dptk.many.clr",	B, OpPaWhcD (1, 1, 5, 1), {B1, B2}},
217127664Sbms    {"br.call.dpnt.many",	B, OpPaWhcD (1, 1, 7, 0), {B1, B2}},
218127664Sbms    {"br.call.dpnt.many.clr",	B, OpPaWhcD (1, 1, 7, 1), {B1, B2}},
219127664Sbms
220127664Sbms#define BRP(a,b,c) \
221127664Sbms      B0, OpX6IhWhb (2, a, b, c), {B2, TAG13}, NO_PRED
222127664Sbms    {"brp.sptk",		BRP (0x10, 0, 0)},
22317683Spst    {"brp.dptk",		BRP (0x10, 0, 2)},
22417683Spst    {"brp.sptk.imp",		BRP (0x10, 1, 0)},
22517683Spst    {"brp.dptk.imp",		BRP (0x10, 1, 2)},
22617683Spst    {"brp.ret.sptk",		BRP (0x11, 0, 0)},
22717683Spst    {"brp.ret.dptk",		BRP (0x11, 0, 2)},
22817683Spst    {"brp.ret.sptk.imp",	BRP (0x11, 1, 0)},
22975107Sfenner    {"brp.ret.dptk.imp",	BRP (0x11, 1, 2)},
23075107Sfenner#undef BRP
23117683Spst
23217683Spst    {"nop.b",		B0, OpX6 (2, 0x00), {IMMU21}},
23317683Spst
23417683Spst#define BR(a,b) \
23517683Spst      B0, OpBtypePaWhaDPr (4, 0, a, 0, b, 0), {TGT25c}, PSEUDO
23617683Spst    {"br.few",		BR (0, 0)},
23717683Spst    {"br",		BR (0, 0)},
23817683Spst    {"br.few.clr",	BR (0, 1)},
23917683Spst    {"br.clr",		BR (0, 1)},
24017683Spst    {"br.many",		BR (1, 0)},
24117683Spst    {"br.many.clr",	BR (1, 1)},
24217683Spst#undef BR
24317683Spst
24417683Spst#define BR(a,b,c) \
245127664Sbms      B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}
246127664Sbms    {"br.cond.sptk.few",	BR (0, 0, 0)},
247127664Sbms    {"br.cond.sptk",		BR (0, 0, 0), PSEUDO},
248127664Sbms    {"br.cond.sptk.few.clr",	BR (0, 0, 1)},
249127664Sbms    {"br.cond.sptk.clr",	BR (0, 0, 1), PSEUDO},
250127664Sbms    {"br.cond.spnt.few",	BR (0, 1, 0)},
251127664Sbms    {"br.cond.spnt",		BR (0, 1, 0), PSEUDO},
252127664Sbms    {"br.cond.spnt.few.clr",	BR (0, 1, 1)},
253127664Sbms    {"br.cond.spnt.clr",	BR (0, 1, 1), PSEUDO},
254127664Sbms    {"br.cond.dptk.few",	BR (0, 2, 0)},
255127664Sbms    {"br.cond.dptk",		BR (0, 2, 0), PSEUDO},
256127664Sbms    {"br.cond.dptk.few.clr",	BR (0, 2, 1)},
257127664Sbms    {"br.cond.dptk.clr",	BR (0, 2, 1), PSEUDO},
258127664Sbms    {"br.cond.dpnt.few",	BR (0, 3, 0)},
259127664Sbms    {"br.cond.dpnt",		BR (0, 3, 0), PSEUDO},
260127664Sbms    {"br.cond.dpnt.few.clr",	BR (0, 3, 1)},
261127664Sbms    {"br.cond.dpnt.clr",	BR (0, 3, 1), PSEUDO},
262127664Sbms    {"br.cond.sptk.many",	BR (1, 0, 0)},
263127664Sbms    {"br.cond.sptk.many.clr",	BR (1, 0, 1)},
26417683Spst    {"br.cond.spnt.many",	BR (1, 1, 0)},
26517683Spst    {"br.cond.spnt.many.clr",	BR (1, 1, 1)},
26617683Spst    {"br.cond.dptk.many",	BR (1, 2, 0)},
26717683Spst    {"br.cond.dptk.many.clr",	BR (1, 2, 1)},
26817683Spst    {"br.cond.dpnt.many",	BR (1, 3, 0)},
26917683Spst    {"br.cond.dpnt.many.clr",	BR (1, 3, 1)},
27017683Spst    {"br.sptk.few",		BR (0, 0, 0)},
271127664Sbms    {"br.sptk",			BR (0, 0, 0), PSEUDO},
27217683Spst    {"br.sptk.few.clr",		BR (0, 0, 1)},
27317683Spst    {"br.sptk.clr",		BR (0, 0, 1), PSEUDO},
27417683Spst    {"br.spnt.few",		BR (0, 1, 0)},
27517683Spst    {"br.spnt",			BR (0, 1, 0), PSEUDO},
27617683Spst    {"br.spnt.few.clr",		BR (0, 1, 1)},
27717683Spst    {"br.spnt.clr",		BR (0, 1, 1), PSEUDO},
27817683Spst    {"br.dptk.few",		BR (0, 2, 0)},
27917683Spst    {"br.dptk",			BR (0, 2, 0), PSEUDO},
28017683Spst    {"br.dptk.few.clr",		BR (0, 2, 1)},
28117683Spst    {"br.dptk.clr",		BR (0, 2, 1), PSEUDO},
28217683Spst    {"br.dpnt.few",		BR (0, 3, 0)},
28317683Spst    {"br.dpnt",			BR (0, 3, 0), PSEUDO},
28417683Spst    {"br.dpnt.few.clr",		BR (0, 3, 1)},
285127664Sbms    {"br.dpnt.clr",		BR (0, 3, 1), PSEUDO},
286127664Sbms    {"br.sptk.many",		BR (1, 0, 0)},
28717683Spst    {"br.sptk.many.clr",	BR (1, 0, 1)},
28817683Spst    {"br.spnt.many",		BR (1, 1, 0)},
28917683Spst    {"br.spnt.many.clr",	BR (1, 1, 1)},
29017683Spst    {"br.dptk.many",		BR (1, 2, 0)},
29117683Spst    {"br.dptk.many.clr",	BR (1, 2, 1)},
29217683Spst    {"br.dpnt.many",		BR (1, 3, 0)},
29317683Spst    {"br.dpnt.many.clr",	BR (1, 3, 1)},
29417683Spst#undef BR
29517683Spst
29617683Spst#define BR(a,b,c,d) \
29717683Spst	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2
29817683Spst    {"br.wexit.sptk.few",	BR (2, 0, 0, 0) | MOD_RRBS},
29917683Spst    {"br.wexit.sptk",		BR (2, 0, 0, 0) | PSEUDO | MOD_RRBS},
30017683Spst    {"br.wexit.sptk.few.clr",	BR (2, 0, 0, 1) | MOD_RRBS},
30117683Spst    {"br.wexit.sptk.clr",	BR (2, 0, 0, 1) | PSEUDO | MOD_RRBS},
30217683Spst    {"br.wexit.spnt.few",	BR (2, 0, 1, 0) | MOD_RRBS},
30317683Spst    {"br.wexit.spnt",		BR (2, 0, 1, 0) | PSEUDO | MOD_RRBS},
30417683Spst    {"br.wexit.spnt.few.clr",	BR (2, 0, 1, 1) | MOD_RRBS},
30517683Spst    {"br.wexit.spnt.clr",	BR (2, 0, 1, 1) | PSEUDO | MOD_RRBS},
30617683Spst    {"br.wexit.dptk.few",	BR (2, 0, 2, 0) | MOD_RRBS},
30717683Spst    {"br.wexit.dptk",		BR (2, 0, 2, 0) | PSEUDO | MOD_RRBS},
30817683Spst    {"br.wexit.dptk.few.clr",	BR (2, 0, 2, 1) | MOD_RRBS},
309127664Sbms    {"br.wexit.dptk.clr",	BR (2, 0, 2, 1) | PSEUDO | MOD_RRBS},
310127664Sbms    {"br.wexit.dpnt.few",	BR (2, 0, 3, 0) | MOD_RRBS},
311127664Sbms    {"br.wexit.dpnt",		BR (2, 0, 3, 0) | PSEUDO | MOD_RRBS},
312127664Sbms    {"br.wexit.dpnt.few.clr",	BR (2, 0, 3, 1) | MOD_RRBS},
313127664Sbms    {"br.wexit.dpnt.clr",	BR (2, 0, 3, 1) | PSEUDO | MOD_RRBS},
314127664Sbms    {"br.wexit.sptk.many",	BR (2, 1, 0, 0) | MOD_RRBS},
315127664Sbms    {"br.wexit.sptk.many.clr",	BR (2, 1, 0, 1) | MOD_RRBS},
316127664Sbms    {"br.wexit.spnt.many",	BR (2, 1, 1, 0) | MOD_RRBS},
317127664Sbms    {"br.wexit.spnt.many.clr",	BR (2, 1, 1, 1) | MOD_RRBS},
318127664Sbms    {"br.wexit.dptk.many",	BR (2, 1, 2, 0) | MOD_RRBS},
319127664Sbms    {"br.wexit.dptk.many.clr",	BR (2, 1, 2, 1) | MOD_RRBS},
320127664Sbms    {"br.wexit.dpnt.many",	BR (2, 1, 3, 0) | MOD_RRBS},
321127664Sbms    {"br.wexit.dpnt.many.clr",	BR (2, 1, 3, 1) | MOD_RRBS},
322127664Sbms    {"br.wtop.sptk.few",	BR (3, 0, 0, 0) | MOD_RRBS},
323127664Sbms    {"br.wtop.sptk",		BR (3, 0, 0, 0) | PSEUDO | MOD_RRBS},
324127664Sbms    {"br.wtop.sptk.few.clr",	BR (3, 0, 0, 1) | MOD_RRBS},
325127664Sbms    {"br.wtop.sptk.clr",	BR (3, 0, 0, 1) | PSEUDO | MOD_RRBS},
326127664Sbms    {"br.wtop.spnt.few",	BR (3, 0, 1, 0) | MOD_RRBS},
327127664Sbms    {"br.wtop.spnt",		BR (3, 0, 1, 0) | PSEUDO | MOD_RRBS},
328127664Sbms    {"br.wtop.spnt.few.clr",	BR (3, 0, 1, 1) | MOD_RRBS},
329127664Sbms    {"br.wtop.spnt.clr",	BR (3, 0, 1, 1) | PSEUDO | MOD_RRBS},
330127664Sbms    {"br.wtop.dptk.few",	BR (3, 0, 2, 0) | MOD_RRBS},
331127664Sbms    {"br.wtop.dptk",		BR (3, 0, 2, 0) | PSEUDO | MOD_RRBS},
332127664Sbms    {"br.wtop.dptk.few.clr",	BR (3, 0, 2, 1) | MOD_RRBS},
333127664Sbms    {"br.wtop.dptk.clr",	BR (3, 0, 2, 1) | PSEUDO | MOD_RRBS},
33417683Spst    {"br.wtop.dpnt.few",	BR (3, 0, 3, 0) | MOD_RRBS},
335127664Sbms    {"br.wtop.dpnt",		BR (3, 0, 3, 0) | PSEUDO | MOD_RRBS},
336127664Sbms    {"br.wtop.dpnt.few.clr",	BR (3, 0, 3, 1) | MOD_RRBS},
33717683Spst    {"br.wtop.dpnt.clr",	BR (3, 0, 3, 1) | PSEUDO | MOD_RRBS},
33817683Spst    {"br.wtop.sptk.many",	BR (3, 1, 0, 0) | MOD_RRBS},
33917683Spst    {"br.wtop.sptk.many.clr",	BR (3, 1, 0, 1) | MOD_RRBS},
34098530Sfenner    {"br.wtop.spnt.many",	BR (3, 1, 1, 0) | MOD_RRBS},
341127664Sbms    {"br.wtop.spnt.many.clr",	BR (3, 1, 1, 1) | MOD_RRBS},
342127664Sbms    {"br.wtop.dptk.many",	BR (3, 1, 2, 0) | MOD_RRBS},
343127664Sbms    {"br.wtop.dptk.many.clr",	BR (3, 1, 2, 1) | MOD_RRBS},
34417683Spst    {"br.wtop.dpnt.many",	BR (3, 1, 3, 0) | MOD_RRBS},
34517683Spst    {"br.wtop.dpnt.many.clr",	BR (3, 1, 3, 1) | MOD_RRBS},
346127664Sbms
34717683Spst#undef BR
34817683Spst#define BR(a,b,c,d) \
34917683Spst	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2 | NO_PRED
35017683Spst    {"br.cloop.sptk.few",	BR (5, 0, 0, 0)},
35117683Spst    {"br.cloop.sptk",		BR (5, 0, 0, 0) | PSEUDO},
35217683Spst    {"br.cloop.sptk.few.clr",	BR (5, 0, 0, 1)},
35317683Spst    {"br.cloop.sptk.clr",	BR (5, 0, 0, 1) | PSEUDO},
35417683Spst    {"br.cloop.spnt.few",	BR (5, 0, 1, 0)},
35517683Spst    {"br.cloop.spnt",		BR (5, 0, 1, 0) | PSEUDO},
35617683Spst    {"br.cloop.spnt.few.clr",	BR (5, 0, 1, 1)},
35717683Spst    {"br.cloop.spnt.clr",	BR (5, 0, 1, 1) | PSEUDO},
35817683Spst    {"br.cloop.dptk.few",	BR (5, 0, 2, 0)},
35917683Spst    {"br.cloop.dptk",		BR (5, 0, 2, 0) | PSEUDO},
36075107Sfenner    {"br.cloop.dptk.few.clr",	BR (5, 0, 2, 1)},
36117683Spst    {"br.cloop.dptk.clr",	BR (5, 0, 2, 1) | PSEUDO},
36217683Spst    {"br.cloop.dpnt.few",	BR (5, 0, 3, 0)},
36317683Spst    {"br.cloop.dpnt",		BR (5, 0, 3, 0) | PSEUDO},
36498530Sfenner    {"br.cloop.dpnt.few.clr",	BR (5, 0, 3, 1)},
36517683Spst    {"br.cloop.dpnt.clr",	BR (5, 0, 3, 1) | PSEUDO},
36675107Sfenner    {"br.cloop.sptk.many",	BR (5, 1, 0, 0)},
36717683Spst    {"br.cloop.sptk.many.clr",	BR (5, 1, 0, 1)},
36875107Sfenner    {"br.cloop.spnt.many",	BR (5, 1, 1, 0)},
36917683Spst    {"br.cloop.spnt.many.clr",	BR (5, 1, 1, 1)},
37075107Sfenner    {"br.cloop.dptk.many",	BR (5, 1, 2, 0)},
37175107Sfenner    {"br.cloop.dptk.many.clr",	BR (5, 1, 2, 1)},
372127664Sbms    {"br.cloop.dpnt.many",	BR (5, 1, 3, 0)},
37375107Sfenner    {"br.cloop.dpnt.many.clr",	BR (5, 1, 3, 1)},
374127664Sbms    {"br.cexit.sptk.few",	BR (6, 0, 0, 0) | MOD_RRBS},
37575107Sfenner    {"br.cexit.sptk",		BR (6, 0, 0, 0) | PSEUDO | MOD_RRBS},
37675107Sfenner    {"br.cexit.sptk.few.clr",	BR (6, 0, 0, 1) | MOD_RRBS},
37798530Sfenner    {"br.cexit.sptk.clr",	BR (6, 0, 0, 1) | PSEUDO | MOD_RRBS},
37898530Sfenner    {"br.cexit.spnt.few",	BR (6, 0, 1, 0) | MOD_RRBS},
37975107Sfenner    {"br.cexit.spnt",		BR (6, 0, 1, 0) | PSEUDO | MOD_RRBS},
38098530Sfenner    {"br.cexit.spnt.few.clr",	BR (6, 0, 1, 1) | MOD_RRBS},
38198530Sfenner    {"br.cexit.spnt.clr",	BR (6, 0, 1, 1) | PSEUDO | MOD_RRBS},
38217683Spst    {"br.cexit.dptk.few",	BR (6, 0, 2, 0) | MOD_RRBS},
38375107Sfenner    {"br.cexit.dptk",		BR (6, 0, 2, 0) | PSEUDO | MOD_RRBS},
38417683Spst    {"br.cexit.dptk.few.clr",	BR (6, 0, 2, 1) | MOD_RRBS},
38575107Sfenner    {"br.cexit.dptk.clr",	BR (6, 0, 2, 1) | PSEUDO | MOD_RRBS},
38675107Sfenner    {"br.cexit.dpnt.few",	BR (6, 0, 3, 0) | MOD_RRBS},
38775107Sfenner    {"br.cexit.dpnt",		BR (6, 0, 3, 0) | PSEUDO | MOD_RRBS},
38875107Sfenner    {"br.cexit.dpnt.few.clr",	BR (6, 0, 3, 1) | MOD_RRBS},
38975107Sfenner    {"br.cexit.dpnt.clr",	BR (6, 0, 3, 1) | PSEUDO | MOD_RRBS},
39075107Sfenner    {"br.cexit.sptk.many",	BR (6, 1, 0, 0) | MOD_RRBS},
39175107Sfenner    {"br.cexit.sptk.many.clr",	BR (6, 1, 0, 1) | MOD_RRBS},
39275107Sfenner    {"br.cexit.spnt.many",	BR (6, 1, 1, 0) | MOD_RRBS},
39375107Sfenner    {"br.cexit.spnt.many.clr",	BR (6, 1, 1, 1) | MOD_RRBS},
39475107Sfenner    {"br.cexit.dptk.many",	BR (6, 1, 2, 0) | MOD_RRBS},
39575107Sfenner    {"br.cexit.dptk.many.clr",	BR (6, 1, 2, 1) | MOD_RRBS},
39617683Spst    {"br.cexit.dpnt.many",	BR (6, 1, 3, 0) | MOD_RRBS},
39717683Spst    {"br.cexit.dpnt.many.clr",	BR (6, 1, 3, 1) | MOD_RRBS},
39875107Sfenner    {"br.ctop.sptk.few",	BR (7, 0, 0, 0) | MOD_RRBS},
39975107Sfenner    {"br.ctop.sptk",		BR (7, 0, 0, 0) | PSEUDO | MOD_RRBS},
40017683Spst    {"br.ctop.sptk.few.clr",	BR (7, 0, 0, 1) | MOD_RRBS},
40117683Spst    {"br.ctop.sptk.clr",	BR (7, 0, 0, 1) | PSEUDO | MOD_RRBS},
40275107Sfenner    {"br.ctop.spnt.few",	BR (7, 0, 1, 0) | MOD_RRBS},
40375107Sfenner    {"br.ctop.spnt",		BR (7, 0, 1, 0) | PSEUDO | MOD_RRBS},
40475107Sfenner    {"br.ctop.spnt.few.clr",	BR (7, 0, 1, 1) | MOD_RRBS},
40575107Sfenner    {"br.ctop.spnt.clr",	BR (7, 0, 1, 1) | PSEUDO | MOD_RRBS},
40675107Sfenner    {"br.ctop.dptk.few",	BR (7, 0, 2, 0) | MOD_RRBS},
40717683Spst    {"br.ctop.dptk",		BR (7, 0, 2, 0) | PSEUDO | MOD_RRBS},
40817683Spst    {"br.ctop.dptk.few.clr",	BR (7, 0, 2, 1) | MOD_RRBS},
40917683Spst    {"br.ctop.dptk.clr",	BR (7, 0, 2, 1) | PSEUDO | MOD_RRBS},
41017683Spst    {"br.ctop.dpnt.few",	BR (7, 0, 3, 0) | MOD_RRBS},
41175107Sfenner    {"br.ctop.dpnt",		BR (7, 0, 3, 0) | PSEUDO | MOD_RRBS},
41298530Sfenner    {"br.ctop.dpnt.few.clr",	BR (7, 0, 3, 1) | MOD_RRBS},
41398530Sfenner    {"br.ctop.dpnt.clr",	BR (7, 0, 3, 1) | PSEUDO | MOD_RRBS},
41498530Sfenner    {"br.ctop.sptk.many",	BR (7, 1, 0, 0) | MOD_RRBS},
41598530Sfenner    {"br.ctop.sptk.many.clr",	BR (7, 1, 0, 1) | MOD_RRBS},
41698530Sfenner    {"br.ctop.spnt.many",	BR (7, 1, 1, 0) | MOD_RRBS},
41775107Sfenner    {"br.ctop.spnt.many.clr",	BR (7, 1, 1, 1) | MOD_RRBS},
41875107Sfenner    {"br.ctop.dptk.many",	BR (7, 1, 2, 0) | MOD_RRBS},
41975107Sfenner    {"br.ctop.dptk.many.clr",	BR (7, 1, 2, 1) | MOD_RRBS},
42075107Sfenner    {"br.ctop.dpnt.many",	BR (7, 1, 3, 0) | MOD_RRBS},
42175107Sfenner    {"br.ctop.dpnt.many.clr",	BR (7, 1, 3, 1) | MOD_RRBS},
42275107Sfenner
42398530Sfenner#undef BR
424127664Sbms#define BR(a,b,c,d) \
425127664Sbms	B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2
426127664Sbms    {"br.call.sptk.few",	B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}},
427127664Sbms    {"br.call.sptk",		B, OpPaWhaD (5, 0, 0, 0), {B1, TGT25c}, PSEUDO},
428127664Sbms    {"br.call.sptk.few.clr",	B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}},
429127664Sbms    {"br.call.sptk.clr",	B, OpPaWhaD (5, 0, 0, 1), {B1, TGT25c}, PSEUDO},
430127664Sbms    {"br.call.spnt.few",	B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}},
431127664Sbms    {"br.call.spnt",		B, OpPaWhaD (5, 0, 1, 0), {B1, TGT25c}, PSEUDO},
43298530Sfenner    {"br.call.spnt.few.clr",	B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}},
43398530Sfenner    {"br.call.spnt.clr",	B, OpPaWhaD (5, 0, 1, 1), {B1, TGT25c}, PSEUDO},
43498530Sfenner    {"br.call.dptk.few",	B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}},
43598530Sfenner    {"br.call.dptk",		B, OpPaWhaD (5, 0, 2, 0), {B1, TGT25c}, PSEUDO},
436127664Sbms    {"br.call.dptk.few.clr",	B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}},
43798530Sfenner    {"br.call.dptk.clr",	B, OpPaWhaD (5, 0, 2, 1), {B1, TGT25c}, PSEUDO},
43817683Spst    {"br.call.dpnt.few",	B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}},
43917683Spst    {"br.call.dpnt",		B, OpPaWhaD (5, 0, 3, 0), {B1, TGT25c}, PSEUDO},
44017683Spst    {"br.call.dpnt.few.clr",	B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}},
44175107Sfenner    {"br.call.dpnt.clr",	B, OpPaWhaD (5, 0, 3, 1), {B1, TGT25c}, PSEUDO},
44275107Sfenner    {"br.call.sptk.many",	B, OpPaWhaD (5, 1, 0, 0), {B1, TGT25c}},
44317683Spst    {"br.call.sptk.many.clr",	B, OpPaWhaD (5, 1, 0, 1), {B1, TGT25c}},
44417683Spst    {"br.call.spnt.many",	B, OpPaWhaD (5, 1, 1, 0), {B1, TGT25c}},
44517683Spst    {"br.call.spnt.many.clr",	B, OpPaWhaD (5, 1, 1, 1), {B1, TGT25c}},
44617683Spst    {"br.call.dptk.many",	B, OpPaWhaD (5, 1, 2, 0), {B1, TGT25c}},
44717683Spst    {"br.call.dptk.many.clr",	B, OpPaWhaD (5, 1, 2, 1), {B1, TGT25c}},
44875107Sfenner    {"br.call.dpnt.many",	B, OpPaWhaD (5, 1, 3, 0), {B1, TGT25c}},
44975107Sfenner    {"br.call.dpnt.many.clr",	B, OpPaWhaD (5, 1, 3, 1), {B1, TGT25c}},
45017683Spst#undef BR
45117683Spst
45217683Spst    /* branch predict */
45317683Spst#define BRP(a,b) \
45417683Spst      B0, OpIhWhb (7, a, b), {TGT25c, TAG13}, NO_PRED
45517683Spst    {"brp.sptk",		BRP (0, 0)},
45617683Spst    {"brp.loop",		BRP (0, 1)},
45717683Spst    {"brp.dptk",		BRP (0, 2)},
45817683Spst    {"brp.exit",		BRP (0, 3)},
45917683Spst    {"brp.sptk.imp",		BRP (1, 0)},
46017683Spst    {"brp.loop.imp",		BRP (1, 1)},
46117683Spst    {"brp.dptk.imp",		BRP (1, 2)},
46217683Spst    {"brp.exit.imp",		BRP (1, 3)},
46317683Spst#undef BRP
46417683Spst
46517683Spst    {0}
466127664Sbms  };
467127664Sbms
468127664Sbms#undef B0
469127664Sbms#undef B
47017683Spst#undef bBtype
47117683Spst#undef bD
47217683Spst#undef bIh
47317683Spst#undef bPa
47417683Spst#undef bPr
47539291Sfenner#undef bWha
47639291Sfenner#undef bWhb
47717683Spst#undef bWhc
47839291Sfenner#undef bX6
47975107Sfenner#undef mBtype
48098530Sfenner#undef mD
48198530Sfenner#undef mIh
48298530Sfenner#undef mPa
48398530Sfenner#undef mPr
48498530Sfenner#undef mWha
48598530Sfenner#undef mWhb
48698530Sfenner#undef mWhc
48798530Sfenner#undef mX6
48898530Sfenner#undef OpX6
48998530Sfenner#undef OpPaWhaD
49098530Sfenner#undef OpPaWhcD
49198530Sfenner#undef OpBtypePaWhaD
49298530Sfenner#undef OpBtypePaWhaDPr
49398530Sfenner#undef OpX6BtypePaWhaD
49498530Sfenner#undef OpX6BtypePaWhaDPr
49598530Sfenner#undef OpIhWhb
49698530Sfenner#undef OpX6IhWhb
49798530Sfenner