184865Sobrien/* ia64-opc-i.c -- IA-64 `I' opcode table.
2218822Sdim   Copyright 1998, 1999, 2000, 2002, 2005, 2006
3218822Sdim   Free Software Foundation, Inc.
484865Sobrien   Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
584865Sobrien
684865Sobrien   This file is part of GDB, GAS, and the GNU binutils.
784865Sobrien
884865Sobrien   GDB, GAS, and the GNU binutils are free software; you can redistribute
984865Sobrien   them and/or modify them under the terms of the GNU General Public
1084865Sobrien   License as published by the Free Software Foundation; either version
1184865Sobrien   2, or (at your option) any later version.
1284865Sobrien
1384865Sobrien   GDB, GAS, and the GNU binutils are distributed in the hope that they
1484865Sobrien   will be useful, but WITHOUT ANY WARRANTY; without even the implied
1584865Sobrien   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1684865Sobrien   the GNU General Public License for more details.
1784865Sobrien
1884865Sobrien   You should have received a copy of the GNU General Public License
1984865Sobrien   along with this file; see the file COPYING.  If not, write to the
20218822Sdim   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21218822Sdim   02110-1301, USA.  */
2284865Sobrien
2384865Sobrien#include "ia64-opc.h"
2484865Sobrien
2584865Sobrien#define I0	IA64_TYPE_I, 0
2684865Sobrien#define I	IA64_TYPE_I, 1
2784865Sobrien#define I2	IA64_TYPE_I, 2
2884865Sobrien
2984865Sobrien/* instruction bit fields: */
3084865Sobrien#define bC(x)		(((ia64_insn) ((x) & 0x1)) << 12)
3184865Sobrien#define bIh(x)		(((ia64_insn) ((x) & 0x1)) << 23)
3284865Sobrien#define bTa(x)		(((ia64_insn) ((x) & 0x1)) << 33)
3384865Sobrien#define bTag13(x)	(((ia64_insn) ((x) & 0x1)) << 33)
3484865Sobrien#define bTb(x)		(((ia64_insn) ((x) & 0x1)) << 36)
3584865Sobrien#define bVc(x)		(((ia64_insn) ((x) & 0x1)) << 20)
3684865Sobrien#define bVe(x)		(((ia64_insn) ((x) & 0x1)) << 32)
3784865Sobrien#define bWh(x)		(((ia64_insn) ((x) & 0x3)) << 20)
3884865Sobrien#define bX(x)		(((ia64_insn) ((x) & 0x1)) << 33)
3984865Sobrien#define bXb(x)		(((ia64_insn) ((x) & 0x1)) << 22)
40218822Sdim#define bXc(x)		(((ia64_insn) ((x) & 0x1)) << 19)
4184865Sobrien#define bX2(x)		(((ia64_insn) ((x) & 0x3)) << 34)
4284865Sobrien#define bX2a(x)		(((ia64_insn) ((x) & 0x3)) << 34)
4384865Sobrien#define bX2b(x)		(((ia64_insn) ((x) & 0x3)) << 28)
4484865Sobrien#define bX2c(x)		(((ia64_insn) ((x) & 0x3)) << 30)
4584865Sobrien#define bX3(x)		(((ia64_insn) ((x) & 0x7)) << 33)
4684865Sobrien#define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
4784865Sobrien#define bYa(x)		(((ia64_insn) ((x) & 0x1)) << 13)
4884865Sobrien#define bYb(x)		(((ia64_insn) ((x) & 0x1)) << 26)
4984865Sobrien#define bZa(x)		(((ia64_insn) ((x) & 0x1)) << 36)
5084865Sobrien#define bZb(x)		(((ia64_insn) ((x) & 0x1)) << 33)
5184865Sobrien
5284865Sobrien/* instruction bit masks: */
5384865Sobrien#define mC	bC (-1)
5484865Sobrien#define mIh	bIh (-1)
5584865Sobrien#define mTa	bTa (-1)
5684865Sobrien#define mTag13	bTag13 (-1)
5784865Sobrien#define mTb	bTb (-1)
5884865Sobrien#define mVc	bVc (-1)
5984865Sobrien#define mVe	bVe (-1)
6084865Sobrien#define mWh	bWh (-1)
6184865Sobrien#define mX	bX (-1)
6284865Sobrien#define mXb	bXb (-1)
63218822Sdim#define mXc	bXc (-1)
6484865Sobrien#define mX2	bX2 (-1)
6584865Sobrien#define mX2a	bX2a (-1)
6684865Sobrien#define mX2b	bX2b (-1)
6784865Sobrien#define mX2c	bX2c (-1)
6884865Sobrien#define mX3	bX3 (-1)
6984865Sobrien#define mX6	bX6 (-1)
7084865Sobrien#define mYa	bYa (-1)
7184865Sobrien#define mYb	bYb (-1)
7284865Sobrien#define mZa	bZa (-1)
7384865Sobrien#define mZb	bZb (-1)
7484865Sobrien
7584865Sobrien#define OpZaZbVeX2aX2b(a,b,c,d,e,f) \
7684865Sobrien	(bOp (a) | bZa (b) | bZb (c) | bVe (d) | bX2a (e) | bX2b (f)), \
7784865Sobrien	(mOp | mZa | mZb | mVe | mX2a | mX2b)
7884865Sobrien#define OpZaZbVeX2aX2bX2c(a,b,c,d,e,f,g) \
7984865Sobrien  (bOp (a) | bZa (b) | bZb (c) | bVe (d) | bX2a (e) | bX2b (f) | bX2c (g)), \
8084865Sobrien	(mOp | mZa | mZb | mVe | mX2a | mX2b | mX2c)
8184865Sobrien#define OpX2X(a,b,c)		(bOp (a) | bX2 (b) | bX (c)), (mOp | mX2 | mX)
8284865Sobrien#define OpX2XYa(a,b,c,d)	(bOp (a) | bX2 (b) | bX (c) | bYa (d)), \
8384865Sobrien				(mOp | mX2 | mX | mYa)
8484865Sobrien#define OpX2XYb(a,b,c,d)	(bOp (a) | bX2 (b) | bX (c) | bYb (d)), \
8584865Sobrien				(mOp | mX2 | mX | mYb)
8684865Sobrien#define OpX2TaTbYaC(a,b,c,d,e,f) \
8784865Sobrien	(bOp (a) | bX2 (b) | bTa (c) | bTb (d) | bYa (e) | bC (f)), \
8884865Sobrien	(mOp | mX2 | mTa | mTb | mYa | mC)
89218822Sdim#define OpX2TaTbYaXcC(a,b,c,d,e,f,g) \
90218822Sdim	(bOp (a) | bX2 (b) | bTa (c) | bTb (d) | bYa (e) | bXc (f) | bC (g)), \
91218822Sdim	(mOp | mX2 | mTa | mTb | mYa | mXc | mC)
9284865Sobrien#define OpX3(a,b)		(bOp (a) | bX3 (b)), (mOp | mX3)
9384865Sobrien#define OpX3X6(a,b,c)		(bOp (a) | bX3 (b) | bX6(c)), \
9484865Sobrien				(mOp | mX3 | mX6)
95130561Sobrien#define OpX3X6Yb(a,b,c,d)	(bOp (a) | bX3 (b) | bX6(c) | bYb(d)), \
96130561Sobrien				(mOp | mX3 | mX6 | mYb)
9784865Sobrien#define OpX3XbIhWh(a,b,c,d,e) \
9884865Sobrien  (bOp (a) | bX3 (b) | bXb (c) | bIh (d) | bWh (e)), \
9984865Sobrien  (mOp | mX3 | mXb | mIh | mWh)
10084865Sobrien#define OpX3XbIhWhTag13(a,b,c,d,e,f) \
10184865Sobrien     (bOp (a) | bX3 (b) | bXb (c) | bIh (d) | bWh (e) | bTag13 (f)), \
10284865Sobrien     (mOp | mX3 | mXb | mIh | mWh | mTag13)
10384865Sobrien
104218822Sdim#define FULL17 ((ia64_insn)0x10ff001fc0LL)
105218822Sdim
106130561Sobrien/* Used to initialise unused fields in ia64_opcode struct,
107130561Sobrien   in order to stop gcc from complaining.  */
108130561Sobrien#define EMPTY 0,0,NULL
109130561Sobrien
11084865Sobrienstruct ia64_opcode ia64_opcodes_i[] =
11184865Sobrien  {
112130561Sobrien    /* I-type instruction encodings (sorted according to major opcode).  */
11384865Sobrien
114130561Sobrien    {"break.i",	I0, OpX3X6 (0, 0, 0x00), {IMMU21}, X_IN_MLX, 0, NULL},
115130561Sobrien    {"nop.i",	I0, OpX3X6Yb (0, 0, 0x01, 0), {IMMU21}, X_IN_MLX, 0, NULL},
116130561Sobrien    {"hint.i",	I0, OpX3X6Yb (0, 0, 0x01, 1), {IMMU21}, X_IN_MLX, 0, NULL},
117130561Sobrien    {"chk.s.i",	I0, OpX3 (0, 1), {R2, TGT25b}, EMPTY},
11884865Sobrien
119130561Sobrien    {"mov", I, OpX3XbIhWhTag13 (0, 7, 0, 0, 1, 0), {B1, R2}, PSEUDO, 0, NULL},
12084865Sobrien#define MOV(a,b,c,d) \
121130561Sobrien    I, OpX3XbIhWh (0, a, b, c, d), {B1, R2, TAG13b}, EMPTY
12284865Sobrien    {"mov.sptk",		MOV (7, 0, 0, 0)},
12384865Sobrien    {"mov.sptk.imp",		MOV (7, 0, 1, 0)},
12484865Sobrien    {"mov",			MOV (7, 0, 0, 1)},
12584865Sobrien    {"mov.imp",			MOV (7, 0, 1, 1)},
12684865Sobrien    {"mov.dptk",		MOV (7, 0, 0, 2)},
12784865Sobrien    {"mov.dptk.imp",		MOV (7, 0, 1, 2)},
12884865Sobrien    {"mov.ret.sptk",		MOV (7, 1, 0, 0)},
12984865Sobrien    {"mov.ret.sptk.imp",	MOV (7, 1, 1, 0)},
13084865Sobrien    {"mov.ret",			MOV (7, 1, 0, 1)},
13184865Sobrien    {"mov.ret.imp",		MOV (7, 1, 1, 1)},
13284865Sobrien    {"mov.ret.dptk",		MOV (7, 1, 0, 2)},
13384865Sobrien    {"mov.ret.dptk.imp",	MOV (7, 1, 1, 2)},
13484865Sobrien#undef MOV
135130561Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x31), {R1, B2}, EMPTY},
136130561Sobrien    {"mov",	I, OpX3 (0, 3), {PR, R2, IMM17}, EMPTY},
137218822Sdim    /* Don't remove one of the seemingly redundant FULL17-s.  */
138218822Sdim    {"mov",	I, FULL17 | OpX3 (0, 3) | FULL17, {PR, R2}, PSEUDO, 0, NULL},
139130561Sobrien    {"mov",	I, OpX3 (0, 2), {PR_ROT, IMM44}, EMPTY},
140130561Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x30), {R1, IP}, EMPTY},
141130561Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x33), {R1, PR}, EMPTY},
142130561Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x2a), {AR3, R2}, EMPTY},
143130561Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x0a), {AR3, IMM8}, EMPTY},
144130561Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x32), {R1, AR3}, EMPTY},
145130561Sobrien    {"zxt1",	I, OpX3X6 (0, 0, 0x10), {R1, R3}, EMPTY},
146130561Sobrien    {"zxt2",	I, OpX3X6 (0, 0, 0x11), {R1, R3}, EMPTY},
147130561Sobrien    {"zxt4",	I, OpX3X6 (0, 0, 0x12), {R1, R3}, EMPTY},
148130561Sobrien    {"sxt1",	I, OpX3X6 (0, 0, 0x14), {R1, R3}, EMPTY},
149130561Sobrien    {"sxt2",	I, OpX3X6 (0, 0, 0x15), {R1, R3}, EMPTY},
150130561Sobrien    {"sxt4",	I, OpX3X6 (0, 0, 0x16), {R1, R3}, EMPTY},
151130561Sobrien    {"czx1.l",	I, OpX3X6 (0, 0, 0x18), {R1, R3}, EMPTY},
152130561Sobrien    {"czx2.l",	I, OpX3X6 (0, 0, 0x19), {R1, R3}, EMPTY},
153130561Sobrien    {"czx1.r",	I, OpX3X6 (0, 0, 0x1c), {R1, R3}, EMPTY},
154130561Sobrien    {"czx2.r",	I, OpX3X6 (0, 0, 0x1d), {R1, R3}, EMPTY},
15584865Sobrien
156130561Sobrien    {"dep",	I, Op (4), {R1, R2, R3, CPOS6c, LEN4}, EMPTY},
15784865Sobrien
158130561Sobrien    {"shrp",	I, OpX2X (5, 3, 0), {R1, R2, R3, CNT6}, EMPTY},
15984865Sobrien
16084865Sobrien    {"shr.u",	I, OpX2XYa (5, 1, 0, 0), {R1, R3, POS6},
161130561Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
162130561Sobrien    {"extr.u",	I, OpX2XYa (5, 1, 0, 0), {R1, R3, POS6, LEN6}, EMPTY},
16384865Sobrien
16484865Sobrien    {"shr",	I, OpX2XYa (5, 1, 0, 1), {R1, R3, POS6},
165130561Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
166130561Sobrien    {"extr",	I, OpX2XYa (5, 1, 0, 1), {R1, R3, POS6, LEN6}, EMPTY},
16784865Sobrien
16884865Sobrien    {"shl",	I, OpX2XYb (5, 1, 1, 0), {R1, R2, CPOS6a},
169130561Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
170130561Sobrien    {"dep.z",	I, OpX2XYb (5, 1, 1, 0), {R1, R2, CPOS6a, LEN6}, EMPTY},
171130561Sobrien    {"dep.z",	I, OpX2XYb (5, 1, 1, 1), {R1, IMM8, CPOS6a, LEN6}, EMPTY},
172130561Sobrien    {"dep",	I, OpX2X (5, 3, 1), {R1, IMM1, R3, CPOS6b, LEN6}, EMPTY},
173218822Sdim#define TF(a,b,c) \
174218822Sdim	I2, OpX2TaTbYaXcC (5, 0, a, b, 1, 1, c), {P1, P2, IMMU5b}, EMPTY
175218822Sdim#define TFCM(a,b,c) \
176218822Sdim	I2, OpX2TaTbYaXcC (5, 0, a, b, 1, 1, c), {P2, P1, IMMU5b}, PSEUDO, 0, NULL
177218822Sdim    {"tf.z",		 TF   (0, 0, 0)},
178218822Sdim    {"tf.nz",		 TFCM (0, 0, 0)},
179218822Sdim    {"tf.z.unc",	 TF   (0, 0, 1)},
180218822Sdim    {"tf.nz.unc",	 TFCM (0, 0, 1)},
181218822Sdim    {"tf.z.and",	 TF   (0, 1, 0)},
182218822Sdim    {"tf.nz.andcm",	 TFCM (0, 1, 0)},
183218822Sdim    {"tf.nz.and",	 TF   (0, 1, 1)},
184218822Sdim    {"tf.z.andcm",	 TFCM (0, 1, 1)},
185218822Sdim    {"tf.z.or",		 TF   (1, 0, 0)},
186218822Sdim    {"tf.nz.orcm",	 TFCM (1, 0, 0)},
187218822Sdim    {"tf.nz.or",	 TF   (1, 0, 1)},
188218822Sdim    {"tf.z.orcm",	 TFCM (1, 0, 1)},
189218822Sdim    {"tf.z.or.andcm",	 TF   (1, 1, 0)},
190218822Sdim    {"tf.nz.and.orcm",	 TFCM (1, 1, 0)},
191218822Sdim    {"tf.nz.or.andcm",	 TF   (1, 1, 1)},
192218822Sdim    {"tf.z.and.orcm",	 TFCM (1, 1, 1)},
193218822Sdim#undef TF
194218822Sdim#undef TFCM
19584865Sobrien#define TBIT(a,b,c,d) \
196130561Sobrien        I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P1, P2, R3, POS6}, EMPTY
19784865Sobrien#define TBITCM(a,b,c,d)	\
198130561Sobrien        I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P2, P1, R3, POS6}, PSEUDO, 0, NULL
19984865Sobrien    {"tbit.z",		 TBIT   (0, 0, 0, 0)},
20084865Sobrien    {"tbit.nz",		 TBITCM (0, 0, 0, 0)},
20184865Sobrien    {"tbit.z.unc",	 TBIT   (0, 0, 0, 1)},
20284865Sobrien    {"tbit.nz.unc",	 TBITCM (0, 0, 0, 1)},
20384865Sobrien    {"tbit.z.and",	 TBIT   (0, 1, 0, 0)},
20484865Sobrien    {"tbit.nz.andcm",	 TBITCM (0, 1, 0, 0)},
20584865Sobrien    {"tbit.nz.and",	 TBIT   (0, 1, 0, 1)},
20684865Sobrien    {"tbit.z.andcm",	 TBITCM (0, 1, 0, 1)},
20784865Sobrien    {"tbit.z.or",	 TBIT   (1, 0, 0, 0)},
20884865Sobrien    {"tbit.nz.orcm",	 TBITCM (1, 0, 0, 0)},
20984865Sobrien    {"tbit.nz.or",	 TBIT   (1, 0, 0, 1)},
21084865Sobrien    {"tbit.z.orcm",	 TBITCM (1, 0, 0, 1)},
21184865Sobrien    {"tbit.z.or.andcm",	 TBIT   (1, 1, 0, 0)},
21284865Sobrien    {"tbit.nz.and.orcm", TBITCM (1, 1, 0, 0)},
21384865Sobrien    {"tbit.nz.or.andcm", TBIT   (1, 1, 0, 1)},
21484865Sobrien    {"tbit.z.and.orcm",  TBITCM (1, 1, 0, 1)},
21584865Sobrien#undef TBIT
216218822Sdim#undef TBITCM
21784865Sobrien#define TNAT(a,b,c,d) \
218130561Sobrien	I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P1, P2, R3}, EMPTY
21984865Sobrien#define TNATCM(a,b,c,d) \
220130561Sobrien	I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P2, P1, R3}, PSEUDO, 0, NULL
22184865Sobrien    {"tnat.z",		 TNAT   (0, 0, 1, 0)},
22284865Sobrien    {"tnat.nz",		 TNATCM (0, 0, 1, 0)},
22384865Sobrien    {"tnat.z.unc",	 TNAT   (0, 0, 1, 1)},
22484865Sobrien    {"tnat.nz.unc",	 TNATCM (0, 0, 1, 1)},
22584865Sobrien    {"tnat.z.and",	 TNAT   (0, 1, 1, 0)},
22684865Sobrien    {"tnat.nz.andcm",	 TNATCM (0, 1, 1, 0)},
22784865Sobrien    {"tnat.nz.and",	 TNAT   (0, 1, 1, 1)},
22884865Sobrien    {"tnat.z.andcm",	 TNATCM (0, 1, 1, 1)},
22984865Sobrien    {"tnat.z.or",	 TNAT   (1, 0, 1, 0)},
23084865Sobrien    {"tnat.nz.orcm",	 TNATCM (1, 0, 1, 0)},
23184865Sobrien    {"tnat.nz.or",	 TNAT   (1, 0, 1, 1)},
23284865Sobrien    {"tnat.z.orcm",	 TNATCM (1, 0, 1, 1)},
23384865Sobrien    {"tnat.z.or.andcm",	 TNAT   (1, 1, 1, 0)},
23484865Sobrien    {"tnat.nz.and.orcm", TNATCM (1, 1, 1, 0)},
23584865Sobrien    {"tnat.nz.or.andcm", TNAT   (1, 1, 1, 1)},
23684865Sobrien    {"tnat.z.and.orcm",  TNATCM (1, 1, 1, 1)},
23784865Sobrien#undef TNAT
238218822Sdim#undef TNATCM
23984865Sobrien
240130561Sobrien    {"pmpyshr2",   I, OpZaZbVeX2aX2b (7, 0, 1, 0, 0, 3), {R1, R2, R3, CNT2c}, EMPTY},
241130561Sobrien    {"pmpyshr2.u", I, OpZaZbVeX2aX2b (7, 0, 1, 0, 0, 1), {R1, R2, R3, CNT2c}, EMPTY},
242130561Sobrien    {"pmpy2.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 1, 3), {R1, R2, R3}, EMPTY},
243130561Sobrien    {"pmpy2.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 3), {R1, R2, R3}, EMPTY},
244130561Sobrien    {"mix1.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
245130561Sobrien    {"mix2.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
246130561Sobrien    {"mix4.r",	   I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
247130561Sobrien    {"mix1.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
248130561Sobrien    {"mix2.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
249130561Sobrien    {"mix4.l",	   I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
250130561Sobrien    {"pack2.uss",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 0), {R1, R2, R3}, EMPTY},
251130561Sobrien    {"pack2.sss",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 0), {R1, R2, R3}, EMPTY},
252130561Sobrien    {"pack4.sss",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 0), {R1, R2, R3}, EMPTY},
253130561Sobrien    {"unpack1.h",  I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
254130561Sobrien    {"unpack2.h",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
255130561Sobrien    {"unpack4.h",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
256130561Sobrien    {"unpack1.l",  I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
257130561Sobrien    {"unpack2.l",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
258130561Sobrien    {"unpack4.l",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
259130561Sobrien    {"pmin1.u",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 1, 0), {R1, R2, R3}, EMPTY},
260130561Sobrien    {"pmax1.u",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 1, 1), {R1, R2, R3}, EMPTY},
261130561Sobrien    {"pmin2",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 0), {R1, R2, R3}, EMPTY},
262130561Sobrien    {"pmax2",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 1), {R1, R2, R3}, EMPTY},
263130561Sobrien    {"psad1",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 3, 2), {R1, R2, R3}, EMPTY},
264130561Sobrien    {"mux1", I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 3, 2, 2), {R1, R2, MBTYPE4}, EMPTY},
265130561Sobrien    {"mux2", I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 3, 2, 2), {R1, R2, MHTYPE8}, EMPTY},
266130561Sobrien    {"pshr2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
267130561Sobrien    {"pshr4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
268130561Sobrien    {"shr",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
269130561Sobrien    {"pshr2.u",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
270130561Sobrien    {"pshr4.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
271130561Sobrien    {"shr.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
272130561Sobrien    {"pshr2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 3, 0), {R1, R3, CNT5}, EMPTY},
273130561Sobrien    {"pshr4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 1, 3, 0), {R1, R3, CNT5}, EMPTY},
274130561Sobrien    {"pshr2.u",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 1, 0), {R1, R3, CNT5}, EMPTY},
275130561Sobrien    {"pshr4.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 1, 1, 0), {R1, R3, CNT5}, EMPTY},
276130561Sobrien    {"pshl2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
277130561Sobrien    {"pshl4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
278130561Sobrien    {"shl",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
279130561Sobrien    {"pshl2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 3, 1, 1), {R1, R2, CCNT5}, EMPTY},
280130561Sobrien    {"pshl4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 3, 1, 1), {R1, R2, CCNT5}, EMPTY},
281130561Sobrien    {"popcnt",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 1, 2), {R1, R3}, EMPTY},
28284865Sobrien
283130561Sobrien    {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
28484865Sobrien  };
28584865Sobrien
28684865Sobrien#undef I0
28784865Sobrien#undef I
28884865Sobrien#undef I2
28984865Sobrien#undef L
29084865Sobrien#undef bC
29184865Sobrien#undef bIh
29284865Sobrien#undef bTa
29384865Sobrien#undef bTag13
29484865Sobrien#undef bTb
29584865Sobrien#undef bVc
29684865Sobrien#undef bVe
29784865Sobrien#undef bWh
29884865Sobrien#undef bX
29984865Sobrien#undef bXb
30084865Sobrien#undef bX2
30184865Sobrien#undef bX2a
30284865Sobrien#undef bX2b
30384865Sobrien#undef bX2c
30484865Sobrien#undef bX3
30584865Sobrien#undef bX6
30684865Sobrien#undef bY
30784865Sobrien#undef bZa
30884865Sobrien#undef bZb
30984865Sobrien#undef mC
31084865Sobrien#undef mIh
31184865Sobrien#undef mTa
31284865Sobrien#undef mTag13
31384865Sobrien#undef mTb
31484865Sobrien#undef mVc
31584865Sobrien#undef mVe
31684865Sobrien#undef mWh
31784865Sobrien#undef mX
31884865Sobrien#undef mXb
31984865Sobrien#undef mX2
32084865Sobrien#undef mX2a
32184865Sobrien#undef mX2b
32284865Sobrien#undef mX2c
32384865Sobrien#undef mX3
32484865Sobrien#undef mX6
32584865Sobrien#undef mY
32684865Sobrien#undef mZa
32784865Sobrien#undef mZb
32884865Sobrien#undef OpZaZbVeX2aX2b
32984865Sobrien#undef OpZaZbVeX2aX2bX2c
33084865Sobrien#undef OpX2X
33184865Sobrien#undef OpX2XYa
33284865Sobrien#undef OpX2XYb
33384865Sobrien#undef OpX2TaTbYaC
33484865Sobrien#undef OpX3
33584865Sobrien#undef OpX3X6
33684865Sobrien#undef OpX3XbIhWh
33784865Sobrien#undef OpX3XbIhWhTag13
338130561Sobrien#undef EMPTY
339