xref: /netbsd-src/external/gpl3/binutils.old/dist/opcodes/ia64-opc-x.c (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos /* ia64-opc-x.c -- IA-64 `X' opcode table.
2*e992f068Schristos    Copyright (C) 1998-2022 Free Software Foundation, Inc.
375fd0b74Schristos    Contributed by Timothy Wall <twall@cygnus.com>
475fd0b74Schristos 
575fd0b74Schristos    This file is part of the GNU opcodes library.
675fd0b74Schristos 
775fd0b74Schristos    This library is free software; you can redistribute it and/or modify
875fd0b74Schristos    it under the terms of the GNU General Public License as published by
975fd0b74Schristos    the Free Software Foundation; either version 3, or (at your option)
1075fd0b74Schristos    any later version.
1175fd0b74Schristos 
1275fd0b74Schristos    It is distributed in the hope that it will be useful, but WITHOUT
1375fd0b74Schristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1475fd0b74Schristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
1575fd0b74Schristos    License for more details.
1675fd0b74Schristos 
1775fd0b74Schristos    You should have received a copy of the GNU General Public License
1875fd0b74Schristos    along with this file; see the file COPYING.  If not, write to the
1975fd0b74Schristos    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
2075fd0b74Schristos    MA 02110-1301, USA.  */
2175fd0b74Schristos 
2275fd0b74Schristos #include "ia64-opc.h"
2375fd0b74Schristos 
2475fd0b74Schristos /* Identify the specific X-unit type.  */
2575fd0b74Schristos #define X0      IA64_TYPE_X, 0
2675fd0b74Schristos #define X	IA64_TYPE_X, 1
2775fd0b74Schristos 
2875fd0b74Schristos /* Instruction bit fields:  */
2975fd0b74Schristos #define bBtype(x)	(((ia64_insn) ((x) & 0x7)) << 6)
3075fd0b74Schristos #define bD(x)		(((ia64_insn) ((x) & 0x1)) << 35)
3175fd0b74Schristos #define bPa(x)		(((ia64_insn) ((x) & 0x1)) << 12)
3275fd0b74Schristos #define bPr(x)		(((ia64_insn) ((x) & 0x3f)) << 0)
3375fd0b74Schristos #define bVc(x)		(((ia64_insn) ((x) & 0x1)) << 20)
3475fd0b74Schristos #define bWha(x)		(((ia64_insn) ((x) & 0x3)) << 33)
3575fd0b74Schristos #define bX3(x)		(((ia64_insn) ((x) & 0x7)) << 33)
3675fd0b74Schristos #define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
3775fd0b74Schristos #define bY(x)		(((ia64_insn) ((x) & 0x1)) << 26)
3875fd0b74Schristos 
3975fd0b74Schristos #define mBtype		bBtype (-1)
4075fd0b74Schristos #define mD		bD (-1)
4175fd0b74Schristos #define mPa		bPa (-1)
4275fd0b74Schristos #define mPr		bPr (-1)
4375fd0b74Schristos #define mVc             bVc (-1)
4475fd0b74Schristos #define mWha		bWha (-1)
4575fd0b74Schristos #define mX3             bX3 (-1)
4675fd0b74Schristos #define mX6		bX6 (-1)
4775fd0b74Schristos #define mY		bY (-1)
4875fd0b74Schristos 
4975fd0b74Schristos #define OpX3X6(a,b,c)		(bOp (a) | bX3 (b) | bX6(c)), \
5075fd0b74Schristos 				(mOp | mX3 | mX6)
5175fd0b74Schristos #define OpX3X6Y(a,b,c,d)	(bOp (a) | bX3 (b) | bX6(c) | bY(d)), \
5275fd0b74Schristos 				(mOp | mX3 | mX6 | mY)
5375fd0b74Schristos #define OpVc(a,b)		(bOp (a) | bVc (b)), (mOp | mVc)
5475fd0b74Schristos #define OpPaWhaD(a,b,c,d) \
5575fd0b74Schristos 	(bOp (a) | bPa (b) | bWha (c) | bD (d)), (mOp | mPa | mWha | mD)
5675fd0b74Schristos #define OpBtypePaWhaD(a,b,c,d,e) \
5775fd0b74Schristos 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e)), \
5875fd0b74Schristos 	(mOp | mBtype | mPa | mWha | mD)
5975fd0b74Schristos #define OpBtypePaWhaDPr(a,b,c,d,e,f) \
6075fd0b74Schristos 	(bOp (a) | bBtype (b) | bPa (c) | bWha (d) | bD (e) | bPr (f)), \
6175fd0b74Schristos 	(mOp | mBtype | mPa | mWha | mD | mPr)
6275fd0b74Schristos 
6375fd0b74Schristos struct ia64_opcode ia64_opcodes_x[] =
6475fd0b74Schristos   {
6575fd0b74Schristos     {"break.x",	X0, OpX3X6 (0, 0, 0x00), {IMMU62}, 0, 0, NULL},
6675fd0b74Schristos     {"nop.x",	X0, OpX3X6Y (0, 0, 0x01, 0), {IMMU62}, 0, 0, NULL},
6775fd0b74Schristos     {"hint.x",	X0, OpX3X6Y (0, 0, 0x01, 1), {IMMU62}, 0, 0, NULL},
6875fd0b74Schristos     {"movl",	X,  OpVc (6, 0), {R1, IMMU64}, 0, 0, NULL},
6975fd0b74Schristos #define BRL(a,b) \
7075fd0b74Schristos       X0, OpBtypePaWhaDPr (0xC, 0, a, 0, b, 0), {TGT64}, PSEUDO, 0, NULL
7175fd0b74Schristos     {"brl.few",         BRL (0, 0)},
7275fd0b74Schristos     {"brl",             BRL (0, 0)},
7375fd0b74Schristos     {"brl.few.clr",	BRL (0, 1)},
7475fd0b74Schristos     {"brl.clr",		BRL (0, 1)},
7575fd0b74Schristos     {"brl.many",	BRL (1, 0)},
7675fd0b74Schristos     {"brl.many.clr",	BRL (1, 1)},
7775fd0b74Schristos #undef BRL
7875fd0b74Schristos #define BRL(a,b,c) \
7975fd0b74Schristos       X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, 0, 0, NULL
8075fd0b74Schristos #define BRLP(a,b,c) \
8175fd0b74Schristos       X0, OpBtypePaWhaD (0xC, 0, a, b, c), {TGT64}, PSEUDO, 0, NULL
8275fd0b74Schristos     {"brl.cond.sptk.few",	BRL (0, 0, 0)},
8375fd0b74Schristos     {"brl.cond.sptk",		BRLP (0, 0, 0)},
8475fd0b74Schristos     {"brl.cond.sptk.few.clr",	BRL (0, 0, 1)},
8575fd0b74Schristos     {"brl.cond.sptk.clr",	BRLP (0, 0, 1)},
8675fd0b74Schristos     {"brl.cond.spnt.few",	BRL (0, 1, 0)},
8775fd0b74Schristos     {"brl.cond.spnt",		BRLP (0, 1, 0)},
8875fd0b74Schristos     {"brl.cond.spnt.few.clr",	BRL (0, 1, 1)},
8975fd0b74Schristos     {"brl.cond.spnt.clr",	BRLP (0, 1, 1)},
9075fd0b74Schristos     {"brl.cond.dptk.few",	BRL (0, 2, 0)},
9175fd0b74Schristos     {"brl.cond.dptk",		BRLP (0, 2, 0)},
9275fd0b74Schristos     {"brl.cond.dptk.few.clr",	BRL (0, 2, 1)},
9375fd0b74Schristos     {"brl.cond.dptk.clr",	BRLP (0, 2, 1)},
9475fd0b74Schristos     {"brl.cond.dpnt.few",	BRL (0, 3, 0)},
9575fd0b74Schristos     {"brl.cond.dpnt",		BRLP (0, 3, 0)},
9675fd0b74Schristos     {"brl.cond.dpnt.few.clr",	BRL (0, 3, 1)},
9775fd0b74Schristos     {"brl.cond.dpnt.clr",	BRLP (0, 3, 1)},
9875fd0b74Schristos     {"brl.cond.sptk.many",	BRL (1, 0, 0)},
9975fd0b74Schristos     {"brl.cond.sptk.many.clr",	BRL (1, 0, 1)},
10075fd0b74Schristos     {"brl.cond.spnt.many",	BRL (1, 1, 0)},
10175fd0b74Schristos     {"brl.cond.spnt.many.clr",	BRL (1, 1, 1)},
10275fd0b74Schristos     {"brl.cond.dptk.many",	BRL (1, 2, 0)},
10375fd0b74Schristos     {"brl.cond.dptk.many.clr",	BRL (1, 2, 1)},
10475fd0b74Schristos     {"brl.cond.dpnt.many",	BRL (1, 3, 0)},
10575fd0b74Schristos     {"brl.cond.dpnt.many.clr",	BRL (1, 3, 1)},
10675fd0b74Schristos     {"brl.sptk.few",		BRL (0, 0, 0)},
10775fd0b74Schristos     {"brl.sptk",		BRLP (0, 0, 0)},
10875fd0b74Schristos     {"brl.sptk.few.clr",	BRL (0, 0, 1)},
10975fd0b74Schristos     {"brl.sptk.clr",		BRLP (0, 0, 1)},
11075fd0b74Schristos     {"brl.spnt.few",		BRL (0, 1, 0)},
11175fd0b74Schristos     {"brl.spnt",		BRLP (0, 1, 0)},
11275fd0b74Schristos     {"brl.spnt.few.clr",	BRL (0, 1, 1)},
11375fd0b74Schristos     {"brl.spnt.clr",		BRLP (0, 1, 1)},
11475fd0b74Schristos     {"brl.dptk.few",		BRL (0, 2, 0)},
11575fd0b74Schristos     {"brl.dptk",		BRLP (0, 2, 0)},
11675fd0b74Schristos     {"brl.dptk.few.clr",	BRL (0, 2, 1)},
11775fd0b74Schristos     {"brl.dptk.clr",		BRLP (0, 2, 1)},
11875fd0b74Schristos     {"brl.dpnt.few",		BRL (0, 3, 0)},
11975fd0b74Schristos     {"brl.dpnt",		BRLP (0, 3, 0)},
12075fd0b74Schristos     {"brl.dpnt.few.clr",	BRL (0, 3, 1)},
12175fd0b74Schristos     {"brl.dpnt.clr",		BRLP (0, 3, 1)},
12275fd0b74Schristos     {"brl.sptk.many",		BRL (1, 0, 0)},
12375fd0b74Schristos     {"brl.sptk.many.clr",	BRL (1, 0, 1)},
12475fd0b74Schristos     {"brl.spnt.many",		BRL (1, 1, 0)},
12575fd0b74Schristos     {"brl.spnt.many.clr",	BRL (1, 1, 1)},
12675fd0b74Schristos     {"brl.dptk.many",		BRL (1, 2, 0)},
12775fd0b74Schristos     {"brl.dptk.many.clr",	BRL (1, 2, 1)},
12875fd0b74Schristos     {"brl.dpnt.many",		BRL (1, 3, 0)},
12975fd0b74Schristos     {"brl.dpnt.many.clr",	BRL (1, 3, 1)},
13075fd0b74Schristos #undef BRL
13175fd0b74Schristos #undef BRLP
13275fd0b74Schristos #define BRL(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, 0, 0, NULL
13375fd0b74Schristos #define BRLP(a,b,c) X, OpPaWhaD (0xD, a, b, c), {B1, TGT64}, PSEUDO, 0, NULL
13475fd0b74Schristos     {"brl.call.sptk.few",	BRL (0, 0, 0)},
13575fd0b74Schristos     {"brl.call.sptk",		BRLP (0, 0, 0)},
13675fd0b74Schristos     {"brl.call.sptk.few.clr",	BRL (0, 0, 1)},
13775fd0b74Schristos     {"brl.call.sptk.clr",	BRLP (0, 0, 1)},
13875fd0b74Schristos     {"brl.call.spnt.few",	BRL (0, 1, 0)},
13975fd0b74Schristos     {"brl.call.spnt",		BRLP (0, 1, 0)},
14075fd0b74Schristos     {"brl.call.spnt.few.clr",	BRL (0, 1, 1)},
14175fd0b74Schristos     {"brl.call.spnt.clr",	BRLP (0, 1, 1)},
14275fd0b74Schristos     {"brl.call.dptk.few",	BRL (0, 2, 0)},
14375fd0b74Schristos     {"brl.call.dptk",		BRLP (0, 2, 0)},
14475fd0b74Schristos     {"brl.call.dptk.few.clr",	BRL (0, 2, 1)},
14575fd0b74Schristos     {"brl.call.dptk.clr",	BRLP (0, 2, 1)},
14675fd0b74Schristos     {"brl.call.dpnt.few",	BRL (0, 3, 0)},
14775fd0b74Schristos     {"brl.call.dpnt",		BRLP (0, 3, 0)},
14875fd0b74Schristos     {"brl.call.dpnt.few.clr",	BRL (0, 3, 1)},
14975fd0b74Schristos     {"brl.call.dpnt.clr",	BRLP (0, 3, 1)},
15075fd0b74Schristos     {"brl.call.sptk.many",	BRL (1, 0, 0)},
15175fd0b74Schristos     {"brl.call.sptk.many.clr",	BRL (1, 0, 1)},
15275fd0b74Schristos     {"brl.call.spnt.many",	BRL (1, 1, 0)},
15375fd0b74Schristos     {"brl.call.spnt.many.clr",	BRL (1, 1, 1)},
15475fd0b74Schristos     {"brl.call.dptk.many",	BRL (1, 2, 0)},
15575fd0b74Schristos     {"brl.call.dptk.many.clr",	BRL (1, 2, 1)},
15675fd0b74Schristos     {"brl.call.dpnt.many",	BRL (1, 3, 0)},
15775fd0b74Schristos     {"brl.call.dpnt.many.clr",	BRL (1, 3, 1)},
15875fd0b74Schristos #undef BRL
15975fd0b74Schristos #undef BRLP
16075fd0b74Schristos     {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
16175fd0b74Schristos   };
16275fd0b74Schristos 
16375fd0b74Schristos #undef X0
16475fd0b74Schristos #undef X
16575fd0b74Schristos 
16675fd0b74Schristos #undef bBtype
16775fd0b74Schristos #undef bD
16875fd0b74Schristos #undef bPa
16975fd0b74Schristos #undef bPr
17075fd0b74Schristos #undef bVc
17175fd0b74Schristos #undef bWha
17275fd0b74Schristos #undef bX3
17375fd0b74Schristos #undef bX6
17475fd0b74Schristos 
17575fd0b74Schristos #undef mBtype
17675fd0b74Schristos #undef mD
17775fd0b74Schristos #undef mPa
17875fd0b74Schristos #undef mPr
17975fd0b74Schristos #undef mVc
18075fd0b74Schristos #undef mWha
18175fd0b74Schristos #undef mX3
18275fd0b74Schristos #undef mX6
18375fd0b74Schristos 
18475fd0b74Schristos #undef OpX3X6
18575fd0b74Schristos #undef OpVc
18675fd0b74Schristos #undef OpPaWhaD
18775fd0b74Schristos #undef OpBtypePaWhaD
18875fd0b74Schristos #undef OpBtypePaWhaDPr
189