xref: /openbsd-src/gnu/usr.bin/binutils/opcodes/ia64-opc-x.c (revision d2201f2f89f0be1a0be6f7568000ed297414a06d)
15f210c2aSfgsch /* ia64-opc-x.c -- IA-64 `X' opcode table.
2*d2201f2fSdrahn    Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
35f210c2aSfgsch    Contributed by Timothy Wall <twall@cygnus.com>
45f210c2aSfgsch 
55f210c2aSfgsch    This file is part of GDB, GAS, and the GNU binutils.
65f210c2aSfgsch 
75f210c2aSfgsch    GDB, GAS, and the GNU binutils are free software; you can redistribute
85f210c2aSfgsch    them and/or modify them under the terms of the GNU General Public
95f210c2aSfgsch    License as published by the Free Software Foundation; either version
105f210c2aSfgsch    2, or (at your option) any later version.
115f210c2aSfgsch 
125f210c2aSfgsch    GDB, GAS, and the GNU binutils are distributed in the hope that they
135f210c2aSfgsch    will be useful, but WITHOUT ANY WARRANTY; without even the implied
145f210c2aSfgsch    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
155f210c2aSfgsch    the GNU General Public License for more details.
165f210c2aSfgsch 
175f210c2aSfgsch    You should have received a copy of the GNU General Public License
185f210c2aSfgsch    along with this file; see the file COPYING.  If not, write to the
195f210c2aSfgsch    Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
205f210c2aSfgsch    02111-1307, USA.  */
215f210c2aSfgsch 
225f210c2aSfgsch #include "ia64-opc.h"
235f210c2aSfgsch 
24*d2201f2fSdrahn /* Identify the specific X-unit type.  */
255f210c2aSfgsch #define X0      IA64_TYPE_X, 0
265f210c2aSfgsch #define X	IA64_TYPE_X, 1
275f210c2aSfgsch 
28*d2201f2fSdrahn /* Instruction bit fields:  */
295f210c2aSfgsch #define bBtype(x)	(((ia64_insn) ((x) & 0x7)) << 6)
305f210c2aSfgsch #define bD(x)		(((ia64_insn) ((x) & 0x1)) << 35)
315f210c2aSfgsch #define bPa(x)		(((ia64_insn) ((x) & 0x1)) << 12)
325f210c2aSfgsch #define bPr(x)		(((ia64_insn) ((x) & 0x3f)) << 0)
335f210c2aSfgsch #define bVc(x)		(((ia64_insn) ((x) & 0x1)) << 20)
345f210c2aSfgsch #define bWha(x)		(((ia64_insn) ((x) & 0x3)) << 33)
355f210c2aSfgsch #define bX3(x)		(((ia64_insn) ((x) & 0x7)) << 33)
365f210c2aSfgsch #define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
37*d2201f2fSdrahn #define bY(x)		(((ia64_insn) ((x) & 0x1)) << 26)
385f210c2aSfgsch 
395f210c2aSfgsch #define mBtype		bBtype (-1)
405f210c2aSfgsch #define mD		bD (-1)
415f210c2aSfgsch #define mPa		bPa (-1)
425f210c2aSfgsch #define mPr		bPr (-1)
435f210c2aSfgsch #define mVc             bVc (-1)
445f210c2aSfgsch #define mWha		bWha (-1)
455f210c2aSfgsch #define mX3             bX3 (-1)
465f210c2aSfgsch #define mX6		bX6 (-1)
47*d2201f2fSdrahn #define mY		bY (-1)
485f210c2aSfgsch 
495f210c2aSfgsch #define OpX3X6(a,b,c)		(bOp (a) | bX3 (b) | bX6(c)), \
505f210c2aSfgsch 				(mOp | mX3 | mX6)
51*d2201f2fSdrahn #define OpX3X6Y(a,b,c,d)	(bOp (a) | bX3 (b) | bX6(c) | bY(d)), \
52*d2201f2fSdrahn 				(mOp | mX3 | mX6 | mY)
535f210c2aSfgsch #define OpVc(a,b)		(bOp (a) | bVc (b)), (mOp | mVc)
545f210c2aSfgsch #define OpPaWhaD(a,b,c,d) \
555f210c2aSfgsch 	(bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
565f210c2aSfgsch #define OpBtypePaWhaD(a,b,c,d,e) \
575f210c2aSfgsch 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
585f210c2aSfgsch 	(mOp | mBtype | mPa | mWha | mD)
595f210c2aSfgsch #define OpBtypePaWhaDPr(a,b,c,d,e,f) \
605f210c2aSfgsch 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
615f210c2aSfgsch 	(mOp | mBtype | mPa | mWha | mD | mPr)
625f210c2aSfgsch 
635f210c2aSfgsch struct ia64_opcode ia64_opcodes_x[] =
645f210c2aSfgsch   {
65*d2201f2fSdrahn     {"break.x",	X0, OpX3X6 (0, 0, 0x00), {IMMU62}, 0, 0, NULL},
66*d2201f2fSdrahn     {"nop.x",	X0, OpX3X6Y (0, 0, 0x01, 0), {IMMU62}, 0, 0, NULL},
67*d2201f2fSdrahn     {"hint.x",	X0, OpX3X6Y (0, 0, 0x01, 1), {IMMU62}, 0, 0, NULL},
68*d2201f2fSdrahn     {"movl",	X,  OpVc (6, 0), {R1, IMMU64}, 0, 0, NULL},
695f210c2aSfgsch #define BRL(a,b) \
70*d2201f2fSdrahn       X0, OpBtypePaWhaDPr (0xC, 0, a, 0, b, 0), {TGT64}, PSEUDO, 0, NULL
71*d2201f2fSdrahn     {"brl.few",         BRL (0, 0)},
72*d2201f2fSdrahn     {"brl",             BRL (0, 0)},
73*d2201f2fSdrahn     {"brl.few.clr",	BRL (0, 1)},
74*d2201f2fSdrahn     {"brl.clr",		BRL (0, 1)},
75*d2201f2fSdrahn     {"brl.many",	BRL (1, 0)},
76*d2201f2fSdrahn     {"brl.many.clr",	BRL (1, 1)},
775f210c2aSfgsch #undef BRL
785f210c2aSfgsch #define BRL(a,b,c) \
79*d2201f2fSdrahn       X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, 0, 0, NULL
80*d2201f2fSdrahn #define BRLP(a,b,c) \
81*d2201f2fSdrahn       X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, PSEUDO, 0, NULL
825f210c2aSfgsch     {"brl.cond.sptk.few",	BRL (0, 0, 0)},
83*d2201f2fSdrahn     {"brl.cond.sptk",		BRLP (0, 0, 0)},
845f210c2aSfgsch     {"brl.cond.sptk.few.clr",	BRL (0, 0, 1)},
85*d2201f2fSdrahn     {"brl.cond.sptk.clr",	BRLP (0, 0, 1)},
865f210c2aSfgsch     {"brl.cond.spnt.few",	BRL (0, 1, 0)},
87*d2201f2fSdrahn     {"brl.cond.spnt",		BRLP (0, 1, 0)},
885f210c2aSfgsch     {"brl.cond.spnt.few.clr",	BRL (0, 1, 1)},
89*d2201f2fSdrahn     {"brl.cond.spnt.clr",	BRLP (0, 1, 1)},
905f210c2aSfgsch     {"brl.cond.dptk.few",	BRL (0, 2, 0)},
91*d2201f2fSdrahn     {"brl.cond.dptk",		BRLP (0, 2, 0)},
925f210c2aSfgsch     {"brl.cond.dptk.few.clr",	BRL (0, 2, 1)},
93*d2201f2fSdrahn     {"brl.cond.dptk.clr",	BRLP (0, 2, 1)},
945f210c2aSfgsch     {"brl.cond.dpnt.few",	BRL (0, 3, 0)},
95*d2201f2fSdrahn     {"brl.cond.dpnt",		BRLP (0, 3, 0)},
965f210c2aSfgsch     {"brl.cond.dpnt.few.clr",	BRL (0, 3, 1)},
97*d2201f2fSdrahn     {"brl.cond.dpnt.clr",	BRLP (0, 3, 1)},
985f210c2aSfgsch     {"brl.cond.sptk.many",	BRL (1, 0, 0)},
995f210c2aSfgsch     {"brl.cond.sptk.many.clr",	BRL (1, 0, 1)},
1005f210c2aSfgsch     {"brl.cond.spnt.many",	BRL (1, 1, 0)},
1015f210c2aSfgsch     {"brl.cond.spnt.many.clr",	BRL (1, 1, 1)},
1025f210c2aSfgsch     {"brl.cond.dptk.many",	BRL (1, 2, 0)},
1035f210c2aSfgsch     {"brl.cond.dptk.many.clr",	BRL (1, 2, 1)},
1045f210c2aSfgsch     {"brl.cond.dpnt.many",	BRL (1, 3, 0)},
1055f210c2aSfgsch     {"brl.cond.dpnt.many.clr",	BRL (1, 3, 1)},
1065f210c2aSfgsch     {"brl.sptk.few",		BRL (0, 0, 0)},
107*d2201f2fSdrahn     {"brl.sptk",		BRLP (0, 0, 0)},
1085f210c2aSfgsch     {"brl.sptk.few.clr",	BRL (0, 0, 1)},
109*d2201f2fSdrahn     {"brl.sptk.clr",		BRLP (0, 0, 1)},
1105f210c2aSfgsch     {"brl.spnt.few",		BRL (0, 1, 0)},
111*d2201f2fSdrahn     {"brl.spnt",		BRLP (0, 1, 0)},
1125f210c2aSfgsch     {"brl.spnt.few.clr",	BRL (0, 1, 1)},
113*d2201f2fSdrahn     {"brl.spnt.clr",		BRLP (0, 1, 1)},
1145f210c2aSfgsch     {"brl.dptk.few",		BRL (0, 2, 0)},
115*d2201f2fSdrahn     {"brl.dptk",		BRLP (0, 2, 0)},
1165f210c2aSfgsch     {"brl.dptk.few.clr",	BRL (0, 2, 1)},
117*d2201f2fSdrahn     {"brl.dptk.clr",		BRLP (0, 2, 1)},
1185f210c2aSfgsch     {"brl.dpnt.few",		BRL (0, 3, 0)},
119*d2201f2fSdrahn     {"brl.dpnt",		BRLP (0, 3, 0)},
1205f210c2aSfgsch     {"brl.dpnt.few.clr",	BRL (0, 3, 1)},
121*d2201f2fSdrahn     {"brl.dpnt.clr",		BRLP (0, 3, 1)},
1225f210c2aSfgsch     {"brl.sptk.many",		BRL (1, 0, 0)},
1235f210c2aSfgsch     {"brl.sptk.many.clr",	BRL (1, 0, 1)},
1245f210c2aSfgsch     {"brl.spnt.many",		BRL (1, 1, 0)},
1255f210c2aSfgsch     {"brl.spnt.many.clr",	BRL (1, 1, 1)},
1265f210c2aSfgsch     {"brl.dptk.many",		BRL (1, 2, 0)},
1275f210c2aSfgsch     {"brl.dptk.many.clr",	BRL (1, 2, 1)},
1285f210c2aSfgsch     {"brl.dpnt.many",		BRL (1, 3, 0)},
1295f210c2aSfgsch     {"brl.dpnt.many.clr",	BRL (1, 3, 1)},
1305f210c2aSfgsch #undef BRL
131*d2201f2fSdrahn #undef BRLP
132*d2201f2fSdrahn #define BRL(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, 0, 0, NULL
133*d2201f2fSdrahn #define BRLP(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, PSEUDO, 0, NULL
1345f210c2aSfgsch     {"brl.call.sptk.few",	BRL (0, 0, 0)},
135*d2201f2fSdrahn     {"brl.call.sptk",		BRLP (0, 0, 0)},
1365f210c2aSfgsch     {"brl.call.sptk.few.clr",	BRL (0, 0, 1)},
137*d2201f2fSdrahn     {"brl.call.sptk.clr",	BRLP (0, 0, 1)},
1385f210c2aSfgsch     {"brl.call.spnt.few",	BRL (0, 1, 0)},
139*d2201f2fSdrahn     {"brl.call.spnt",		BRLP (0, 1, 0)},
1405f210c2aSfgsch     {"brl.call.spnt.few.clr",	BRL (0, 1, 1)},
141*d2201f2fSdrahn     {"brl.call.spnt.clr",	BRLP (0, 1, 1)},
1425f210c2aSfgsch     {"brl.call.dptk.few",	BRL (0, 2, 0)},
143*d2201f2fSdrahn     {"brl.call.dptk",		BRLP (0, 2, 0)},
1445f210c2aSfgsch     {"brl.call.dptk.few.clr",	BRL (0, 2, 1)},
145*d2201f2fSdrahn     {"brl.call.dptk.clr",	BRLP (0, 2, 1)},
1465f210c2aSfgsch     {"brl.call.dpnt.few",	BRL (0, 3, 0)},
147*d2201f2fSdrahn     {"brl.call.dpnt",		BRLP (0, 3, 0)},
1485f210c2aSfgsch     {"brl.call.dpnt.few.clr",	BRL (0, 3, 1)},
149*d2201f2fSdrahn     {"brl.call.dpnt.clr",	BRLP (0, 3, 1)},
1505f210c2aSfgsch     {"brl.call.sptk.many",	BRL (1, 0, 0)},
1515f210c2aSfgsch     {"brl.call.sptk.many.clr",	BRL (1, 0, 1)},
1525f210c2aSfgsch     {"brl.call.spnt.many",	BRL (1, 1, 0)},
1535f210c2aSfgsch     {"brl.call.spnt.many.clr",	BRL (1, 1, 1)},
1545f210c2aSfgsch     {"brl.call.dptk.many",	BRL (1, 2, 0)},
1555f210c2aSfgsch     {"brl.call.dptk.many.clr",	BRL (1, 2, 1)},
1565f210c2aSfgsch     {"brl.call.dpnt.many",	BRL (1, 3, 0)},
1575f210c2aSfgsch     {"brl.call.dpnt.many.clr",	BRL (1, 3, 1)},
1585f210c2aSfgsch #undef BRL
159*d2201f2fSdrahn #undef BRLP
160*d2201f2fSdrahn     {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
1615f210c2aSfgsch   };
1625f210c2aSfgsch 
1635f210c2aSfgsch #undef X0
1645f210c2aSfgsch #undef X
1655f210c2aSfgsch 
1665f210c2aSfgsch #undef bBtype
1675f210c2aSfgsch #undef bD
1685f210c2aSfgsch #undef bPa
1695f210c2aSfgsch #undef bPr
1705f210c2aSfgsch #undef bVc
1715f210c2aSfgsch #undef bWha
1725f210c2aSfgsch #undef bX3
1735f210c2aSfgsch #undef bX6
1745f210c2aSfgsch 
1755f210c2aSfgsch #undef mBtype
1765f210c2aSfgsch #undef mD
1775f210c2aSfgsch #undef mPa
1785f210c2aSfgsch #undef mPr
1795f210c2aSfgsch #undef mVc
1805f210c2aSfgsch #undef mWha
1815f210c2aSfgsch #undef mX3
1825f210c2aSfgsch #undef mX6
1835f210c2aSfgsch 
1845f210c2aSfgsch #undef OpX3X6
1855f210c2aSfgsch #undef OpVc
1865f210c2aSfgsch #undef OpPaWhaD
1875f210c2aSfgsch #undef OpBtypePaWhaD
1885f210c2aSfgsch #undef OpBtypePaWhaDPr
189