184865Sobrien/* ia64-opc-x.c -- IA-64 `X' opcode table.
2130561Sobrien   Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
384865Sobrien   Contributed by Timothy Wall <twall@cygnus.com>
484865Sobrien
584865Sobrien   This file is part of GDB, GAS, and the GNU binutils.
684865Sobrien
784865Sobrien   GDB, GAS, and the GNU binutils are free software; you can redistribute
884865Sobrien   them and/or modify them under the terms of the GNU General Public
984865Sobrien   License as published by the Free Software Foundation; either version
1084865Sobrien   2, or (at your option) any later version.
1184865Sobrien
1284865Sobrien   GDB, GAS, and the GNU binutils are distributed in the hope that they
1384865Sobrien   will be useful, but WITHOUT ANY WARRANTY; without even the implied
1484865Sobrien   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1584865Sobrien   the GNU General Public License for more details.
1684865Sobrien
1784865Sobrien   You should have received a copy of the GNU General Public License
1884865Sobrien   along with this file; see the file COPYING.  If not, write to the
19218822Sdim   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20218822Sdim   02110-1301, USA.  */
2184865Sobrien
2284865Sobrien#include "ia64-opc.h"
2384865Sobrien
24130561Sobrien/* Identify the specific X-unit type.  */
2584865Sobrien#define X0      IA64_TYPE_X, 0
2684865Sobrien#define X	IA64_TYPE_X, 1
2784865Sobrien
28130561Sobrien/* Instruction bit fields:  */
2984865Sobrien#define bBtype(x)	(((ia64_insn) ((x) & 0x7)) << 6)
3084865Sobrien#define bD(x)		(((ia64_insn) ((x) & 0x1)) << 35)
3184865Sobrien#define bPa(x)		(((ia64_insn) ((x) & 0x1)) << 12)
3284865Sobrien#define bPr(x)		(((ia64_insn) ((x) & 0x3f)) << 0)
3384865Sobrien#define bVc(x)		(((ia64_insn) ((x) & 0x1)) << 20)
3484865Sobrien#define bWha(x)		(((ia64_insn) ((x) & 0x3)) << 33)
3584865Sobrien#define bX3(x)		(((ia64_insn) ((x) & 0x7)) << 33)
3684865Sobrien#define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
37130561Sobrien#define bY(x)		(((ia64_insn) ((x) & 0x1)) << 26)
3884865Sobrien
3984865Sobrien#define mBtype		bBtype (-1)
4084865Sobrien#define mD		bD (-1)
4184865Sobrien#define mPa		bPa (-1)
4284865Sobrien#define mPr		bPr (-1)
4384865Sobrien#define mVc             bVc (-1)
4484865Sobrien#define mWha		bWha (-1)
4584865Sobrien#define mX3             bX3 (-1)
4684865Sobrien#define mX6		bX6 (-1)
47130561Sobrien#define mY		bY (-1)
4884865Sobrien
4984865Sobrien#define OpX3X6(a,b,c)		(bOp (a) | bX3 (b) | bX6(c)), \
5084865Sobrien				(mOp | mX3 | mX6)
51130561Sobrien#define OpX3X6Y(a,b,c,d)	(bOp (a) | bX3 (b) | bX6(c) | bY(d)), \
52130561Sobrien				(mOp | mX3 | mX6 | mY)
5384865Sobrien#define OpVc(a,b)		(bOp (a) | bVc (b)), (mOp | mVc)
5484865Sobrien#define OpPaWhaD(a,b,c,d) \
5584865Sobrien	(bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
5684865Sobrien#define OpBtypePaWhaD(a,b,c,d,e) \
5784865Sobrien	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
5884865Sobrien	(mOp | mBtype | mPa | mWha | mD)
5984865Sobrien#define OpBtypePaWhaDPr(a,b,c,d,e,f) \
6084865Sobrien	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
6184865Sobrien	(mOp | mBtype | mPa | mWha | mD | mPr)
6284865Sobrien
6384865Sobrienstruct ia64_opcode ia64_opcodes_x[] =
6484865Sobrien  {
65130561Sobrien    {"break.x",	X0, OpX3X6 (0, 0, 0x00), {IMMU62}, 0, 0, NULL},
66130561Sobrien    {"nop.x",	X0, OpX3X6Y (0, 0, 0x01, 0), {IMMU62}, 0, 0, NULL},
67130561Sobrien    {"hint.x",	X0, OpX3X6Y (0, 0, 0x01, 1), {IMMU62}, 0, 0, NULL},
68130561Sobrien    {"movl",	X,  OpVc (6, 0), {R1, IMMU64}, 0, 0, NULL},
6984865Sobrien#define BRL(a,b) \
70130561Sobrien      X0, OpBtypePaWhaDPr (0xC, 0, a, 0, b, 0), {TGT64}, PSEUDO, 0, NULL
71130561Sobrien    {"brl.few",         BRL (0, 0)},
72130561Sobrien    {"brl",             BRL (0, 0)},
73130561Sobrien    {"brl.few.clr",	BRL (0, 1)},
74130561Sobrien    {"brl.clr",		BRL (0, 1)},
75130561Sobrien    {"brl.many",	BRL (1, 0)},
76130561Sobrien    {"brl.many.clr",	BRL (1, 1)},
7784865Sobrien#undef BRL
7884865Sobrien#define BRL(a,b,c) \
79130561Sobrien      X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, 0, 0, NULL
80130561Sobrien#define BRLP(a,b,c) \
81130561Sobrien      X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, PSEUDO, 0, NULL
8284865Sobrien    {"brl.cond.sptk.few",	BRL (0, 0, 0)},
83130561Sobrien    {"brl.cond.sptk",		BRLP (0, 0, 0)},
8484865Sobrien    {"brl.cond.sptk.few.clr",	BRL (0, 0, 1)},
85130561Sobrien    {"brl.cond.sptk.clr",	BRLP (0, 0, 1)},
8684865Sobrien    {"brl.cond.spnt.few",	BRL (0, 1, 0)},
87130561Sobrien    {"brl.cond.spnt",		BRLP (0, 1, 0)},
8884865Sobrien    {"brl.cond.spnt.few.clr",	BRL (0, 1, 1)},
89130561Sobrien    {"brl.cond.spnt.clr",	BRLP (0, 1, 1)},
9084865Sobrien    {"brl.cond.dptk.few",	BRL (0, 2, 0)},
91130561Sobrien    {"brl.cond.dptk",		BRLP (0, 2, 0)},
9284865Sobrien    {"brl.cond.dptk.few.clr",	BRL (0, 2, 1)},
93130561Sobrien    {"brl.cond.dptk.clr",	BRLP (0, 2, 1)},
9484865Sobrien    {"brl.cond.dpnt.few",	BRL (0, 3, 0)},
95130561Sobrien    {"brl.cond.dpnt",		BRLP (0, 3, 0)},
9684865Sobrien    {"brl.cond.dpnt.few.clr",	BRL (0, 3, 1)},
97130561Sobrien    {"brl.cond.dpnt.clr",	BRLP (0, 3, 1)},
9884865Sobrien    {"brl.cond.sptk.many",	BRL (1, 0, 0)},
9984865Sobrien    {"brl.cond.sptk.many.clr",	BRL (1, 0, 1)},
10084865Sobrien    {"brl.cond.spnt.many",	BRL (1, 1, 0)},
10184865Sobrien    {"brl.cond.spnt.many.clr",	BRL (1, 1, 1)},
10284865Sobrien    {"brl.cond.dptk.many",	BRL (1, 2, 0)},
10384865Sobrien    {"brl.cond.dptk.many.clr",	BRL (1, 2, 1)},
10484865Sobrien    {"brl.cond.dpnt.many",	BRL (1, 3, 0)},
10584865Sobrien    {"brl.cond.dpnt.many.clr",	BRL (1, 3, 1)},
10684865Sobrien    {"brl.sptk.few",		BRL (0, 0, 0)},
107130561Sobrien    {"brl.sptk",		BRLP (0, 0, 0)},
10884865Sobrien    {"brl.sptk.few.clr",	BRL (0, 0, 1)},
109130561Sobrien    {"brl.sptk.clr",		BRLP (0, 0, 1)},
11084865Sobrien    {"brl.spnt.few",		BRL (0, 1, 0)},
111130561Sobrien    {"brl.spnt",		BRLP (0, 1, 0)},
11284865Sobrien    {"brl.spnt.few.clr",	BRL (0, 1, 1)},
113130561Sobrien    {"brl.spnt.clr",		BRLP (0, 1, 1)},
11484865Sobrien    {"brl.dptk.few",		BRL (0, 2, 0)},
115130561Sobrien    {"brl.dptk",		BRLP (0, 2, 0)},
11684865Sobrien    {"brl.dptk.few.clr",	BRL (0, 2, 1)},
117130561Sobrien    {"brl.dptk.clr",		BRLP (0, 2, 1)},
11884865Sobrien    {"brl.dpnt.few",		BRL (0, 3, 0)},
119130561Sobrien    {"brl.dpnt",		BRLP (0, 3, 0)},
12084865Sobrien    {"brl.dpnt.few.clr",	BRL (0, 3, 1)},
121130561Sobrien    {"brl.dpnt.clr",		BRLP (0, 3, 1)},
12284865Sobrien    {"brl.sptk.many",		BRL (1, 0, 0)},
12384865Sobrien    {"brl.sptk.many.clr",	BRL (1, 0, 1)},
12484865Sobrien    {"brl.spnt.many",		BRL (1, 1, 0)},
12584865Sobrien    {"brl.spnt.many.clr",	BRL (1, 1, 1)},
12684865Sobrien    {"brl.dptk.many",		BRL (1, 2, 0)},
12784865Sobrien    {"brl.dptk.many.clr",	BRL (1, 2, 1)},
12884865Sobrien    {"brl.dpnt.many",		BRL (1, 3, 0)},
12984865Sobrien    {"brl.dpnt.many.clr",	BRL (1, 3, 1)},
13084865Sobrien#undef BRL
131130561Sobrien#undef BRLP
132130561Sobrien#define BRL(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, 0, 0, NULL
133130561Sobrien#define BRLP(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, PSEUDO, 0, NULL
13484865Sobrien    {"brl.call.sptk.few",	BRL (0, 0, 0)},
135130561Sobrien    {"brl.call.sptk",		BRLP (0, 0, 0)},
13684865Sobrien    {"brl.call.sptk.few.clr",	BRL (0, 0, 1)},
137130561Sobrien    {"brl.call.sptk.clr",	BRLP (0, 0, 1)},
13884865Sobrien    {"brl.call.spnt.few",	BRL (0, 1, 0)},
139130561Sobrien    {"brl.call.spnt",		BRLP (0, 1, 0)},
14084865Sobrien    {"brl.call.spnt.few.clr",	BRL (0, 1, 1)},
141130561Sobrien    {"brl.call.spnt.clr",	BRLP (0, 1, 1)},
14284865Sobrien    {"brl.call.dptk.few",	BRL (0, 2, 0)},
143130561Sobrien    {"brl.call.dptk",		BRLP (0, 2, 0)},
14484865Sobrien    {"brl.call.dptk.few.clr",	BRL (0, 2, 1)},
145130561Sobrien    {"brl.call.dptk.clr",	BRLP (0, 2, 1)},
14684865Sobrien    {"brl.call.dpnt.few",	BRL (0, 3, 0)},
147130561Sobrien    {"brl.call.dpnt",		BRLP (0, 3, 0)},
14884865Sobrien    {"brl.call.dpnt.few.clr",	BRL (0, 3, 1)},
149130561Sobrien    {"brl.call.dpnt.clr",	BRLP (0, 3, 1)},
15084865Sobrien    {"brl.call.sptk.many",	BRL (1, 0, 0)},
15184865Sobrien    {"brl.call.sptk.many.clr",	BRL (1, 0, 1)},
15284865Sobrien    {"brl.call.spnt.many",	BRL (1, 1, 0)},
15384865Sobrien    {"brl.call.spnt.many.clr",	BRL (1, 1, 1)},
15484865Sobrien    {"brl.call.dptk.many",	BRL (1, 2, 0)},
15584865Sobrien    {"brl.call.dptk.many.clr",	BRL (1, 2, 1)},
15684865Sobrien    {"brl.call.dpnt.many",	BRL (1, 3, 0)},
15784865Sobrien    {"brl.call.dpnt.many.clr",	BRL (1, 3, 1)},
15884865Sobrien#undef BRL
159130561Sobrien#undef BRLP
160130561Sobrien    {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
16184865Sobrien  };
16284865Sobrien
16384865Sobrien#undef X0
16484865Sobrien#undef X
16584865Sobrien
16684865Sobrien#undef bBtype
16784865Sobrien#undef bD
16884865Sobrien#undef bPa
16984865Sobrien#undef bPr
17084865Sobrien#undef bVc
17184865Sobrien#undef bWha
17284865Sobrien#undef bX3
17384865Sobrien#undef bX6
17484865Sobrien
17584865Sobrien#undef mBtype
17684865Sobrien#undef mD
17784865Sobrien#undef mPa
17884865Sobrien#undef mPr
17984865Sobrien#undef mVc
18084865Sobrien#undef mWha
18184865Sobrien#undef mX3
18284865Sobrien#undef mX6
18384865Sobrien
18484865Sobrien#undef OpX3X6
18584865Sobrien#undef OpVc
18684865Sobrien#undef OpPaWhaD
18784865Sobrien#undef OpBtypePaWhaD
18884865Sobrien#undef OpBtypePaWhaDPr
189