159024Sobrien/* ia64-opc-i.c -- IA-64 `I' opcode table.
259396Sobrien   Copyright 1998, 1999, 2000, 2002, 2005, 2006
359024Sobrien   Free Software Foundation, Inc.
459024Sobrien   Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
559024Sobrien
659024Sobrien   This file is part of GDB, GAS, and the GNU binutils.
759024Sobrien
859024Sobrien   GDB, GAS, and the GNU binutils are free software; you can redistribute
959024Sobrien   them and/or modify them under the terms of the GNU General Public
1059024Sobrien   License as published by the Free Software Foundation; either version
1159024Sobrien   2, or (at your option) any later version.
1259024Sobrien
1359024Sobrien   GDB, GAS, and the GNU binutils are distributed in the hope that they
1459024Sobrien   will be useful, but WITHOUT ANY WARRANTY; without even the implied
1559024Sobrien   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1659024Sobrien   the GNU General Public License for more details.
1759024Sobrien
1859024Sobrien   You should have received a copy of the GNU General Public License
1959024Sobrien   along with this file; see the file COPYING.  If not, write to the
2059024Sobrien   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
2159024Sobrien   02110-1301, USA.  */
2259024Sobrien
2359024Sobrien#include "ia64-opc.h"
2459024Sobrien
2559024Sobrien#define I0	IA64_TYPE_I, 0
2659024Sobrien#define I	IA64_TYPE_I, 1
2759024Sobrien#define I2	IA64_TYPE_I, 2
2859024Sobrien
2959024Sobrien/* instruction bit fields: */
3059024Sobrien#define bC(x)		(((ia64_insn) ((x) & 0x1)) << 12)
3159024Sobrien#define bIh(x)		(((ia64_insn) ((x) & 0x1)) << 23)
3259024Sobrien#define bTa(x)		(((ia64_insn) ((x) & 0x1)) << 33)
3359024Sobrien#define bTag13(x)	(((ia64_insn) ((x) & 0x1)) << 33)
3459024Sobrien#define bTb(x)		(((ia64_insn) ((x) & 0x1)) << 36)
3559024Sobrien#define bVc(x)		(((ia64_insn) ((x) & 0x1)) << 20)
3659024Sobrien#define bVe(x)		(((ia64_insn) ((x) & 0x1)) << 32)
3759024Sobrien#define bWh(x)		(((ia64_insn) ((x) & 0x3)) << 20)
3859024Sobrien#define bX(x)		(((ia64_insn) ((x) & 0x1)) << 33)
3959024Sobrien#define bXb(x)		(((ia64_insn) ((x) & 0x1)) << 22)
4059024Sobrien#define bXc(x)		(((ia64_insn) ((x) & 0x1)) << 19)
4159024Sobrien#define bX2(x)		(((ia64_insn) ((x) & 0x3)) << 34)
4259024Sobrien#define bX2a(x)		(((ia64_insn) ((x) & 0x3)) << 34)
4359024Sobrien#define bX2b(x)		(((ia64_insn) ((x) & 0x3)) << 28)
4459024Sobrien#define bX2c(x)		(((ia64_insn) ((x) & 0x3)) << 30)
4559024Sobrien#define bX3(x)		(((ia64_insn) ((x) & 0x7)) << 33)
4659024Sobrien#define bX6(x)		(((ia64_insn) ((x) & 0x3f)) << 27)
4759024Sobrien#define bYa(x)		(((ia64_insn) ((x) & 0x1)) << 13)
4859024Sobrien#define bYb(x)		(((ia64_insn) ((x) & 0x1)) << 26)
4959024Sobrien#define bZa(x)		(((ia64_insn) ((x) & 0x1)) << 36)
5059024Sobrien#define bZb(x)		(((ia64_insn) ((x) & 0x1)) << 33)
5159024Sobrien
5259024Sobrien/* instruction bit masks: */
5359024Sobrien#define mC	bC (-1)
5459024Sobrien#define mIh	bIh (-1)
5559024Sobrien#define mTa	bTa (-1)
5659024Sobrien#define mTag13	bTag13 (-1)
5759024Sobrien#define mTb	bTb (-1)
5859024Sobrien#define mVc	bVc (-1)
5959024Sobrien#define mVe	bVe (-1)
6059024Sobrien#define mWh	bWh (-1)
6159024Sobrien#define mX	bX (-1)
6259024Sobrien#define mXb	bXb (-1)
6359024Sobrien#define mXc	bXc (-1)
6459024Sobrien#define mX2	bX2 (-1)
6559024Sobrien#define mX2a	bX2a (-1)
6659024Sobrien#define mX2b	bX2b (-1)
6759024Sobrien#define mX2c	bX2c (-1)
6859024Sobrien#define mX3	bX3 (-1)
6959024Sobrien#define mX6	bX6 (-1)
7059024Sobrien#define mYa	bYa (-1)
7159024Sobrien#define mYb	bYb (-1)
7259024Sobrien#define mZa	bZa (-1)
7359024Sobrien#define mZb	bZb (-1)
7459024Sobrien
7559024Sobrien#define OpZaZbVeX2aX2b(a,b,c,d,e,f) \
7659024Sobrien	(bOp (a) | bZa (b) | bZb (c) | bVe (d) | bX2a (e) | bX2b (f)), \
7759024Sobrien	(mOp | mZa | mZb | mVe | mX2a | mX2b)
7859024Sobrien#define OpZaZbVeX2aX2bX2c(a,b,c,d,e,f,g) \
7959024Sobrien  (bOp (a) | bZa (b) | bZb (c) | bVe (d) | bX2a (e) | bX2b (f) | bX2c (g)), \
8059024Sobrien	(mOp | mZa | mZb | mVe | mX2a | mX2b | mX2c)
8159024Sobrien#define OpX2X(a,b,c)		(bOp (a) | bX2 (b) | bX (c)), (mOp | mX2 | mX)
8259024Sobrien#define OpX2XYa(a,b,c,d)	(bOp (a) | bX2 (b) | bX (c) | bYa (d)), \
8359024Sobrien				(mOp | mX2 | mX | mYa)
8459024Sobrien#define OpX2XYb(a,b,c,d)	(bOp (a) | bX2 (b) | bX (c) | bYb (d)), \
8559024Sobrien				(mOp | mX2 | mX | mYb)
8659024Sobrien#define OpX2TaTbYaC(a,b,c,d,e,f) \
8759024Sobrien	(bOp (a) | bX2 (b) | bTa (c) | bTb (d) | bYa (e) | bC (f)), \
8859024Sobrien	(mOp | mX2 | mTa | mTb | mYa | mC)
8959024Sobrien#define OpX2TaTbYaXcC(a,b,c,d,e,f,g) \
9059024Sobrien	(bOp (a) | bX2 (b) | bTa (c) | bTb (d) | bYa (e) | bXc (f) | bC (g)), \
9159024Sobrien	(mOp | mX2 | mTa | mTb | mYa | mXc | mC)
9259024Sobrien#define OpX3(a,b)		(bOp (a) | bX3 (b)), (mOp | mX3)
9359024Sobrien#define OpX3X6(a,b,c)		(bOp (a) | bX3 (b) | bX6(c)), \
9459024Sobrien				(mOp | mX3 | mX6)
9559024Sobrien#define OpX3X6Yb(a,b,c,d)	(bOp (a) | bX3 (b) | bX6(c) | bYb(d)), \
9659024Sobrien				(mOp | mX3 | mX6 | mYb)
9759024Sobrien#define OpX3XbIhWh(a,b,c,d,e) \
9859024Sobrien  (bOp (a) | bX3 (b) | bXb (c) | bIh (d) | bWh (e)), \
9959024Sobrien  (mOp | mX3 | mXb | mIh | mWh)
10059024Sobrien#define OpX3XbIhWhTag13(a,b,c,d,e,f) \
10159024Sobrien     (bOp (a) | bX3 (b) | bXb (c) | bIh (d) | bWh (e) | bTag13 (f)), \
10259024Sobrien     (mOp | mX3 | mXb | mIh | mWh | mTag13)
10359024Sobrien
10459024Sobrien#define FULL17 ((ia64_insn)0x10ff001fc0LL)
10559024Sobrien
10659024Sobrien/* Used to initialise unused fields in ia64_opcode struct,
10759024Sobrien   in order to stop gcc from complaining.  */
10859024Sobrien#define EMPTY 0,0,NULL
10959024Sobrien
11059024Sobrienstruct ia64_opcode ia64_opcodes_i[] =
11159024Sobrien  {
11259024Sobrien    /* I-type instruction encodings (sorted according to major opcode).  */
11359024Sobrien
11459024Sobrien    {"break.i",	I0, OpX3X6 (0, 0, 0x00), {IMMU21}, X_IN_MLX, 0, NULL},
11559024Sobrien    {"nop.i",	I0, OpX3X6Yb (0, 0, 0x01, 0), {IMMU21}, X_IN_MLX, 0, NULL},
11659024Sobrien    {"hint.i",	I0, OpX3X6Yb (0, 0, 0x01, 1), {IMMU21}, X_IN_MLX, 0, NULL},
11759024Sobrien    {"chk.s.i",	I0, OpX3 (0, 1), {R2, TGT25b}, EMPTY},
11859024Sobrien
11959024Sobrien    {"mov", I, OpX3XbIhWhTag13 (0, 7, 0, 0, 1, 0), {B1, R2}, PSEUDO, 0, NULL},
12059024Sobrien#define MOV(a,b,c,d) \
12159024Sobrien    I, OpX3XbIhWh (0, a, b, c, d), {B1, R2, TAG13b}, EMPTY
12259024Sobrien    {"mov.sptk",		MOV (7, 0, 0, 0)},
12359024Sobrien    {"mov.sptk.imp",		MOV (7, 0, 1, 0)},
12459024Sobrien    {"mov",			MOV (7, 0, 0, 1)},
12559024Sobrien    {"mov.imp",			MOV (7, 0, 1, 1)},
12659024Sobrien    {"mov.dptk",		MOV (7, 0, 0, 2)},
12759024Sobrien    {"mov.dptk.imp",		MOV (7, 0, 1, 2)},
12859024Sobrien    {"mov.ret.sptk",		MOV (7, 1, 0, 0)},
12959024Sobrien    {"mov.ret.sptk.imp",	MOV (7, 1, 1, 0)},
13059024Sobrien    {"mov.ret",			MOV (7, 1, 0, 1)},
13159024Sobrien    {"mov.ret.imp",		MOV (7, 1, 1, 1)},
13259024Sobrien    {"mov.ret.dptk",		MOV (7, 1, 0, 2)},
13359024Sobrien    {"mov.ret.dptk.imp",	MOV (7, 1, 1, 2)},
13459024Sobrien#undef MOV
13559024Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x31), {R1, B2}, EMPTY},
13659024Sobrien    {"mov",	I, OpX3 (0, 3), {PR, R2, IMM17}, EMPTY},
13759024Sobrien    /* Don't remove one of the seemingly redundant FULL17-s.  */
13859024Sobrien    {"mov",	I, FULL17 | OpX3 (0, 3) | FULL17, {PR, R2}, PSEUDO, 0, NULL},
13959024Sobrien    {"mov",	I, OpX3 (0, 2), {PR_ROT, IMM44}, EMPTY},
14059024Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x30), {R1, IP}, EMPTY},
14159024Sobrien    {"mov",	I, OpX3X6 (0, 0, 0x33), {R1, PR}, EMPTY},
14259024Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x2a), {AR3, R2}, EMPTY},
14359024Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x0a), {AR3, IMM8}, EMPTY},
14459024Sobrien    {"mov.i",	I, OpX3X6 (0, 0, 0x32), {R1, AR3}, EMPTY},
14559024Sobrien    {"zxt1",	I, OpX3X6 (0, 0, 0x10), {R1, R3}, EMPTY},
14659024Sobrien    {"zxt2",	I, OpX3X6 (0, 0, 0x11), {R1, R3}, EMPTY},
14759024Sobrien    {"zxt4",	I, OpX3X6 (0, 0, 0x12), {R1, R3}, EMPTY},
14859024Sobrien    {"sxt1",	I, OpX3X6 (0, 0, 0x14), {R1, R3}, EMPTY},
14959024Sobrien    {"sxt2",	I, OpX3X6 (0, 0, 0x15), {R1, R3}, EMPTY},
15059024Sobrien    {"sxt4",	I, OpX3X6 (0, 0, 0x16), {R1, R3}, EMPTY},
15159024Sobrien    {"czx1.l",	I, OpX3X6 (0, 0, 0x18), {R1, R3}, EMPTY},
15259024Sobrien    {"czx2.l",	I, OpX3X6 (0, 0, 0x19), {R1, R3}, EMPTY},
15359024Sobrien    {"czx1.r",	I, OpX3X6 (0, 0, 0x1c), {R1, R3}, EMPTY},
15459024Sobrien    {"czx2.r",	I, OpX3X6 (0, 0, 0x1d), {R1, R3}, EMPTY},
15559024Sobrien
15659024Sobrien    {"dep",	I, Op (4), {R1, R2, R3, CPOS6c, LEN4}, EMPTY},
15759024Sobrien
15859024Sobrien    {"shrp",	I, OpX2X (5, 3, 0), {R1, R2, R3, CNT6}, EMPTY},
15959024Sobrien
16059024Sobrien    {"shr.u",	I, OpX2XYa (5, 1, 0, 0), {R1, R3, POS6},
16159024Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
16259024Sobrien    {"extr.u",	I, OpX2XYa (5, 1, 0, 0), {R1, R3, POS6, LEN6}, EMPTY},
16359024Sobrien
16459024Sobrien    {"shr",	I, OpX2XYa (5, 1, 0, 1), {R1, R3, POS6},
16559024Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
16659024Sobrien    {"extr",	I, OpX2XYa (5, 1, 0, 1), {R1, R3, POS6, LEN6}, EMPTY},
16759024Sobrien
16859024Sobrien    {"shl",	I, OpX2XYb (5, 1, 1, 0), {R1, R2, CPOS6a},
16959024Sobrien     PSEUDO | LEN_EQ_64MCNT, 0, NULL},
17059024Sobrien    {"dep.z",	I, OpX2XYb (5, 1, 1, 0), {R1, R2, CPOS6a, LEN6}, EMPTY},
17159024Sobrien    {"dep.z",	I, OpX2XYb (5, 1, 1, 1), {R1, IMM8, CPOS6a, LEN6}, EMPTY},
17259024Sobrien    {"dep",	I, OpX2X (5, 3, 1), {R1, IMM1, R3, CPOS6b, LEN6}, EMPTY},
17359024Sobrien#define TF(a,b,c) \
17459024Sobrien	I2, OpX2TaTbYaXcC (5, 0, a, b, 1, 1, c), {P1, P2, IMMU5b}, EMPTY
17559024Sobrien#define TFCM(a,b,c) \
17659024Sobrien	I2, OpX2TaTbYaXcC (5, 0, a, b, 1, 1, c), {P2, P1, IMMU5b}, PSEUDO, 0, NULL
17759024Sobrien    {"tf.z",		 TF   (0, 0, 0)},
17859024Sobrien    {"tf.nz",		 TFCM (0, 0, 0)},
17959024Sobrien    {"tf.z.unc",	 TF   (0, 0, 1)},
18059024Sobrien    {"tf.nz.unc",	 TFCM (0, 0, 1)},
18159024Sobrien    {"tf.z.and",	 TF   (0, 1, 0)},
18259024Sobrien    {"tf.nz.andcm",	 TFCM (0, 1, 0)},
18359024Sobrien    {"tf.nz.and",	 TF   (0, 1, 1)},
18459024Sobrien    {"tf.z.andcm",	 TFCM (0, 1, 1)},
18559024Sobrien    {"tf.z.or",		 TF   (1, 0, 0)},
18659024Sobrien    {"tf.nz.orcm",	 TFCM (1, 0, 0)},
18759024Sobrien    {"tf.nz.or",	 TF   (1, 0, 1)},
18859024Sobrien    {"tf.z.orcm",	 TFCM (1, 0, 1)},
18959024Sobrien    {"tf.z.or.andcm",	 TF   (1, 1, 0)},
19059024Sobrien    {"tf.nz.and.orcm",	 TFCM (1, 1, 0)},
19159024Sobrien    {"tf.nz.or.andcm",	 TF   (1, 1, 1)},
19259024Sobrien    {"tf.z.and.orcm",	 TFCM (1, 1, 1)},
19359024Sobrien#undef TF
19459024Sobrien#undef TFCM
19559024Sobrien#define TBIT(a,b,c,d) \
19659024Sobrien        I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P1, P2, R3, POS6}, EMPTY
19759024Sobrien#define TBITCM(a,b,c,d)	\
19859024Sobrien        I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P2, P1, R3, POS6}, PSEUDO, 0, NULL
19959024Sobrien    {"tbit.z",		 TBIT   (0, 0, 0, 0)},
20059024Sobrien    {"tbit.nz",		 TBITCM (0, 0, 0, 0)},
20159024Sobrien    {"tbit.z.unc",	 TBIT   (0, 0, 0, 1)},
20259024Sobrien    {"tbit.nz.unc",	 TBITCM (0, 0, 0, 1)},
20359024Sobrien    {"tbit.z.and",	 TBIT   (0, 1, 0, 0)},
20459024Sobrien    {"tbit.nz.andcm",	 TBITCM (0, 1, 0, 0)},
20559024Sobrien    {"tbit.nz.and",	 TBIT   (0, 1, 0, 1)},
20659024Sobrien    {"tbit.z.andcm",	 TBITCM (0, 1, 0, 1)},
20759024Sobrien    {"tbit.z.or",	 TBIT   (1, 0, 0, 0)},
20859024Sobrien    {"tbit.nz.orcm",	 TBITCM (1, 0, 0, 0)},
20959024Sobrien    {"tbit.nz.or",	 TBIT   (1, 0, 0, 1)},
21059024Sobrien    {"tbit.z.orcm",	 TBITCM (1, 0, 0, 1)},
21159024Sobrien    {"tbit.z.or.andcm",	 TBIT   (1, 1, 0, 0)},
21259024Sobrien    {"tbit.nz.and.orcm", TBITCM (1, 1, 0, 0)},
21359024Sobrien    {"tbit.nz.or.andcm", TBIT   (1, 1, 0, 1)},
21459024Sobrien    {"tbit.z.and.orcm",  TBITCM (1, 1, 0, 1)},
21559024Sobrien#undef TBIT
21659024Sobrien#undef TBITCM
21759024Sobrien#define TNAT(a,b,c,d) \
21859024Sobrien	I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P1, P2, R3}, EMPTY
21959024Sobrien#define TNATCM(a,b,c,d) \
22059024Sobrien	I2, OpX2TaTbYaC (5, 0, a, b, c, d), {P2, P1, R3}, PSEUDO, 0, NULL
22159024Sobrien    {"tnat.z",		 TNAT   (0, 0, 1, 0)},
22259024Sobrien    {"tnat.nz",		 TNATCM (0, 0, 1, 0)},
22359024Sobrien    {"tnat.z.unc",	 TNAT   (0, 0, 1, 1)},
22459024Sobrien    {"tnat.nz.unc",	 TNATCM (0, 0, 1, 1)},
22559024Sobrien    {"tnat.z.and",	 TNAT   (0, 1, 1, 0)},
22659024Sobrien    {"tnat.nz.andcm",	 TNATCM (0, 1, 1, 0)},
22759024Sobrien    {"tnat.nz.and",	 TNAT   (0, 1, 1, 1)},
22859024Sobrien    {"tnat.z.andcm",	 TNATCM (0, 1, 1, 1)},
22959024Sobrien    {"tnat.z.or",	 TNAT   (1, 0, 1, 0)},
23059024Sobrien    {"tnat.nz.orcm",	 TNATCM (1, 0, 1, 0)},
23159024Sobrien    {"tnat.nz.or",	 TNAT   (1, 0, 1, 1)},
23259024Sobrien    {"tnat.z.orcm",	 TNATCM (1, 0, 1, 1)},
23359024Sobrien    {"tnat.z.or.andcm",	 TNAT   (1, 1, 1, 0)},
23459024Sobrien    {"tnat.nz.and.orcm", TNATCM (1, 1, 1, 0)},
23559024Sobrien    {"tnat.nz.or.andcm", TNAT   (1, 1, 1, 1)},
23659024Sobrien    {"tnat.z.and.orcm",  TNATCM (1, 1, 1, 1)},
23759024Sobrien#undef TNAT
23859024Sobrien#undef TNATCM
23959024Sobrien
24059024Sobrien    {"pmpyshr2",   I, OpZaZbVeX2aX2b (7, 0, 1, 0, 0, 3), {R1, R2, R3, CNT2c}, EMPTY},
24159024Sobrien    {"pmpyshr2.u", I, OpZaZbVeX2aX2b (7, 0, 1, 0, 0, 1), {R1, R2, R3, CNT2c}, EMPTY},
24259024Sobrien    {"pmpy2.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 1, 3), {R1, R2, R3}, EMPTY},
24359024Sobrien    {"pmpy2.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 3), {R1, R2, R3}, EMPTY},
24459024Sobrien    {"mix1.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
24559024Sobrien    {"mix2.r",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
24659024Sobrien    {"mix4.r",	   I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 0, 2), {R1, R2, R3}, EMPTY},
24759024Sobrien    {"mix1.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
24859024Sobrien    {"mix2.l",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
24959024Sobrien    {"mix4.l",	   I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 2), {R1, R2, R3}, EMPTY},
25059024Sobrien    {"pack2.uss",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 0), {R1, R2, R3}, EMPTY},
25159024Sobrien    {"pack2.sss",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 0), {R1, R2, R3}, EMPTY},
25259024Sobrien    {"pack4.sss",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 0), {R1, R2, R3}, EMPTY},
25359024Sobrien    {"unpack1.h",  I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
25459024Sobrien    {"unpack2.h",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
25559024Sobrien    {"unpack4.h",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 0, 1), {R1, R2, R3}, EMPTY},
25659024Sobrien    {"unpack1.l",  I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
25759024Sobrien    {"unpack2.l",  I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
25859024Sobrien    {"unpack4.l",  I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 2, 2, 1), {R1, R2, R3}, EMPTY},
25959024Sobrien    {"pmin1.u",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 1, 0), {R1, R2, R3}, EMPTY},
26059024Sobrien    {"pmax1.u",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 1, 1), {R1, R2, R3}, EMPTY},
26159024Sobrien    {"pmin2",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 0), {R1, R2, R3}, EMPTY},
26259024Sobrien    {"pmax2",	   I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 2, 3, 1), {R1, R2, R3}, EMPTY},
26359024Sobrien    {"psad1",	   I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 2, 3, 2), {R1, R2, R3}, EMPTY},
26459024Sobrien    {"mux1", I, OpZaZbVeX2aX2bX2c (7, 0, 0, 0, 3, 2, 2), {R1, R2, MBTYPE4}, EMPTY},
26559024Sobrien    {"mux2", I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 3, 2, 2), {R1, R2, MHTYPE8}, EMPTY},
26659024Sobrien    {"pshr2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
26759024Sobrien    {"pshr4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
26859024Sobrien    {"shr",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 2, 0), {R1, R3, R2}, EMPTY},
26959024Sobrien    {"pshr2.u",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
27059024Sobrien    {"pshr4.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
27159024Sobrien    {"shr.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 0, 0), {R1, R3, R2}, EMPTY},
27259024Sobrien    {"pshr2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 3, 0), {R1, R3, CNT5}, EMPTY},
27359024Sobrien    {"pshr4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 1, 3, 0), {R1, R3, CNT5}, EMPTY},
27459024Sobrien    {"pshr2.u",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 1, 0), {R1, R3, CNT5}, EMPTY},
27559024Sobrien    {"pshr4.u",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 1, 1, 0), {R1, R3, CNT5}, EMPTY},
27659024Sobrien    {"pshl2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
27759024Sobrien    {"pshl4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
27859024Sobrien    {"shl",	I, OpZaZbVeX2aX2bX2c (7, 1, 1, 0, 0, 0, 1), {R1, R2, R3}, EMPTY},
27959024Sobrien    {"pshl2",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 3, 1, 1), {R1, R2, CCNT5}, EMPTY},
28059024Sobrien    {"pshl4",	I, OpZaZbVeX2aX2bX2c (7, 1, 0, 0, 3, 1, 1), {R1, R2, CCNT5}, EMPTY},
28159024Sobrien    {"popcnt",	I, OpZaZbVeX2aX2bX2c (7, 0, 1, 0, 1, 1, 2), {R1, R3}, EMPTY},
28259024Sobrien
28359024Sobrien    {NULL, 0, 0, 0, 0, {0}, 0, 0, NULL}
28459024Sobrien  };
28559024Sobrien
28659024Sobrien#undef I0
28759024Sobrien#undef I
28859024Sobrien#undef I2
28959024Sobrien#undef L
29059024Sobrien#undef bC
29159024Sobrien#undef bIh
29259024Sobrien#undef bTa
29359024Sobrien#undef bTag13
29459024Sobrien#undef bTb
29559024Sobrien#undef bVc
29659024Sobrien#undef bVe
29759024Sobrien#undef bWh
29859024Sobrien#undef bX
29959024Sobrien#undef bXb
30059024Sobrien#undef bX2
30159024Sobrien#undef bX2a
30259024Sobrien#undef bX2b
30359024Sobrien#undef bX2c
30459024Sobrien#undef bX3
30559024Sobrien#undef bX6
30659024Sobrien#undef bY
30759024Sobrien#undef bZa
30859024Sobrien#undef bZb
30959024Sobrien#undef mC
31059024Sobrien#undef mIh
31159024Sobrien#undef mTa
31259024Sobrien#undef mTag13
31359024Sobrien#undef mTb
31459024Sobrien#undef mVc
31559024Sobrien#undef mVe
31659024Sobrien#undef mWh
31759024Sobrien#undef mX
31859024Sobrien#undef mXb
31959024Sobrien#undef mX2
32059024Sobrien#undef mX2a
32159024Sobrien#undef mX2b
32259024Sobrien#undef mX2c
32359024Sobrien#undef mX3
32459024Sobrien#undef mX6
32559024Sobrien#undef mY
32659024Sobrien#undef mZa
32759024Sobrien#undef mZb
32859024Sobrien#undef OpZaZbVeX2aX2b
32959024Sobrien#undef OpZaZbVeX2aX2bX2c
33059024Sobrien#undef OpX2X
33159024Sobrien#undef OpX2XYa
33259024Sobrien#undef OpX2XYb
33359024Sobrien#undef OpX2TaTbYaC
33459024Sobrien#undef OpX3
33559024Sobrien#undef OpX3X6
33659024Sobrien#undef OpX3XbIhWh
33759024Sobrien#undef OpX3XbIhWhTag13
33859024Sobrien#undef EMPTY
33959024Sobrien